From 38a3141d43cac8b94bb78d833314fb2fa3df0670 Mon Sep 17 00:00:00 2001 From: hammsterr Date: Tue, 27 Feb 2024 22:09:30 +0300 Subject: [PATCH] 0.6.0 --- .github/ISSUE_TEMPLATE/bug_report.yaml | 4 +- .gitignore | 2 +- LICENSE | 674 ---------- README.md | 16 +- app/X/app-X.apk | Bin 0 -> 3556965 bytes app/X/baselineProfiles/0/app-X.dm | Bin 0 -> 6270 bytes app/X/baselineProfiles/1/app-X.dm | Bin 0 -> 6216 bytes app/X/output-metadata.json | 37 + app/build.gradle.kts | 112 +- app/proguard-rules.pro | 4 +- .../it.hamy.muza.DatabaseInitializer/23.json | 12 +- .../it.hamy.muza.DatabaseInitializer/24.json | 678 ++++++++++ .../it.hamy.muza.DatabaseInitializer/25.json | 684 ++++++++++ .../it.hamy.muza.DatabaseInitializer/26.json | 733 +++++++++++ .../it.hamy.muza.DatabaseInitializer/27.json | 740 +++++++++++ .../it.hamy.muza.DatabaseInitializer/28.json | 752 +++++++++++ .../1.json | 304 +++++ .../10.json | 536 ++++++++ .../11.json | 518 ++++++++ .../12.json | 518 ++++++++ .../13.json | 530 ++++++++ .../14.json | 598 +++++++++ .../15.json | 586 +++++++++ .../16.json | 592 +++++++++ .../17.json | 598 +++++++++ .../18.json | 610 +++++++++ .../19.json | 670 ++++++++++ .../2.json | 336 +++++ .../20.json | 670 ++++++++++ .../21.json | 646 ++++++++++ .../22.json | 640 ++++++++++ .../23.json | 678 ++++++++++ .../24.json | 678 ++++++++++ .../25.json | 684 ++++++++++ .../26.json | 733 +++++++++++ .../27.json | 740 +++++++++++ .../28.json | 752 +++++++++++ .../3.json | 342 +++++ .../4.json | 310 +++++ .../5.json | 322 +++++ .../6.json | 354 ++++++ .../7.json | 511 ++++++++ .../8.json | 511 ++++++++ .../9.json | 419 ++++++ app/src/main/AndroidManifest.xml | 120 +- app/src/main/ic_launcher-playstore.png | Bin 15542 -> 13546 bytes app/src/main/kotlin/it/hamy/muza/Database.kt | 702 +++++++--- .../main/kotlin/it/hamy/muza/Dependencies.kt | 4 +- .../main/kotlin/it/hamy/muza/MainActivity.kt | 392 +++--- .../kotlin/it/hamy/muza/MainApplication.kt | 48 +- .../it/hamy/muza/enums/CoilDiskCacheSize.kt | 18 - .../muza/enums/ExoPlayerDiskCacheMaxSize.kt | 22 - .../it/hamy/muza/enums/ThumbnailRoundness.kt | 24 - .../main/kotlin/it/hamy/muza/models/Album.kt | 4 +- .../main/kotlin/it/hamy/muza/models/Artist.kt | 2 +- .../it/hamy/muza/models/EventWithSong.kt | 2 +- .../main/kotlin/it/hamy/muza/models/Lyrics.kt | 5 +- .../main/kotlin/it/hamy/muza/models/Mood.kt | 41 + .../it/hamy/muza/models/PipedSession.kt | 26 + .../it/hamy/muza/models/PlaylistPreview.kt | 14 +- .../main/kotlin/it/hamy/muza/models/Song.kt | 25 +- .../kotlin/it/hamy/muza/models/ui/UiMedia.kt | 17 + .../muza/preferences/AppearancePreferences.kt | 23 + .../hamy/muza/preferences/DataPreferences.kt | 29 +- .../hamy/muza/preferences/OrderPreferences.kt | 22 + .../muza/preferences/PlayerPreferences.kt | 66 + .../ProxyPreferences.kt} | 32 +- .../muza/preferences/UIStatePreferences.kt | 11 + .../it/hamy/muza/service/BitmapProvider.kt | 18 +- .../hamy/muza/service/PlaybackExceptions.kt | 7 +- .../muza/service/PlayerMediaBrowserService.kt | 295 +++-- .../it/hamy/muza/service/PlayerService.kt | 1132 ++++++++++------- .../it/hamy/muza/service/PrecacheService.kt | 268 ++++ .../hamy/muza/service/ServiceNotifications.kt | 10 + .../it/hamy/muza/ui/components/BottomSheet.kt | 208 ++- .../kotlin/it/hamy/muza/ui/components/Menu.kt | 4 +- .../it/hamy/muza/ui/components/MusicBars.kt | 158 +-- .../it/hamy/muza/ui/components/SeekBar.kt | 482 ++++++- .../it/hamy/muza/ui/components/ShimmerHost.kt | 32 +- .../muza/ui/components/YandexAdsBanner.kt | 87 -- .../YandexAdsBannerQuickPicksCenter.kt | 90 -- .../muza/ui/components/YandexAdsBanners.kt | 185 +++ .../muza/ui/components/themed/Attribution.kt | 76 ++ .../ui/components/themed/BigIconButton.kt | 54 + .../hamy/muza/ui/components/themed/Dialog.kt | 401 +++--- .../ui/components/themed/DialogTextButton.kt | 2 +- .../hamy/muza/ui/components/themed/Divider.kt | 72 ++ .../themed/FloatingActionsContainer.kt | 23 +- .../hamy/muza/ui/components/themed/Header.kt | 108 +- .../muza/ui/components/themed/IconButton.kt | 54 +- .../themed/LayoutWithAdaptiveThumbnail.kt | 51 +- .../ui/components/themed/MediaItemMenu.kt | 850 +++++++------ .../it/hamy/muza/ui/components/themed/Menu.kt | 36 +- .../ui/components/themed/NavigationRail.kt | 14 +- .../muza/ui/components/themed/PlaylistInfo.kt | 75 ++ .../ui/components/themed/PrimaryButton.kt | 2 +- .../ui/components/themed/ProgressIndicator.kt | 49 + .../ui/components/themed/ReorderHandle.kt | 28 + .../muza/ui/components/themed/Scaffold.kt | 15 +- .../ui/components/themed/SecondaryButton.kt | 2 +- .../components/themed/SecondaryTextButton.kt | 3 +- .../hamy/muza/ui/components/themed/Slider.kt | 33 + .../hamy/muza/ui/components/themed/Switch.kt | 9 +- .../muza/ui/components/themed/TextField.kt | 143 +++ .../ui/components/themed/TextPlaceholder.kt | 16 +- .../muza/ui/components/themed/TextToggle.kt | 68 + .../kotlin/it/hamy/muza/ui/items/AlbumItem.kt | 166 ++- .../it/hamy/muza/ui/items/ArtistItem.kt | 84 +- .../it/hamy/muza/ui/items/ItemContainer.kt | 65 +- .../it/hamy/muza/ui/items/PlaylistItem.kt | 305 +++-- .../kotlin/it/hamy/muza/ui/items/SongItem.kt | 199 +-- .../kotlin/it/hamy/muza/ui/items/VideoItem.kt | 169 ++- .../it/hamy/muza/ui/modifiers/FadingEdge.kt | 46 + .../it/hamy/muza/ui/modifiers/PinchToggle.kt | 71 ++ .../it/hamy/muza/ui/modifiers/Pressable.kt | 22 + .../it/hamy/muza/ui/modifiers/Swiping.kt | 241 ++++ .../kotlin/it/hamy/muza/ui/screens/Routes.kt | 51 +- .../hamy/muza/ui/screens/album/AlbumScreen.kt | 186 ++- .../hamy/muza/ui/screens/album/AlbumSongs.kt | 96 +- .../ui/screens/artist/ArtistLocalSongs.kt | 57 +- .../muza/ui/screens/artist/ArtistOverview.kt | 156 +-- .../muza/ui/screens/artist/ArtistScreen.kt | 369 +++--- .../builtinplaylist/BuiltInPlaylistScreen.kt | 41 +- .../builtinplaylist/BuiltInPlaylistSongs.kt | 188 +-- .../hamy/muza/ui/screens/home/HomeAlbums.kt | 59 +- .../hamy/muza/ui/screens/home/HomeArtists.kt | 70 +- .../muza/ui/screens/home/HomeDiscovery.kt | 276 ++++ .../muza/ui/screens/home/HomeLocalSongs.kt | 185 +++ .../muza/ui/screens/home/HomePlaylists.kt | 350 ++--- .../home/{QuickPicks.kt => HomeQuickPicks.kt} | 150 +-- .../hamy/muza/ui/screens/home/HomeScreen.kt | 96 +- .../it/hamy/muza/ui/screens/home/HomeSongs.kt | 257 +++- .../localplaylist/LocalPlaylistScreen.kt | 19 +- .../localplaylist/LocalPlaylistSongs.kt | 392 +++--- .../it/hamy/muza/ui/screens/mood/MoodList.kt | 177 +++ .../hamy/muza/ui/screens/mood/MoodScreen.kt | 42 + .../pipedplaylist/PipedPlaylistScreen.kt | 55 + .../pipedplaylist/PipedPlaylistSongList.kt | 166 +++ .../hamy/muza/ui/screens/player/Controls.kt | 450 +++++-- .../it/hamy/muza/ui/screens/player/Lyrics.kt | 518 +++++--- .../muza/ui/screens/player/LyricsDialog.kt | 123 ++ .../muza/ui/screens/player/PlaybackError.kt | 81 +- .../it/hamy/muza/ui/screens/player/Player.kt | 389 ++++-- .../it/hamy/muza/ui/screens/player/Queue.kt | 593 +++++---- .../muza/ui/screens/player/StatsForNerds.kt | 145 +-- .../hamy/muza/ui/screens/player/Thumbnail.kt | 143 ++- .../muza/ui/screens/player/WindowState.kt | 39 + .../ui/screens/playlist/PlaylistScreen.kt | 31 +- .../ui/screens/playlist/PlaylistSongList.kt | 169 +-- .../muza/ui/screens/search/LocalSongSearch.kt | 40 +- .../muza/ui/screens/search/OnlineSearch.kt | 75 +- .../muza/ui/screens/search/SearchScreen.kt | 31 +- .../muza/ui/screens/searchresult/ItemsPage.kt | 132 +- .../searchresult/SearchResultScreen.kt | 461 +++---- .../it/hamy/muza/ui/screens/settings/About.kt | 197 ++- .../ui/screens/settings/AppearanceSettings.kt | 280 ++-- .../muza/ui/screens/settings/CacheSettings.kt | 130 +- .../ui/screens/settings/DatabaseSettings.kt | 241 ++-- .../muza/ui/screens/settings/OtherSettings.kt | 403 +++--- .../ui/screens/settings/PlayerSettings.kt | 238 ++-- .../ui/screens/settings/SettingsScreen.kt | 342 +++-- .../muza/ui/screens/settings/SyncSettings.kt | 225 ++++ .../it/hamy/muza/ui/styling/Appearance.kt | 40 - .../it/hamy/muza/ui/styling/ColorPalette.kt | 177 --- .../it/hamy/muza/ui/styling/Dimensions.kt | 38 - .../kotlin/it/hamy/muza/utils/CacheState.kt | 73 ++ .../ConditionalCacheDataSourceFactory.kt | 49 + .../it/hamy/muza/utils/Configuration.kt | 33 + .../main/kotlin/it/hamy/muza/utils/Context.kt | 89 +- .../kotlin/it/hamy/muza/utils/DrawScope.kt | 21 +- .../kotlin/it/hamy/muza/utils/FadingEdge.kt | 24 - .../it/hamy/muza/utils/InvincibleService.kt | 56 +- .../main/kotlin/it/hamy/muza/utils/Player.kt | 70 +- .../kotlin/it/hamy/muza/utils/PlayerState.kt | 8 +- .../kotlin/it/hamy/muza/utils/RingBuffer.kt | 5 +- .../it/hamy/muza/utils/ScrollingInfo.kt | 64 +- .../{SmoothScrollToTop.kt => SmoothScroll.kt} | 11 +- ...oProvider.kt => SnapLayoutInfoProvider.kt} | 86 +- .../it/hamy/muza/utils/StateFlowSaver.kt | 18 + .../it/hamy/muza/utils/SynchronizedLyrics.kt | 17 +- .../kotlin/it/hamy/muza/utils/TextStyle.kt | 18 +- .../kotlin/it/hamy/muza/utils/TimerJob.kt | 12 +- .../main/kotlin/it/hamy/muza/utils/Utils.kt | 125 +- .../kotlin/it/hamy/muza/utils/YoutubeRadio.kt | 3 +- app/src/main/logo.png | Bin 12875 -> 0 bytes app/src/main/res/drawable/add.xml | 29 +- app/src/main/res/drawable/airplane.xml | 7 +- app/src/main/res/drawable/alarm.xml | 19 +- app/src/main/res/drawable/alert_circle.xml | 7 +- app/src/main/res/drawable/app_icon.xml | 17 +- app/src/main/res/drawable/arrow_down.xml | 20 - app/src/main/res/drawable/arrow_forward.xml | 29 +- app/src/main/res/drawable/arrow_up.xml | 29 +- app/src/main/res/drawable/bookmark.xml | 7 +- .../main/res/drawable/bookmark_outline.xml | 15 +- app/src/main/res/drawable/calendar.xml | 13 +- app/src/main/res/drawable/checkmark.xml | 13 - app/src/main/res/drawable/chevron_back.xml | 15 +- app/src/main/res/drawable/chevron_down.xml | 15 +- app/src/main/res/drawable/chevron_forward.xml | 15 +- app/src/main/res/drawable/chevron_up.xml | 19 +- app/src/main/res/drawable/close.xml | 7 +- app/src/main/res/drawable/color_palette.xml | 7 +- app/src/main/res/drawable/delete.xml | 5 + app/src/main/res/drawable/disc.xml | 13 +- app/src/main/res/drawable/download.xml | 13 +- .../main/res/drawable/ellipsis_horizontal.xml | 19 +- .../main/res/drawable/ellipsis_vertical.xml | 15 - app/src/main/res/drawable/enqueue.xml | 13 +- app/src/main/res/drawable/equalizer.xml | 19 +- app/src/main/res/drawable/film.xml | 9 +- app/src/main/res/drawable/globe.xml | 57 +- app/src/main/res/drawable/heart.xml | 7 +- app/src/main/res/drawable/heart_dislike.xml | 15 - app/src/main/res/drawable/heart_outline.xml | 13 +- .../res/drawable/ic_banner_foreground.xml | 92 +- .../res/drawable/ic_launcher_foreground.xml | 28 +- app/src/main/res/drawable/infinite.xml | 25 +- app/src/main/res/drawable/information.xml | 33 +- app/src/main/res/drawable/library.xml | 37 +- app/src/main/res/drawable/link.xml | 27 - app/src/main/res/drawable/medical.xml | 7 +- app/src/main/res/drawable/musical_notes.xml | 7 +- app/src/main/res/drawable/notifications.xml | 12 - app/src/main/res/drawable/pause.xml | 13 +- app/src/main/res/drawable/pencil.xml | 29 +- app/src/main/res/drawable/person.xml | 13 +- app/src/main/res/drawable/play.xml | 7 +- app/src/main/res/drawable/play_skip_back.xml | 7 +- .../main/res/drawable/play_skip_forward.xml | 7 +- app/src/main/res/drawable/playlist.xml | 81 +- app/src/main/res/drawable/radio.xml | 43 +- .../res/drawable/remove_circle_outline.xml | 11 + app/src/main/res/drawable/reorder.xml | 29 +- app/src/main/res/drawable/search.xml | 7 +- app/src/main/res/drawable/server.xml | 25 +- app/src/main/res/drawable/settings.xml | 11 + app/src/main/res/drawable/shapes.xml | 13 +- app/src/main/res/drawable/share_social.xml | 7 +- app/src/main/res/drawable/shuffle.xml | 71 +- app/src/main/res/drawable/sort.xml | 15 - app/src/main/res/drawable/sparkles.xml | 19 +- app/src/main/res/drawable/speed.xml | 11 + app/src/main/res/drawable/star.xml | 7 +- app/src/main/res/drawable/sync.xml | 43 +- app/src/main/res/drawable/text.xml | 13 +- app/src/main/res/drawable/time.xml | 7 +- app/src/main/res/drawable/trash.xml | 7 +- app/src/main/res/drawable/trending.xml | 29 +- app/src/main/res/drawable/trending_up.xml | 12 + app/src/main/res/drawable/volume_up.xml | 12 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1018 -> 970 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 1214 -> 752 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2692 -> 2584 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 828 -> 716 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 870 -> 516 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1872 -> 1682 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1658 -> 1306 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 2046 -> 1014 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 4034 -> 3680 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2284 -> 2212 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 2756 -> 1588 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 6146 -> 5712 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3276 -> 2962 bytes .../ic_launcher_foreground.webp | Bin 4488 -> 2496 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 8898 -> 8252 bytes app/src/main/res/values-de/strings.xml | 365 ++++++ app/src/main/res/values-night-v29/themes.xml | 15 + app/src/main/res/values-night/themes.xml | 4 +- app/src/main/res/values-nl/strings.xml | 378 ++++++ app/src/main/res/values-ru/strings.xml | 317 +++++ app/src/main/res/values/colors.xml | 4 - .../res/values/ic_launcher_background.xml | 2 +- app/src/main/res/values/strings.xml | 384 ++++++ app/src/main/res/values/themes.xml | 4 +- build.gradle.kts | 61 +- .../it/hamy/compose/persist/PersistMap.kt | 3 - .../hamy/compose/persist/PersistMapCleanup.kt | 19 - .../hamy/compose/persist/PersistMapOwner.kt | 5 - .../kotlin/it/hamy/compose/persist/Utils.kt | 16 - .../src/main/AndroidManifest.xml | 2 - .../reordering/ReorderingLazyColumn.kt | 40 - .../compose/reordering/ReorderingLazyList.kt | 293 ----- .../compose/reordering/ReorderingState.kt | 225 ---- compose-routing/src/main/AndroidManifest.xml | 2 - .../persist}/.gitignore | 0 .../persist}/build.gradle.kts | 24 +- .../persist}/src/main/AndroidManifest.xml | 0 .../kotlin/it/hamy/compose/persist/Persist.kt | 17 +- .../it/hamy/compose/persist/PersistMap.kt | 16 + .../hamy/compose/persist/PersistMapCleanup.kt | 30 + .../preferences}/.gitignore | 0 compose/preferences/build.gradle.kts | 48 + .../preferences/src/main/AndroidManifest.xml | 4 + .../compose/preferences/PreferencesHolders.kt | 50 +- .../reordering}/.gitignore | 0 .../reordering}/build.gradle.kts | 33 +- .../reordering/src/main/AndroidManifest.xml | 2 + .../compose/reordering/AnimatablesPool.kt | 16 +- .../reordering/AnimateItemPlacement.kt | 0 .../it/hamy/compose/reordering/DraggedItem.kt | 32 +- .../it/hamy/compose/reordering/Reorder.kt | 20 +- .../compose/reordering/ReorderingState.kt | 224 ++++ {innertube => compose/routing}/.gitignore | 0 .../routing}/build.gradle.kts | 30 +- compose/routing/src/main/AndroidManifest.xml | 2 + .../it/hamy/compose/routing/GlobalRoute.kt | 0 .../kotlin/it/hamy/compose/routing/Route.kt | 56 +- .../it/hamy/compose/routing/RouteHandler.kt | 12 +- .../hamy/compose/routing/RouteHandlerScope.kt | 19 +- .../it/hamy/compose/routing/Transitions.kt | 10 +- core/data/.gitignore | 1 + core/data/build.gradle.kts | 22 + core/data/src/main/AndroidManifest.xml | 4 + .../kotlin/it/hamy/muza/enums/AlbumSortBy.kt | 0 .../kotlin/it/hamy/muza/enums/ArtistSortBy.kt | 0 .../it/hamy/muza/enums/BuiltInPlaylist.kt | 3 +- .../it/hamy/muza/enums/CoilDiskCacheSize.kt | 13 + .../hamy/muza/enums/ExoPlayerDiskCacheSize.kt | 17 + .../it/hamy/muza/enums/PlaylistSortBy.kt | 0 .../kotlin/it/hamy/muza/enums/SongSortBy.kt | 0 .../kotlin/it/hamy/muza/enums/SortOrder.kt | 0 .../main/kotlin/it/hamy/muza/utils/Bytes.kt | 3 + .../kotlin/it/hamy/muza/utils/Versions.kt | 20 + core/ui/.gitignore | 1 + core/ui/build.gradle.kts | 50 + core/ui/src/main/AndroidManifest.xml | 4 + .../main/kotlin/it/hamy/muza/Extensions.kt | 6 + .../it/hamy/muza/enums/ColorPaletteMode.kt | 0 .../it/hamy/muza/enums/ColorPaletteName.kt | 3 +- .../it/hamy/muza/enums/ThumbnailRoundness.kt | 16 + .../it/hamy/muza/ui/styling/Appearance.kt | 34 + .../it/hamy/muza/ui/styling/ColorPalette.kt | 221 ++++ .../it/hamy/muza/ui/styling/Dimensions.kt | 44 + .../it/hamy/muza/ui/styling/Typography.kt | 63 +- .../main/kotlin/it/hamy/muza/utils/Pixels.kt | 21 + core/ui/src/main/res/font/poppins_w300.ttf | Bin 0 -> 159848 bytes core/ui/src/main/res/font/poppins_w400.ttf | Bin 0 -> 158240 bytes core/ui/src/main/res/font/poppins_w500.ttf | Bin 0 -> 156520 bytes core/ui/src/main/res/font/poppins_w600.ttf | Bin 0 -> 155232 bytes core/ui/src/main/res/font/poppins_w700.ttf | Bin 0 -> 153944 bytes detekt.yml | 120 ++ .../metadata/android/en-US/changelogs/10.txt | 8 + .../metadata/android/en-US/changelogs/11.txt | 7 + .../metadata/android/en-US/changelogs/12.txt | 3 + .../metadata/android/en-US/changelogs/13.txt | 1 + .../metadata/android/en-US/changelogs/14.txt | 1 + .../metadata/android/en-US/changelogs/15.txt | 1 + .../metadata/android/en-US/changelogs/16.txt | 10 + .../metadata/android/en-US/changelogs/17.txt | 6 + .../metadata/android/en-US/changelogs/18.txt | 6 + .../metadata/android/en-US/changelogs/19.txt | 6 + .../metadata/android/en-US/changelogs/20.txt | 1 + .../metadata/android/en-US/changelogs/21.txt | 20 + .../metadata/android/en-US/changelogs/22.txt | 7 + .../metadata/android/en-US/changelogs/23.txt | 6 + .../metadata/android/en-US/changelogs/24.txt | 5 + .../metadata/android/en-US/changelogs/25.txt | 8 + .../metadata/android/en-US/changelogs/26.txt | 6 + .../metadata/android/en-US/changelogs/27.txt | 9 + .../metadata/android/en-US/changelogs/28.txt | 15 + .../metadata/android/en-US/changelogs/29.txt | 4 + .../metadata/android/en-US/changelogs/30.txt | 3 + .../metadata/android/en-US/changelogs/31.txt | 14 + .../metadata/android/en-US/changelogs/32.txt | 11 + .../metadata/android/en-US/changelogs/33.txt | 8 + .../metadata/android/en-US/changelogs/9.txt | 1 + .../android/en-US/full_description.txt | 23 + .../metadata/android/en-US/images/icon.png | Bin 0 -> 14782 bytes .../en-US/images/phoneScreenshots/1.jpg | Bin 0 -> 102385 bytes .../en-US/images/phoneScreenshots/2.jpg | Bin 0 -> 104340 bytes .../en-US/images/phoneScreenshots/3.jpg | Bin 0 -> 102294 bytes .../en-US/images/phoneScreenshots/4.jpg | Bin 0 -> 103269 bytes .../en-US/images/phoneScreenshots/5.jpg | Bin 0 -> 102788 bytes .../en-US/images/phoneScreenshots/6.jpg | Bin 0 -> 101914 bytes .../android/en-US/short_description.txt | 1 + fastlane/metadata/android/en-US/title.txt | 1 + gradle.properties | 5 +- gradle/libs.versions.toml | 69 + gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 7 +- gradlew | 294 +++-- gradlew.bat | 15 +- .../it/hamy/innertube/models/Context.kt | 53 - .../models/MusicTwoRowItemRenderer.kt | 11 - .../innertube/models/NavigationEndpoint.kt | 203 --- .../kotlin/it/hamy/innertube/models/Runs.kt | 31 - .../it/hamy/innertube/models/Thumbnail.kt | 21 - .../it/hamy/innertube/requests/AlbumPage.kt | 36 - .../it/hamy/innertube/requests/ArtistPage.kt | 106 -- .../utils/FromMusicTwoRowItemRenderer.kt | 76 -- .../utils/FromPlaylistPanelVideoRenderer.kt | 35 - .../kotlin/it/hamy/innertube/utils/Utils.kt | 50 - innertube/src/test/kotlin/Test.kt | 10 - ktor-client-brotli/build.gradle.kts | 14 +- kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt | 213 ---- kugou/src/main/kotlin/it/hamy/kugou/Result.kt | 10 - kugou/src/test/kotlin/Test.kt | 11 - providers/common/.gitignore | 1 + providers/common/build.gradle.kts | 19 + .../kotlin/it/hamy/extensions/Coroutines.kt | 6 + .../kotlin/it/hamy/extensions/Serializers.kt | 26 + providers/github/.gitignore | 1 + {kugou => providers/github}/build.gradle.kts | 18 +- .../src/main/kotlin/it/hamy/github/GitHub.kt | 55 + .../kotlin/it/hamy/github/models/Reactions.kt | 26 + .../kotlin/it/hamy/github/models/Release.kt | 71 ++ .../it/hamy/github/models/SimpleUser.kt | 43 + .../it/hamy/github/requests/Releases.kt | 18 + {kugou => providers/innertube}/.gitignore | 0 providers/innertube/build.gradle.kts | 28 + .../kotlin/it/hamy/innertube/Innertube.kt | 115 +- .../hamy/innertube/models/BrowseResponse.kt | 10 +- .../hamy/innertube/models/ButtonRenderer.kt | 0 .../it/hamy/innertube/models/Context.kt | 85 ++ .../it/hamy/innertube/models/Continuation.kt | 0 .../innertube/models/ContinuationResponse.kt | 4 +- .../hamy/innertube/models/GetQueueResponse.kt | 4 +- .../it/hamy/innertube/models/GridRenderer.kt | 11 + .../models/MusicCarouselShelfRenderer.kt | 5 +- .../models/MusicNavigationButtonRenderer.kt | 26 + .../models/MusicResponsiveListItemRenderer.kt | 2 +- .../innertube/models/MusicShelfRenderer.kt | 13 +- .../models/MusicTwoRowItemRenderer.kt | 26 + .../innertube/models/NavigationEndpoint.kt | 77 ++ .../it/hamy/innertube/models/NextResponse.kt | 4 +- .../hamy/innertube/models/PlayerResponse.kt | 4 +- .../models/PlaylistPanelVideoRenderer.kt | 2 +- .../kotlin/it/hamy/innertube/models/Runs.kt | 52 + .../hamy/innertube/models/SearchResponse.kt | 2 +- .../models/SearchSuggestionsResponse.kt | 2 +- .../innertube/models/SectionListRenderer.kt | 5 +- .../kotlin/it/hamy/innertube/models/Tabs.kt | 4 +- .../it/hamy/innertube/models/Thumbnail.kt | 16 + .../innertube/models/ThumbnailRenderer.kt | 20 + .../innertube/models/bodies/BrowseBody.kt | 0 .../models/bodies/ContinuationBody.kt | 2 +- .../hamy/innertube/models/bodies/NextBody.kt | 0 .../innertube/models/bodies/PlayerBody.kt | 0 .../hamy/innertube/models/bodies/QueueBody.kt | 2 +- .../innertube/models/bodies/SearchBody.kt | 0 .../models/bodies/SearchSuggestionsBody.kt | 0 .../it/hamy/innertube/requests/AlbumPage.kt | 34 + .../it/hamy/innertube/requests/ArtistPage.kt | 127 ++ .../it/hamy/innertube/requests/Browse.kt | 68 + .../hamy/innertube/requests/DiscoverPage.kt | 51 + .../it/hamy/innertube/requests/ItemsPage.kt | 68 +- .../it/hamy/innertube/requests/Lyrics.kt | 11 +- .../it/hamy/innertube/requests/NextPage.kt | 36 +- .../it/hamy/innertube/requests/Player.kt | 14 +- .../hamy/innertube/requests/PlaylistPage.kt | 49 +- .../it/hamy/innertube/requests/Queue.kt | 10 +- .../it/hamy/innertube/requests/RelatedPage.kt | 32 +- .../it/hamy/innertube/requests/SearchPage.kt | 39 +- .../innertube/requests/SearchSuggestions.kt | 7 +- .../FromMusicResponsiveListItemRenderer.kt | 16 +- .../utils/FromMusicShelfRendererContent.kt | 57 +- .../utils/FromMusicTwoRowItemRenderer.kt | 71 ++ .../utils/FromPlaylistPanelVideoRenderer.kt | 33 + .../hamy/innertube/utils/ProxyPreferences.kt | 0 .../kotlin/it/hamy/innertube/utils/Utils.kt | 38 + providers/kugou/.gitignore | 1 + providers/kugou/build.gradle.kts | 25 + .../src/main/kotlin/it/hamy/kugou/KuGou.kt | 184 +++ .../kugou/models/DownloadLyricsResponse.kt | 0 .../hamy/kugou/models/SearchLyricsResponse.kt | 0 .../hamy/kugou/models/SearchSongResponse.kt | 2 +- providers/lrclib/.gitignore | 1 + .../lrclib}/build.gradle.kts | 21 +- .../src/main/kotlin/it/hamy/lrclib/LrcLib.kt | 79 ++ .../kotlin/it/hamy/lrclib/models/Track.kt | 19 + providers/piped/.gitignore | 1 + providers/piped/build.gradle.kts | 26 + .../src/main/kotlin/it/hamy/piped/Piped.kt | 169 +++ .../kotlin/it/hamy/piped/models/Instance.kt | 30 + .../it/hamy/piped/models/PlaylistPreview.kt | 60 + .../it/hamy/piped/models/Serializers.kt | 43 + .../kotlin/it/hamy/piped/models/Session.kt | 13 + settings.gradle.kts | 78 +- 479 files changed, 36348 insertions(+), 10142 deletions(-) delete mode 100644 LICENSE create mode 100644 app/X/app-X.apk create mode 100644 app/X/baselineProfiles/0/app-X.dm create mode 100644 app/X/baselineProfiles/1/app-X.dm create mode 100644 app/X/output-metadata.json create mode 100644 app/schemas/it.hamy.muza.DatabaseInitializer/24.json create mode 100644 app/schemas/it.hamy.muza.DatabaseInitializer/25.json create mode 100644 app/schemas/it.hamy.muza.DatabaseInitializer/26.json create mode 100644 app/schemas/it.hamy.muza.DatabaseInitializer/27.json create mode 100644 app/schemas/it.hamy.muza.DatabaseInitializer/28.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/24.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/25.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/26.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/27.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/28.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json create mode 100644 app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json delete mode 100644 app/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheMaxSize.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/models/Mood.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/models/PipedSession.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/models/ui/UiMedia.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/preferences/AppearancePreferences.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/preferences/OrderPreferences.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/preferences/PlayerPreferences.kt rename app/src/main/kotlin/it/hamy/muza/{utils/Preferences.kt => preferences/ProxyPreferences.kt} (64%) create mode 100644 app/src/main/kotlin/it/hamy/muza/preferences/UIStatePreferences.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/service/PrecacheService.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/service/ServiceNotifications.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanner.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBannerQuickPicksCenter.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanners.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/Attribution.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/BigIconButton.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/Divider.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/PlaylistInfo.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/ProgressIndicator.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/ReorderHandle.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/Slider.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextField.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextToggle.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/modifiers/FadingEdge.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/modifiers/PinchToggle.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/modifiers/Pressable.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/modifiers/Swiping.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeDiscovery.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeLocalSongs.kt rename app/src/main/kotlin/it/hamy/muza/ui/screens/home/{QuickPicks.kt => HomeQuickPicks.kt} (74%) create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodList.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodScreen.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistScreen.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistSongList.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/player/LyricsDialog.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/player/WindowState.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SyncSettings.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/utils/CacheState.kt create mode 100644 app/src/main/kotlin/it/hamy/muza/utils/ConditionalCacheDataSourceFactory.kt delete mode 100644 app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt rename app/src/main/kotlin/it/hamy/muza/utils/{SmoothScrollToTop.kt => SmoothScroll.kt} (80%) rename app/src/main/kotlin/it/hamy/muza/utils/{LazyGridSnapLayoutInfoProvider.kt => SnapLayoutInfoProvider.kt} (57%) create mode 100644 app/src/main/kotlin/it/hamy/muza/utils/StateFlowSaver.kt delete mode 100644 app/src/main/logo.png delete mode 100644 app/src/main/res/drawable/arrow_down.xml delete mode 100644 app/src/main/res/drawable/checkmark.xml create mode 100644 app/src/main/res/drawable/delete.xml delete mode 100644 app/src/main/res/drawable/ellipsis_vertical.xml delete mode 100644 app/src/main/res/drawable/heart_dislike.xml delete mode 100644 app/src/main/res/drawable/link.xml delete mode 100644 app/src/main/res/drawable/notifications.xml create mode 100644 app/src/main/res/drawable/remove_circle_outline.xml create mode 100644 app/src/main/res/drawable/settings.xml delete mode 100644 app/src/main/res/drawable/sort.xml create mode 100644 app/src/main/res/drawable/speed.xml create mode 100644 app/src/main/res/drawable/trending_up.xml create mode 100644 app/src/main/res/drawable/volume_up.xml create mode 100644 app/src/main/res/values-de/strings.xml create mode 100644 app/src/main/res/values-night-v29/themes.xml create mode 100644 app/src/main/res/values-nl/strings.xml create mode 100644 app/src/main/res/values-ru/strings.xml delete mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml delete mode 100644 compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt delete mode 100644 compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt delete mode 100644 compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt delete mode 100644 compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt delete mode 100644 compose-reordering/src/main/AndroidManifest.xml delete mode 100644 compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt delete mode 100644 compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt delete mode 100644 compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt delete mode 100644 compose-routing/src/main/AndroidManifest.xml rename {compose-persist => compose/persist}/.gitignore (100%) rename {compose-persist => compose/persist}/build.gradle.kts (62%) rename {compose-persist => compose/persist}/src/main/AndroidManifest.xml (100%) rename {compose-persist => compose/persist}/src/main/kotlin/it/hamy/compose/persist/Persist.kt (50%) create mode 100644 compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt create mode 100644 compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt rename {compose-reordering => compose/preferences}/.gitignore (100%) create mode 100644 compose/preferences/build.gradle.kts create mode 100644 compose/preferences/src/main/AndroidManifest.xml rename app/src/main/kotlin/it/hamy/muza/preferences/PreferencesHolder.kt => compose/preferences/src/main/kotlin/it/hamy/compose/preferences/PreferencesHolders.kt (67%) rename {compose-routing => compose/reordering}/.gitignore (100%) rename {compose-reordering => compose/reordering}/build.gradle.kts (54%) create mode 100644 compose/reordering/src/main/AndroidManifest.xml rename {compose-reordering => compose/reordering}/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt (63%) rename {compose-reordering => compose/reordering}/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt (100%) rename {compose-reordering => compose/reordering}/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt (52%) rename {compose-reordering => compose/reordering}/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt (66%) create mode 100644 compose/reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt rename {innertube => compose/routing}/.gitignore (100%) rename {compose-routing => compose/routing}/build.gradle.kts (54%) create mode 100644 compose/routing/src/main/AndroidManifest.xml rename {compose-routing => compose/routing}/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt (100%) rename {compose-routing => compose/routing}/src/main/kotlin/it/hamy/compose/routing/Route.kt (54%) rename {compose-routing => compose/routing}/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt (88%) rename {compose-routing => compose/routing}/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt (63%) rename {compose-routing => compose/routing}/src/main/kotlin/it/hamy/compose/routing/Transitions.kt (79%) create mode 100644 core/data/.gitignore create mode 100644 core/data/build.gradle.kts create mode 100644 core/data/src/main/AndroidManifest.xml rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/AlbumSortBy.kt (100%) rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/ArtistSortBy.kt (100%) rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt (77%) create mode 100644 core/data/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt create mode 100644 core/data/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheSize.kt rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/PlaylistSortBy.kt (100%) rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/SongSortBy.kt (100%) rename {app => core/data}/src/main/kotlin/it/hamy/muza/enums/SortOrder.kt (100%) create mode 100644 core/data/src/main/kotlin/it/hamy/muza/utils/Bytes.kt create mode 100644 core/data/src/main/kotlin/it/hamy/muza/utils/Versions.kt create mode 100644 core/ui/.gitignore create mode 100644 core/ui/build.gradle.kts create mode 100644 core/ui/src/main/AndroidManifest.xml create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/Extensions.kt rename {app => core/ui}/src/main/kotlin/it/hamy/muza/enums/ColorPaletteMode.kt (100%) rename {app => core/ui}/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt (76%) create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt rename {app => core/ui}/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt (57%) create mode 100644 core/ui/src/main/kotlin/it/hamy/muza/utils/Pixels.kt create mode 100644 core/ui/src/main/res/font/poppins_w300.ttf create mode 100644 core/ui/src/main/res/font/poppins_w400.ttf create mode 100644 core/ui/src/main/res/font/poppins_w500.ttf create mode 100644 core/ui/src/main/res/font/poppins_w600.ttf create mode 100644 core/ui/src/main/res/font/poppins_w700.ttf create mode 100644 detekt.yml create mode 100644 fastlane/metadata/android/en-US/changelogs/10.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/11.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/12.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/13.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/14.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/15.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/16.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/17.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/18.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/19.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/20.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/21.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/22.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/23.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/24.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/25.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/26.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/27.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/28.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/29.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/30.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/31.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/32.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/33.txt create mode 100644 fastlane/metadata/android/en-US/changelogs/9.txt create mode 100644 fastlane/metadata/android/en-US/full_description.txt create mode 100644 fastlane/metadata/android/en-US/images/icon.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg create mode 100644 fastlane/metadata/android/en-US/short_description.txt create mode 100644 fastlane/metadata/android/en-US/title.txt create mode 100644 gradle/libs.versions.toml delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt delete mode 100644 innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt delete mode 100644 innertube/src/test/kotlin/Test.kt delete mode 100644 kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt delete mode 100644 kugou/src/main/kotlin/it/hamy/kugou/Result.kt delete mode 100644 kugou/src/test/kotlin/Test.kt create mode 100644 providers/common/.gitignore create mode 100644 providers/common/build.gradle.kts create mode 100644 providers/common/src/main/kotlin/it/hamy/extensions/Coroutines.kt create mode 100644 providers/common/src/main/kotlin/it/hamy/extensions/Serializers.kt create mode 100644 providers/github/.gitignore rename {kugou => providers/github}/build.gradle.kts (58%) create mode 100644 providers/github/src/main/kotlin/it/hamy/github/GitHub.kt create mode 100644 providers/github/src/main/kotlin/it/hamy/github/models/Reactions.kt create mode 100644 providers/github/src/main/kotlin/it/hamy/github/models/Release.kt create mode 100644 providers/github/src/main/kotlin/it/hamy/github/models/SimpleUser.kt create mode 100644 providers/github/src/main/kotlin/it/hamy/github/requests/Releases.kt rename {kugou => providers/innertube}/.gitignore (100%) create mode 100644 providers/innertube/build.gradle.kts rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/Innertube.kt (64%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt (88%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt (100%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/Continuation.kt (100%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt (84%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt (71%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt (55%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt (86%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicNavigationButtonRenderer.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt (93%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt (79%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt (97%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt (95%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt (97%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt (88%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt (91%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt (94%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/Tabs.kt (81%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt (53%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt (100%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt (87%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt (100%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt (100%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt (87%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt (100%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt (100%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Browse.kt create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/requests/DiscoverPage.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt (60%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt (80%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt (75%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/Player.kt (83%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt (68%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/Queue.kt (73%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt (68%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt (70%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt (84%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt (71%) rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt (78%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt rename {innertube => providers/innertube}/src/main/kotlin/it/hamy/innertube/utils/ProxyPreferences.kt (100%) create mode 100644 providers/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt create mode 100644 providers/kugou/.gitignore create mode 100644 providers/kugou/build.gradle.kts create mode 100644 providers/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt rename {kugou => providers/kugou}/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt (100%) rename {kugou => providers/kugou}/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt (100%) rename {kugou => providers/kugou}/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt (91%) create mode 100644 providers/lrclib/.gitignore rename {innertube => providers/lrclib}/build.gradle.kts (51%) create mode 100644 providers/lrclib/src/main/kotlin/it/hamy/lrclib/LrcLib.kt create mode 100644 providers/lrclib/src/main/kotlin/it/hamy/lrclib/models/Track.kt create mode 100644 providers/piped/.gitignore create mode 100644 providers/piped/build.gradle.kts create mode 100644 providers/piped/src/main/kotlin/it/hamy/piped/Piped.kt create mode 100644 providers/piped/src/main/kotlin/it/hamy/piped/models/Instance.kt create mode 100644 providers/piped/src/main/kotlin/it/hamy/piped/models/PlaylistPreview.kt create mode 100644 providers/piped/src/main/kotlin/it/hamy/piped/models/Serializers.kt create mode 100644 providers/piped/src/main/kotlin/it/hamy/piped/models/Session.kt diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index c3c3ae2..89ad0fe 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -5,7 +5,7 @@ body: - type: markdown attributes: value: | - ## ⚠️ Make sure you are able to reproduce the bug with the [latest version](https://github.com/vfsfitvnm/vimusic/releases/latest). + ## ⚠️ Make sure you are able to reproduce the bug with the [latest version](https://github.com/hamy/muza/releases/latest). ## ⚠️ Make sure there is no issue about this bug already. - type: textarea @@ -61,7 +61,7 @@ body: - type: input id: muza-version attributes: - label: ViMusic version + label: muza version placeholder: | Example: "0.5.4" validations: diff --git a/.gitignore b/.gitignore index 878c2cd..25d9b60 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ /captures .externalNativeBuild .cxx -local.properties +local.properties \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 94a9ed0..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/README.md b/README.md index 8f179b9..f2e6dfe 100644 --- a/README.md +++ b/README.md @@ -7,24 +7,24 @@ --- - + ## Описание Muza - это удобное и простое в использовании музыкальное приложение, которое позволяет слушать любимую музыку бесплатно и без каких-либо ограничений. С помощью Muza вы можете создавать плейлисты, составлять музыкальные коллекции и наслаждаться звучанием того, что действительно нравится. -Мы предоставляем доступ к миллионам треков разных жанров и стилей, чтобы каждый пользователь мог найти здесь что-то для себя. +Миллионы треков разных жанров и стилей, чтобы каждый пользователь мог найти здесь что-то для себя. Кроме того, в приложении доступна функция чтения текстов песен, которая поможет подпевать и понимать глубинный смысл написанных слов. @@ -34,6 +34,9 @@ Muza - это удобное и простое в использовании м ## Функции - Воспроизведение (почти) любой песни или видео с YouTube Music +- Сохранение треков и плейлистов в кэш +- Поддержка прокси +- Поддержка Piped - Фоновое воспроизведение - Кэшируйте аудиофрагменты для автономного воспроизведения - Поиск песен, альбомов, видео исполнителей и списков воспроизведения @@ -48,15 +51,14 @@ Muza - это удобное и простое в использовании м - Нормализация звука - Поддержка Андроид Авто - Постоянная очередь -- Открывать ссылки на YouTube/YouTube Music (`смотреть`, `плейлист`, `канал`) - ... ## Скачать [Скачать из RuStore](https://apps.rustore.ru/app/it.hamy.muza) [Скачать из Гитхаба](https://github.com/hammsterr/muza/releases/latest) +alt="Скачать из Гитхаба" +height="80">](https://github.com/hammsterr/muza/releases/latest) ## Благодарности diff --git a/app/X/app-X.apk b/app/X/app-X.apk new file mode 100644 index 0000000000000000000000000000000000000000..97f7f7da90ea239438e479341b1b7e6a836c2354 GIT binary patch literal 3556965 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

<@Z#RZM#YoW-!*Y;-l1dj_MXQk z9dhvw=Hb4AZF0sY!o}J6)V*UC($W&1^O9`syL%if#9Mp0V|9!>R&VcNtln|+&T;eJ z{fY4tM~q(ujvqadW;j!%JwlxjZ_)U@4deHY*)6;~Y7A9-4B@#3&$V|)jiXM-F+|7F zgRsQW^mJ25c2h`p10+X|={|H!$CaVay0|b7#`HZH!}shltN?hv59#-d#`ptBe^4~W zAHo=a_#el33?1Vr9b=7-F^qKD9%+A8|Iozo{(z46`*ghD+w*uEBgcCj9q;${Fy8ME zk9XY%MPvWrPmcY5?%1z($Ns%NjQ#t282b<0ymQ^W4}W4lNF(OMIGhhuC*h}U>vVJP z!F+fh=EDbOxA@_xIpMYE1eDRBj0R=24@b?5aylAVQhdEr6$jYgiK;p=%=XjhU_g2G#@-ir0i>kBOs$si#jNx5Cb@hffJVYeI~(f8wn$ zS>VUP598u9iCcM5#3#=HE#NKEjhIZweJK zqrain)SKM&)axNnG2AQZ`ulpf^#}ZnyZXLyS0A>mc=a*9%dvMehdB4DyQ{x8yT`+O z+CpldtO@2XaJP_RHmSojF4DMA!$`q3(N(rg9@ zXu-?zl!rIm8%T}#Q}$Y=)}Sl9LjD5RG~OH3c<-KRF%sH?J*{0Pvp3D^!8nzi7EelarE$uE z#7Zfx8FdELTUkZC9?Sc0s;hDw@p`R&<<>I4(HbJx_#=Mn;ghBfB!2Vrjl}Pb2JwcB zOgeAQPOA+|!RD|`PTP4}*Y=*2Q0iaTlD)ZoT0y&t-jmDzx?|d{k|Y77}O8vmm!zrd>47 zH#Uo+eD;ho8AtqTh!>2D=2clf>bEBK(&Fn$tF;m4*rp%MfkV&hAN!==hkZc#aBky| zRP)S7yuQXq;>6nYBb`NW5^vA~IM{dQ-Ixw*ovcGGg>g^<=fOV$uLc4fdIXI5&Nv9| zeE5j&tML)y@HM!Oa5O?iatdc$^5g^CHqx+sXbByc@nt34Z+GrI0Odgo4j4=y18Z<4 zdEapH1>oP-qWCl#XZ|84lTx1H4xT=nM4vG)5EVuEChEKcajhthx~gy5wwYE!3mt#& zi|R)EduRDwyX7-YO12+RJOS84wRK5x?xD=2jNo`ZDp-k6jBa_NIbdDi*FME3pq9(i zof{eo+5*Idu)8qd3eLOb|KZ(o$<==uQA5Jk8=KM9LjF#DHBX7J>9>h-@yxx>44*ms%=%K#x|TDq7~>8+y=dZpr^AJE>@dvkfb!F#uTl5lwt%aWJYxwhMxJA(YknbIxFI6gJi>wC=i3a$FS8YXXbtuL6y8%2m!-^jA(^vb1%`)+?yLGdw2DhlP zT1cEX?{eZ(H|atD7FE^p{mbdvQAt!oD5%;r9&n{vLQ-?~gH$tLOQ3)18vZQW+ReI7 zur|a-SQEs(8=%;m}lB5YVweA!#B?+*L zL@~9Q_Xc4;2G=DwYqEa}&uiGyI^yFct&(gJcrC@R`^9F>FJL=>veY(fn!H(uw@QLE zuY~wYHkXv>8%s(wgfOJF@{)dFqQqCexxC!FvAnzlerj=>?B{MVW<^nUD7XU8 zfH}CuBM^knZ5Rh&P9UF=&h7A)&qH?Jza@ZA*UkHw_ySl8!xygJq6^Ay^R7fk9~(zC zeibHLN=iI7)JpIJ!OMSWp7A?-YkBL`r(tUK+vA9GcI`uaMjOw3toy+Jj zM-NGj#nOF6rTc!Ov@=sb?(+pUN*Jj_0GXCBF(b2jW1sb~&HrIq54Oq!;cd1I++-{vi?uUl9Y&+7&xDbFph%#vfin7a zqQHn<6N`KCw?-!ECw{tS-Y@(_z11)Kt7WH;3|HAmsi>A`S4=0N3K%J0CJEwbo38qA z(RG+9Zhu*=br=Dn0!+10d3O31SVf^X)klZz7&u-K^ZKpCU-_8d?zQUjauwjn)-);uV$;O|^OoNy{KpVUIIIijkfZ;Y(R@;(^vSK@iRl;?8I`@a7wP zF%9nZmKUa47@j-mLtHr(SRq|ITX1FUXBNEiyTa#u<4P>E`Z{`C`SjuaCtdCp)L!8P zVV!WvYF966L#h=jp5SslJV!^(UI*RTAAOu&`_xsUn`AeBlwNyj7?$6YU2CfGuBXbg zW^OCYq$>ZKxpDa%|5;Z&a<$<`9_DHf@XhCal3rz|`Zoa&-RF7VGHTDd`Qc4lJs$5? zpU?f!trb4Ktjw9EGQHU?P-g5Z*(+vmfiiy;cJVT0;`N3B*^Lk~QwDnMt?;5Zz>12n zD3Gf}uXwd067_oFFTy**SF2rz^}`x1UM+ixdY$l`@HgR~2m?;v`|#u{-}mQj^?H33 zUgU*KJO!R1WE(zCXUBh(9&THkU1IxztDL9`WOJPWpt|%pUD4+AO>k zhB*o&Fsi;4riD+_wC~e&$wO?AWDB3AvwfeXlctw+^?jc1TK##tQI*A3Re~Kb@_p*= zwitUqE&7OO=Q@XfmLAfB10_3*m`@1y|2F_He}Bd~8*nijO1y4NW`VpArq-v>gFhbV zBtE6f`aGR&`z&3^Ci*)^?_U437p}n7_mrI|g1ADnA`DeQPp2TPOKiJ=Z^kI+PU*Rh4|Fm;6GtrDG_?a7ioIrmuW*$3+i@t3)hs$4Stp8 zclLb0jq>RC2xz0_>oj^7HbV5lk@NxNN&)QwM1)oP<*-jj`l(x}3xPIjc-^A%Frn%9 zM7;e$59SxHkm2u-+20G`FPH0$%G)5;3;#1#wwk6#=2P+N1*`PrF{16&jf&STuq`!= zl2>d+$u;t`1>6(BeJhErrGd5?Up-i`>vtLCIsPDiCxth|ujmMUB0|&Cs?-U6u0v{! zlS7&gDVGt`JyT7&t05MbqQbk-?%=W-^w=<@Po0h>2*M=t2ojjm_0i{ z`@Ts3W(#bCAeozPM3+=8xOTAz=107iwzsO z?AIk+*UIch`!y#1_7gh5WWT1vI&w40exWRM{06Ljx7<>dk~ff;3^|;`bD)GOGpmqm z95PP_%%VrRZh+?X@A+khpJPZi{kCU&B5(HkWrh*AE333tJ=;y>Rt5cOrpS9EStZ3F zDW!v`6H?^05ssU{UT|~T$Rx6ABBTG2uJX-F-hX@rgkh`Fu3naTOpiFE!{ExTZfmQrv{t`QwsS$fb^t&nJU_p5Qm zhADaTr1lQfg@rj5bNw31xu)HPI?wGLFt>gk%$s*CS-`#eKDxIW9s|F=eZ0l6XT@Jt z<84leHN53E7tS$Lj;=P`I5hUWozer=DV+u^y1a2sDggJ%;wm%@Yg4WJ7M3}VJtS@59l zV=Lh@40VLdMT7{KpTMz*YYf`^!JVaNw|B`tH$^!VyxZ;(zE0=Fk#xDvfs389i)H=~ zN77Mpm`DY$d#sSxKk=aVGAh-%^ZG-RxSVyD*e5@#<;_{Ro0MitUNTO=(>WaLtIQ7p zLjh7N9-XAb4;=pdg^00RbqO!Np`|s zt)#NIwP(KBO6P@J^ZNVKQOY{I;B8N(3e5PKvt3bcK~7uXmbIw+LLa^2y#{*4_}1*E zKx@w?e{0WWfz}n5jHI%gg00E@f%pAMu=ROO6Pj1PGtwts-kLYB$)OC+wX6nt{eTtR z=2Kf%gf-CHN@KiSfJ)isw>`7v$%H1+=AEQOT~OXiC~pIlx4{qb-ka_MezNKED#-C+ zNR!t;W`7x6OP=C}l?CDtjEA@v=UmLobo2a|pe9$?HE~*gMreg{)U=p*7tF#l+R@wb z;500sx>in`EsrB~I&ZbgTYWUt$m7wXp0h&qigy762eo!z2`iOXfmL%`_e~;e^TKyW z@_LUSJ%;r7U65x#&yx&5o;8F{gIrXX5>>yfq#C?yniAE{3U!|fIk|aG>qTDY56W^v zN_kGZSn{PLqI|pUO9{A#FQJE50$$^vIIVlj$m{23nMSO5a&un)8{${C?e@x9b#-&o zLHh%r@dF4uv7LKq@+>X$)+DFopi=_SxqE}F^e5Y8_Wmzp#e&D0tgo*qcxt!rXO5n@9+g<7rX9ae?6Dk!K)$C>^ zOsZ9XwTy8#(%&3wVK5J;sZq)8qOHI`Yyw<*-WyRDp@x}xC9LmW4~fD$PrVCkR+-|` zD^a$+xMst;ekH8yURc+!jCx^R-vR5oFXe@G{kITj7sTod7@yv-q9MrbSW zH*U_~Ot<-)%NT#7GF|<%MzSXWe{%%#H`7^*fxl^OWxNT~pnEeV0e{o#a4SooCMgN{ zn;Fo4542x`_Ir5yXJGqhK+KyVrU%+T1KRI__RolVp#3*P`@Ja-wEtF!^BBbOLHoU4 zA$bh6|2k;D8`|%N+MmyB{|NL2Z+|OM+wk`$LT_g6KgMZ4`hdjt1N2tMBa>?Ti7?R~ z6YFVtsYqfXUl(yk9?W{b%to_2olGJV1a*n}1bW5YY&;Fg0&yYf6rj>_UjK0b*!l7`;itzEfQsuWAi=Ni6Wb zh@-XPT#lp(0n$NVGJ#3Wqf|C zOS4lV*5Yraeqy*%@=GJ;Lco~@I|;cAcN)jtLZ(r|ahE~dEnzujO4#`d z(xVp17bEJzq85oKrA;Q;A3C#9V;rLI;tx*NlNDIZ#y zSXb|ZFFaX@i)y?2XBSJm6uBJws7~63q8c^eM11$6w?*V;Ow5@Ok52$~E0!TlUTd4_idF?{p=9-pR5i=7AZ#P^n!B~<1{wg++E7bgYxNd z$EN#nzKkiRM2gkMRy|0WJoq5A+lbtC8;Rc^BM$^?#qEiL`Efgr%WiS-pp;mNmfVg- z?kFV&NSDO(HQTV2$tDGQVg0^#XO!t`g9fW#RHS9F7P2u~KR;8prwYO(1 zhTCyQAmKcCR@r*g-w{gj&^Ph5gv(_+dy;OMpWm&Jxm;Txv-P5qe)jDlN6FmI+I8^T z2yY+A#P(zSg`0frCa=56yKeHTyIdy-<;Kc&Z&5eM(Z9_nj<DS_)*IJQK&e=X-r}QbrA_ER#L@7d+VH92(eNpK9PScE=U-Ke`R`H`Z?Z}!YCl>}%j*e`Vy`N3;5g>MS3DM# zJax21?xfvccH~Xz)Cs8d-Ejv@GunMuHmXQ27u)&w-P(U@KepfL&!59{ z!an-bkx9q%odv})?T0aa06UBPLBGgOx&Ghz#WCh)b;3H}{YLZ~&aGU`+65tp+q4wr zQ~g%X2w1t0ZsjT~tXx&l!Z9c8!)`sq79h3=F(pVL2S?e{K(AyPl!Rxo(;#8?W4~nt z4bhP3=Ru2pp_vR+$P2q67m?7 zJn92(*|cMFKcfCJn>Ik*A*LV`YCPtP38&Sf-=C0VkV03>YRg0m9N03n^$>%YQMDpi zmKs)mNDT`uO|o(tqOR*|X#dC})EljZ$ydmp5*+H{7B_AW=mhwJqJH(EEP@ZE{*&?knZ)@*F zOBsozWeQkZZtFv}YvwN2C$IlvHd;bl<%!Cl`)S&-@bTobl7$b^vG75L65n5_2wVcR zl3XnK&di&aPGP=v1$`m+qB&%)Sg4S1Q)W2qlvyh*Jb1{g7+`*O%#RM|>Ct0B5nC`a zxZe2Csxhk`V_e_r}@k-jY zX?jWu!>F*}*MQ#y{05-LN#H!ZqH*Hc%N|{Ie$27&s!olGmr1z$tO(lF#Z8Z1KAj$u zn@*2CbUHn*ce*<9BrOkn5I&afVAflr>enLHIja0ujLLa2pT5CAI3M9lMOwIAi@Gip zqcDM^a$KasPuw}zPu%pRi#2-6%^E#*yOvvZGd%En;>B9Gc&U4Zbg7%)*>I}@@T=H& zIEe+G>BkY|ASC4^6u{9<|7L=nCrd?M7~?J({5g54mi4AUM$JHBM! zE=G+f5cEUwR+xSTl%nU0H2oJ)i{)RYV?>D0IC-PidSg`?DKnm-*hvs z!yN|DK$@+zXjcg6+K<^f+)))3BQPstReAHcLmRMnrBxo-cTbVn4ax|>w@zWbUb5%_ zV{=0d-pI$~^)&_aqT^+Vd2S8*iO8E59-m>>8$vA2#yXnV47-!L?L3d?Yog+3-fZIf z#i-ZX1HY|6v3toS)kCIOk2=UtM`7e9ZdjZ*tC~fYCK8E?6%m^FGvNJ*IDKW0B(%_4}g&;`5p*RV1c- z5H<>h^cnpV^q>+IhkQ}t+!_Y$EkOZ$6A*g~+wBw`r7*yx0GONr7*wiBuX0H>op8fq z#9}AR_^*#1O=P+!+1TsPQV=HCV9Tebjw5u~dkmeEF6hb^>{bqC{YrY1G!I}I(1Pa;1cAs5*D(jnH%QyI-K0=A>dnv%pa`OSWH|U8&%`G zQMpOYo5$3zLw^D7Ay{cjaa=sk%J_#NsPi816y_N&gL@g=$*~!893KLX$&R6=w9O-U zuSw(MNlJ^5s0Qo#23XJ6JT2t)8LQ zi(GhrhbKm`%QK*FswRsgz^katdI;6SR+Jn!hKinU8je`#9qN!V)Tee+m#-V=xk%`R zk5N-SehgasHDHaHM1Cqo$?;<-(YxtokJIesPXKY=3j3RXE`i<)AUE>z^(00Q8q# zDP~phA3{vp8npA4v7|PqB-!w^EDE!dHe*RIM+04BvLEuCFMyh)0zBtu$nf&`-!W%? zBFau!6MfP>G;c0HeL9quUA=?OlvX-9ONMG_ko)u&mV1GDLV{N8dWdFU-U0c$JC;KJ z*;gP{AOIu6L$Vie_(uSr9jGGe^Kk>ezr(&O2;PQde^H7vGawQ5#o=Y~C)DTF^IA3d z+WHMGRa*`UJ9Y7>+nm}UPJhH~obZ-jMs0jn%GZnku zH2k{To_tb51Y52SG-?jQ#3tud2p@J>! za$2ZB3ztP4d~52D%3HXttc7P2qk4FK{5^ZDDk-II1pBd+59_;SZF}@xO7aoxzwBII z)32c)W&|Q+&pxf#OP@l!pEt(FL#1BT_tLA-?ib@94F4s*^IP_-(lUR?*I3gI;#1Y{ zM?Fy2n|Z6xBOXu6!&`j9m;VQB$p^J4<0UJevf)uI~A?lq54!#`y9 z9`_WR-vvUOmF}@}j0}uH+J$~$t~`AWp)FE(-kf_Hx24=arWI}Owa5UQ&+K2S49YCy zElDXZ;8*`m$H{T`IM{ujcKZ3ahe=;|`q{n|tUTGDJW1(Kf$ClI1Rd(`SST&@k(k77 z#hw5Z>IHUJ!S_QGQqF!Tu=p%zKUBQC@Do*JaV3Z=^SEs+?%6CZ(`ZX9Ta*wd5W^2A^E)k#!~RtD z59xOpe)ux|w2oO_C}P0)9~g*#7e>y0wgGZ(yIDM!&848 zYpCrSQHS(H$H1DY#yzXd8{5~DxXTzz$-gP`3d7G%BJ#-pD05s1=fmHK^St>*?ov{o zmL|q!RW+*a2+~wE+p3~=(DE^cQAnI{`WkT(+4!FrIdTl$KhzDo67?si1I}WV-F?z0 zwK2Ic22V-5m?W`wOEoZhnjM zKES`(4((+ff1j*?+&0B*!N z;qHcUb6Tb8(0+N&Dt%ju$%}*lSJE$yT!T4>j*rf1l{JzxqjU1+&r&9dn|XaRi`OR~ zHXh}k(yZlGuqPQiCnnDfqnGnD`o?#0>#Kb~-?@QVU!A|oyvSqPURk0f63m-tq0g#) ze51F|wf(lVD|x}lo9oI#M}PCytPs(fAMi}9um2|Uy_x10zjc|re;-}Jb5?{d>4mAZ z3i4IzgnW9D(nLKxe|`KsvX4679-!p71M=p^Z-9JLD-D@@V*ELi<>oc{tTt~hI|)yA z@EnRt2ZkMg+eq)Tgx4`pXG2|CGBpg;`^X7wm1=_(FRJ~gwrj(mI@WE(^AGffl282h zq!Zm55aRUJh#AucZFBN^HX@vhi4r;8JQG)SmJ*E6cO)+ z1ah^=&s9EP-)>^Ca~2;wKUIW}>K|3eMi;rvwU>L4Dk~?1t(+7YXU%VHT}2?`}8AIDvWA)@sRr(x~f7nEfx5lH~hg zFXYX9HnKDPYP&3fl~q+NYaEm{+b-*K70a5VmFHi|Pht5O%$Ee_gLVOMZ%sQeA1?Dr zvzSjLI94zuyircMLc~1sx!^0ZEZBROX?RXLWG?LJ!+QWlK)SzvSKO~QG+mFgNr!L5hODzF%a&=dxd(!xhyuIqe{x%MI0d z3dAh=14YxwX!~P`^CtV;0p)J@v(F{Q6>&HL;*{=a&tU$yt4UU|jS{l}6Sytv3ZaxTq6js<3xA+$|gZEaqjnqq#Ned(p@q z-PzfF%)CyN-ON6IWpiB0KEA1W`-|D*vYlOd+DVUW@1*no)saniOlyUf8M+u0pnvhN z!PjyU57OSY&b)bKH$S=lx;90=9HHd-juiQHWC0=WYQxbO4#_5@$`LAjkaaA2MTKKT ztrA8bRJtoN&8>w+a=j3c*BN5OOVsyIa$qs$IH`N)QLgIi^ zMUOF)lDD!$xkKk|-d{c=?!j6)wdD2c?p@G{JSEx$OhsJedKKzii0k|}+t<;#T}(v) zuR6o4zNz^l7#*odkZe|=C9ANXwoha+3>L!x%ukHVEc9e-Ux9c7m^;t0YjAPr^&Y^* zmSJF? zf@3Ery9VaL+ORd5o!aH~6*)IiLs4n9M%P3vRgTI()(lrjorP93FFx5dX@AU_#~aea zNTb{n-K6N(IbzSda{EhM=P*Xz7ej(h8iE&$MF}~b4dg<_Tlvrb_LSAVU%Bx#-lyV1yWu=8q0Md?TwN5Ane5c z4lCFD8!a%(hbz)3Gx1S41r#bOeH5mNYKzuam-)T{dYG)Ss99s#oVJu2Wsj+(zlQXX zn$_%t-O;auSWL%`*4J1FE7?fet1UyJ+RBMFfaU5k99OYBkO+whABFqGchZ^^CWXX# z{f%O!*g55z$1a93_NpZ6zifJ464hOzc%~);uRXuc${sRj+9j&wGTe0e%xSNARcRM& z?O*lzr1^f2_xFz*(cyp3*FD}BJihdG9^E7AZnE|dr*8=P=8^~huygBu&#&FT+9%lm zt`2&9>NqhZk}ZN3yvir|&Is+PsR2V6p;F3pbH4%&x0~LU6Mn1dV9?wKLWl$3O7N&b2%5L%X<*Zpg`f zA&ioF-7SE(Y&JbD>>44h;tWEw&>puS&G(7!U811ADvHvB2kbmHT=6w&6nz!U+x33g z&N=u;}u7C;{RR>1TFh zFXhdHx~qz1BOSmI?>s(itN}b! z7_F7em$A4V(xj(dC%D{*vFm&u_kH&*5hM-EdtMBFb(gVA5Y%DgH9?f1|5$70Ym)H5 zerF8qJoh@F(D$9Y#3c!|bJn!QL^$}ziBZt6fzDkm~Gua0n9pP`-;yA$L>zvytrR4+C$}G_gu1PSXG(L zq_YX~h`$OJ^o!f^R2w~4jIn4#okg2xO`|Qdr_tohY4y{dce%cv;Tj}{Hs392XIyEV z{=iE+udMbL$I(lT6<&X;qMcmi)m%T=@w(R=4f!a{NE4Opj{Pg0hSwo7@-)Rtn;C?Cww)nR0(QxV4V2XG2x|fHdbpD z60QAgsO-aDV@?=TW=GWXF!$%k`)3a-Y>u@`v`T;2>C2z=i=@n6rjV;2XW8#kt|4mM z!7SH7rh3$J+az6wMQ_mTH*EthU=t+qxy%r-my{W(M`)qy>Aa3?A9YyM;`bC;@GX<&oW}@H8mwPk*3CRBv}vRb@O=Oy1xw5Ya1-O zWg_lW!rX2>Qcb^i64_36w`)(YonX=H#xwsb^aeC`&4GrrQceSZstcu|V+ z^Dt`Yp)I05<%BwvNX!wmPn7L|eV6wGHG4xG#`LECPA|P>l11;DY~lTx!uaXW!zou4 z$wum}?8G?f18GH;%V*w@k2luG`PbC+gJC`xa1YYWQL#Dx4h1 zn`7o$%nPsDr@A54mE~z#C6sgFDUuD4{_}}mzqgbQ+Q+e?HVvLXGKm~B!g(+pL7Umw zm&lz2@5Wu^3Br8?N@NUqL?AB!Zqc?$R^gB<`^`{JnP_pH zdK`CX4}tBog*c4JNwCk}-;vFfx$IZTKW_!&Dp4i?b2bFSD0D)OZA0e%RtK~xDD7*_ zh>_2NC?R&;Qd}n{TSFu|moVCN0L+1~EsutFjgDq}x*+h-A<``#Xc-}tjAd4E+Oy&m zt5O*mIrGe^qNt?A?+95jX>FXaO;MC7swmG^Cy+B^8z*+Tr&`-o)qVEN$L_K%9eKBT zz3xX(TkcI*n5I0I9YcX!+>b3=t~Oe67*miRj6s7yN%BmT>Q<*(XSY7qgRyVovDM{D zleI!R(87BC99CyVsU+uiSMy8u^pDd|oS0RU))Y;ZXKVAw##k5Rz0IwP8|xnXb(cS3 z-CCjgpZMxlx9HvmYxQHd-|B_$+o4Vh+T&RddoQeC7t|SQ&tQ-8mWYp@#`AKkd&G7p z&=!;%!WbOtDsPiz@zK?j$W>&jtTHM2jUjB$#(JoY@M!Bc$*nvZS~Ijw5LgAiAmQD8i!2H8m1ifrv?l9`vp1g7Mh&V~B5?&nI*VO;|gD*JGp8LhaG} zu${Naf=BThBr8m@pyqYwZ$CdXq#w*U@3kR(6Y(vGmcAb7Dzn+ud0(S0!~{GG@Ae~A zttS%&rED$5{hOKoirM3clBoPuIGb*@vQ4dMwN-2dUMQQM0pBz1Z$Ii0Sv0}D1jzPn zHn+)9ZtrmnJDZxh$G)LtceS<5*6NH=wpNugd!p5hcI*n%#+g>D0DBZU?xyp&4ZTXH zLt#d;jjgPPg>m?YDl=`Hr&z{*HosExB8`^bV0B-!V;=fDs84YF zCC=U!*Zth!LMuCXuvG=I?pAx?EzE9B&nP8l8kr)}LWw*a=WpDqRmA&H~$nRaNko(#}!j zsLSrySXaoc7~tXMb%9mi{MoLER4;^j3sPV5?3Brp zut71qV~TrpymDN>U&HIQ66!U_uGdPa*Hl)o!<7Twwd!TQMvW*bt)5)3K^@oGw)kWY z^%1Nw!UVfFu-?c|+1h%<;i>ipi+YU+)~WQD2$gKFf;(Tk7{8xkx+I&Fwigk)_3++YYxTOL*=*Swf1t!g$PzOZYcPIJ_L<+^L|hjq~o>?R`(X z6Ndv&*EdQwA8YKf_u05_i~9MknjhBJnBR!dovW->x;Q|X7QBSNu9$lyOn0uvd=fkQ zYY2Vd1dHA`WT{Wd*ULXY$zwvS>;orS^ubjY{rzf-K6Da>U3;?n4EmJbS+H{cV|?6; zlEx@I_pO0rGbcc(I0P%iDk~?SVC9t6R*&mME2o|`3Xg6k>sC5zi)y^y8q5%S%9$43 zaEuT48yZp9uv@ef&$8%AXIt45)>w4)T8r1EPlGyWjy}ViwqKT{!13X*rw!Zln0}h$OA7npP&?1{Zj^mIgwUb&Q0E_7^u+U_ z4L`EvvrciX=JM~{zqnwCEe7|JZ4!@UTVj@8kt6}->X?tYk7I%!tQA)=Yw7h&P6BVW zo@W-&1@=9JevoDRJK`#pYdqnxnjEQTcmTN<@gRclGy%PI?pS@exo?B9~EIcZJXc`0WG3+bzNZH8^RhU z5+DKyX9+N5nZ;1hBl?3uy z1i$vTg5S&Gm!7-XqJz9AmKAY*6yUmWNaa8SEiC`2f9+53^b5v|$tAcGBv*Txm8-dw zVHN#=AyzLUL7}A2hx_JW86LL)9yeQfK4*w{+Ga4XK-U(1sW^KC?#sh#`||Kc5ML;} zL+fu~y8yw~kV2d@2?6s)22bpEuOQoNg5zf(ud9rbU|i=`F0X3{6A{+HU?smcav6QY zd1DaTcmwnz-(g^{qJ%Qq`lC%ZS}1>na9m@C_pr6j=gkdPaIbXn#-iTt-tIGQ0KDC3 z?aj{LZF}{HG}>px*fyIM)!(*p9@MHFLvPVe~=ke5-3=PkYLCEB+q`68}d` zQzGKbnIk)C=BJOADYe8ihg^yJ$udg?Pa1ZkYgqgF_6F32*JHiSb8^e&NP8x+@pcmnP4LkPZ)ujFfNh+& zk{Owm41OMiHxqu=86ZZ3ArGY^1NF_$xuA2exCqNg+*G8$n9f3a-}DQh6i8o~ zGyu?Le%H!9RW}k|6WYw{MB(jLmWRyfFOQ3Qw}$>p#SpOUkkY5T(d5Ji{LlLnqmnZeF19Yo%zlMRvQ2ke`E+t%ypHxBg0fUb zH@V*WUBDyWy;r_)Pa6Z{2l&~2$o7vqVZgC5pqAZpwGsR5zH_H#7%A9UBtBfcH(&VG{xsix?UUMzHLfv@i4j>iqLw@B{rbTIq5ztII6uW!^!>5 zS+U6PWlCdW1+mXwIv=uV_Cbqw{ocyb2dv3*8ZqT6_@XL5p-{6}xofP+sh8+m7;2vqm{~x3+?U(Ay-u=71EB1NxPfz2vjCEk==mE&{L(G`3VQoLl}(K)mq$6(fc(W3P)S(6!emDigG1SW&Qe@pe?dfI%f;P{=x z)?On>Gp|_LwwGb&h|*C}#Vbyh@Xjr!)I#pRkaVM8EUST`K3!pR{6%KVpXo_ODn-xCW}kQmm(}UIkWM1y)>v zueeoWuH{b_LTUuE#(_L-p;S%AW!t-;n-`?NW2GW zv5P?|>iGtC0Xpv1aW0>vA@*E0&&qX;$HG{6no)k_3eZbrBanJ_OH@I7pV{lEOOc5% z!Z&>H$1kHqk>=EvNfrU;AfWVJA304+3h0416fp?WzQdVpQ8m!^Um7S~lwy8zR|+T> zg!~5T>%~Y_q|h~Sp!c%e8k7sFve#c6FZIRyEQ2Uwh*0@yXT?%#RH(OGQCr<8P4|R* zyu`FOT`&^{#@g#X_9b;aQ{)0zO8K4)mH%Y%G*slX0__zVRfcL*w@kl@&5BjbZe2x$ zZsO}I@PwYIhhxNp9)_;G)oS&ub#nC?9(v6-Yl=tk%=V-i6!uva!uPLo`6|vCcqEMH z4A4jFFPEiMnQRz{H*;N#JA95VhI_FAT=Q=k*KDveh5P-r!ez4k&2y9x-Xz;P8$wLv zXAO?6VS`K*h3_LD0z8A#7GTz}Bf>z!UdwDg^%3}W8T~Qaujmy?lHMHkdk1&b!j8O5}5{{LYmL$V( zmZgbA=-`tKzbbl)=3~{3WA!q?RjcZD@asnYB7D^a(NYwX&5AA=Q` zUhkwm;-QZ)Q-_+PHo4Ag+sin^Rm`S2?R?JmiyI^U2-449l^*gGgCQ5h`vpfO-UPJ_ zHL#uuGd?>Ksg))#9WsTECRSgO@v;@f-up{*{F4s9Dd&4y2AbAAF9<^XWqQb;i@CNG zVk}1&<6k-Fj(cSsi)XogA`S7e*g#4l@3N4b0USE4q48IifA=pIKf^51S+q-x79A?d z-_nh{kj|<=XSE`o9UM((*T6VkvrEv5bavU^=q#{gc!r(S1B}Y5jxMzesjNy+8{6r( zR&o;b@sp!?_QM(dJsPMVu3QYxR;+p#%|2z1BfI|uCmhq&vvlJKju6v;z7%=iGYiH+ z-lz2>?q{5=TJN!MLR6gXCjm#x`y5AHk)n%08D%0e$#;#9gJ&H7$Q>mv0M9`U);}hb z<*bPG$q+aB3l_JHpM-vdv>MAxF|Dtv2=FYO69+oZ%@vSZ6H}kobgtG}Kx$#YlHoavP(u?}#`k?H@Lm9eninlKx5pTdQ=1nUny=BWD z?d`1PJ>Ycz&caLnypCl2e9r0hnat3I}DCj2uJrtnd8wLFopoal;$tdV&0PO^5b`B@(8MM>qFDn=AkJAg~Oe^6&=X`kH0^bNT zfa9GzFGZ#~cL3;f4)y@_r*bBR7NjrXHE3a$-&u*Q zKqbZlzk>QNBAF=AO^}aAB0-M>aeh%Yv*bG^i+uUVR1h<*f(Gl;$^m|YDP|C6h_%w% zWhr3}t0l8zFSk@qB~%eJDFtfl;;_{2a3Y#N#NOM9$EyV@+51xB@hO^4 zPH}bhvppQt`b7D8Sr+1d!MaJnCt#Uq{V6Co5a)Mqb(V^Cu4HwVG6=&uuitB(rT+(Y zrr%I!X&-fVWId4vl*@VwnUb6#&U-i8pT|kT+(JzFyUyM_R+jBkjwPJ$q=I|5o^odp zRx8arBqb~x)#e4zW;e8XHYsbTs%gBP3z>gPSBBoqeHv~eUT?2|*{qGbYAQaSduxTi zBD;mo%HG^PYpW>225n>g6aU@j_j^$m=L0UcB%Hq;{ZhJ#M?_Dm53NG{OknsCu8r^H zcrb*Cf&rWh)C6Vk9P9{&gD;`dmR-X+Q?UD1+pU#a24PO$t{BzMCD2X{+Bpy6-v<1q z<_Z;COEp&};$~hq-MX7@;9fV;A57RwNZ0AvS&f?CJ6m&+b1pyUg-0%rOH~?rDSY5C z+zn(;<(@a8h3@Qz@66ijc5B&_JMmXN=P!?(TBUw}9=>C{FX7|j*QIfx{f}|+hP_91 z#)T_`Jg!jOdlNF+zkIp>LL5)k0{40~a;7f$?ESo>JJNOGYv~>Atg=z`kXe9vopfFN zYWf=4BO2lCWv`^027$xcZ|%U(T(YYX+K<*N;u>m=?2xaPW$~Wtb$Q4O<<^)aO^brsGYALN9zd ztv;as8Sg|PttaUDzmxU^J8flITGW_SU+ofJOJ6Bf2wlpn=|)vjW~(rZw3pLYxfMb4 z28rei5zTK9%meq0aY+N7E6D6fmHZTqC64T4uHof$&-ho;tMt>*^Q*i{|332oJKE#Z z@`hK_S1SrxKH;@=d4HC#QQyXIZB~CHT|u~?DW@)8ww}%HNB(!Tm#Mw^?V4r#?Q(i( zw%tRc{dPS_N`AWxKlj>&W#F0jD9>H)b(>Hs32oBTHLs^vna{Le$ZV^lpI{CjGLIi~ zA=|5V)zK@)WutC05_D%bzL9R;1oOc+3)dxYpYRUg@YzxR1JpYVvE)ObX*VANPqg!s zWPVnNC&?wh0$p{}msgPH3AkSxmqjfpGeWIsHY&Ur7P9f@T9!XMGVPLQM(Dv1dKKPW z2tDyfx9@+}&D$rPb;To_(A(IxND#XuXqTVcEKkco6c;J#U3<(jG!y>ug_cLPS; z4kTRGFKAB-{rN^zM#D%@HQZ}2zRE+y)xz9W>Nc!+n@j1N}fY`zNOTrCh) z0}7x?FxKTtqA68mwQCNJ1mD$yXJ2829uC-m9SYLn5Yl1zF1>SX_!!@gbh)KwETKof zl}^c33>#3gh`%sCq=%cTB%qa|C?O8UyHU3;{#KDz_ChKmF<;XhvM*lt^>mN;#$Nq{ zy`6Tv;Z~5*cP7Q~^o9Ym%`58SzQWf-I9ewz`4@BKscG-qX?aNfiF&ce&fo4yC*Di%O+F>7 zzq<$h&>8*cWb`Aici^u)+`P7}oRaKL>+|V$Mn`Dx-_s5yaay-04*vcvarO7T;>uNq ztI8tX?P+)y=>V!&q95|2Nw4~ z%q0LR!rlNYS?pqXfYqkvu(@TZpUJR2lmVfcOUu4a%^tL+&siB zgn&*ZF6t=YT%ipRC+Py!De^#{(^_trM=|7e@{f3(f}KibCWl6S9d^X}0$rHrmM610_`?T{fflf*LzLvNKm zgpLou9&jw-HtyrqNm&J01;9ci{-sf$ti*2}zP%*=q0yMEgjH{RFvCt)-sV;eE0PjW z34{5mF24&j;Ws6XBg|%gEo}&741FkZ^?)oH4Ya-@gYV6Pk)-vy^WH}5gZ4YmvE1G} z%KY__^XfR|${D^)PWJ`Y@Lj>b>z!|%e>XbcLH=#=?*NGjpX#+@?mH#l z8Cj-zz~RgHfO9=M#ioD9u|0z!7_pdirCiW|6p=_s)){m&$TpMY0JX8J@7X~>Pa(<><}48Y&$c+OVqzX43XMF!t8<@VtrdnQ-my#WY~{= z$0ad&%i|Vt3(HqVit<*K6*4<*e78by5pG)(@p?QP@B8a9atXsKd2{wwSaHR`GQ_#* zi^fD=8vyJ}+X^A7t?)adMk^g!M z`iumO-eBHLCs6LtXv~|l`5V-B4tvY%GZTD8yE)^`Z|4l5qHH{Hdl`H@2xKTR;HsDS zJ%6c<-w@yIan;-RHC%=Oc^9PZIpOw9!JInPBspm~lase+M(fw&SuQnh&rtJ@%#a>q zqi@KZGAOe3tt9KXh&cDpX!RDyYOeW?Os?h5jG+waA7t=uC6~A>(<{Jy6CXY{Rdmpxt3pL9Q|UE)e-I8cbmV-qzKRh^VgZYIbl#@cMdaQH~i}i zjok@P1ll?X<-OC0_YX-O=8%rsN<;b)7V?|B2DoJhC+%2Bdm5xWDZ_jX#r~X%ikS#) z*nio@lO~D*GM(@_22qoz1=UGI|0d@-}G2;bDV$=EU(Fl;}mbWQ^5Df5@egkZO=*0loWp|=JR!7- z-hAr*wZflayuGlfmRV3#Nyy_N)3+v}9@$N|W~OhQif=bB+`p+7QplAaoZD;+sAEa< z5Y}Pb;ATiGY>ijjt@4z-9^}oz@D_mJ39x!?RNzzv>f?#O)9Zm;V4a;-8zjkv3eXab z#C=9%6YL)itEpNgMrX1bTOphif_?3@TAkE-rq1sZgsG((!%9_~yg?$y1f&YE7x$ng z$)My=Z2K(0Gi3g?X)`;S367fUD8bT8uqHv$tcQW7ic@Qa?`l|rz-WvI#_Myl>~DT| z#>P_x<0H!NcMLsAk*b)T2S*GMd$U4}DhEes=Peo9b_>uRqdjELfvk0FCfj{$CfUjQ zX_Rk=dz^V|-hy+sz32zK{?^Q}UNK4+c06%pQSa5bEGovzn;s@-+E$c7#heao=Y3Ma z!XBFA$e=n>r;>da{DytM6eA~kYK5J13+5A3bfkHSpG`3s{b(5E-gCIE7)K`Ib{m&{ z!nO>f5hn5}b%UBM>lYMCJb+CPm_IV~WQTKKgSlU;0&PglXc-d|m{J_>rG z=dhfjL2sL|FTfcw5#Hl2Lu`m$GzK9(p<6S7QS+;gtvNd~ zXm_;RyeEUb-fjLi!|uPiWlEu<#qnhwBTFL%GcjnApuNv<_9yW&`d|ntCB`(~QD$t6 zv^3I$TKm;eWoe{4b8n`*>)uSVse*K8eh2TrgLgN)@62>}@605#4!uAdJ*6`iKda}x znOA|db=Utc^Qs^S!+Ll9PDU{Zi&;)vVx&F7_l$Xc>LAD6eKzml)LAd$4l%GohnfKf zR_IWx*l#l{jGYYEd)3dC?$6|e2QoSF!3_6l;P9;!&w@Jc&rBvukivC5kfEIqX7~y@ zRv0Hxa_+(?SzgsElBtw*&!ohdLB*=MG^WG+JM{>YotYdKHYyA0o+BEpknn|+PygTu zvoXMPbJ7buy}kBAE_wa5BM6fVg47bF4`wh2qd6pf#B$IZ%H<^YC;Rl*ApIWN_7Jq~ z;oaIckG1Xh(4vPkH2V;=k!i4)d$!1~3$$bfYe^St$(N;;{I4{!lSYx9G^M(;`vxZE z$Yo8-^=4{Xx$3ES8zN5w@UvUi3;;-acrZ_qL}B`VUGO;=Gb%JYL0!6 z&9P-{zG(8dn`7T&bBw1^_c6!HWtZ6*oH-v>ft>h!rgR?jYO6~ z_JGa5A@7y|4&hW=rxCx?q*ms##%cE5K}zqv5cX@)`3@{D5R~w%l~=${p;jhNOwQ%W zg~Yr?8Fx>^3z-%17g?W{^vSqw&j+<3Q=BO>jq)}avnwk9n&~lK%H%@3b~{`2myMB^ zGciGheRvLb+BxBs%#K*?e&-8-cy+|b!)d*R0>E$H;Im$II@B3ROERKvU z?|TRKlqTTND~9EFq1?Hz?vV=IOBUJdpzP-m>a0gT6S~J&(gtd1h>isMehE6l)CO?@hQsGlO zrrj?68d2A}5O(UuO&UGO!(QWMtByQZ>IzEZCAFPFd0pfn}6BmMzUn@oz; z;sJpQ|FqjfE8ob}D$Tx>>?2*(f6H8@iCWi~w=<0a%{Mck5cTd!{-o*qHN=?Iv?)ZI{^cdf-vDM7p#2scX9Afhq_nvN z$Gkw|Gg`G)68{(am+m_F^-R~8cQTC?Zr|*RsgMJX@{343p3-Va*A-i0VIPdYN4mzm z#p2AUfcin2-1*sS@4%UQgi!gKzG zuVlJ5*!lh;?yA-}jU#JPvO>C8%fh~q5qlg2vK~GTzV>(nS4A}OWby1p5#o*1dJHL2 znO?kvG}c5aXV-8!m@tXSK;K;Vw;+8xl1Xnr=trt_J$qm0F1?SJO7Cx0@ONwrUD*nK z`|1G91K+6h`fCW&?0kU6u~SxaS!O9ukl}HZ_QOTH36(~4e{34wUuis zXUlULNABXaRqy-1NP83bsH*F6{Jw48?DOVLl1YX@CKDu&1avZ!zyt)6`&hyf4KHuN z$wZAol45O46p^A-*txH?2{Li`X&14e9 z@Avol!zc6ZdhUMiIrpA>4y*0T|L5A8y;e=-;acTuDl@IOo`ox&BWtSdHj4g6lXpt? zY)Es0p5jo~F40kzs$CZKoiZgEL{!m~t+g)Wd&h+XBAyt2p>)aQX#13f z8w{7Y-Vv^2`kTI@2d?apIlTl>D9Q?My4542KkQG3M6^X>CSit7g&7L1x&KN@k%4O~RdTa*r_3pa@HOQ4 zjGpE6$ouDM6AZzvHwyk7?h*{if~ZR#L7b|2+J$fE{*WPAxf(=|pncw04y#_^^aE4z zohtT`zR4q}g%4=r5m;lwKY)(>h_(yw!}mk@enfW)oM1_H)k%VDx&-Uf_aQBS8rc7r z5+96!Ao%XT9L7P|DfrMA*nigbvfxV#|D}z>e1b6RBw3gt=|nB=l>Q5lWnm!tSE{qR ze@%;BYiCV%Nv=j0!>`HBng6*Q@hirglGW=H^!ga=byqIufkty#BQ=w&sAXaB*;Iu< z!)9_LHS0IDRERwuT>ml22=_NN_BPzw7k#SEBpn>IRDPd!dOx7h)#P8OGX~G5xQ{CL zizu&S@eF9A4&}|wr$4nhxB=3T!2PiO8IP`xFO_m5R44ONN=_2<8EeM!Y3(sb>52sj(}S{Q z&q(@CAUjHAiPX7xd75j*;iU>{IC+-9UI(4dYB5+{>dNccx-$LDe<-e!6dxc--A(Fv z+11E9Nc$@ez2g<9-VT5J??So}Pot*Lh@GN{rKsaQt{FVg8;N8U*3qliiM-S(R*{aU zy}DM>@tjw0f5w5K@(i(rq@Vqm-JrHV`w87Yz5{+$zVn%nspf2dM%GJ2j_ju$;Ock* zN`G3?+n;toen=a|c+@)e2)GrS-a-ogO`AT?$%*}wb_q~dpiAlnA1N2yo(OqpE}rKV zEf6?-^GkHJ2U?ZfR-Uc;jCKp3P0m(*N-f&P(p%4QYhxvZ*wp&49zG1~h{K-EXA*8b zlW^%BaoEMJ+V&r`TXs=%TBt|y*`=hP1wg8vKZW6eS ze&gy#Yb!~A)BIUmqngmoK{;Gux{>lJ5~C@7dRFo4qh%f)jGn`oETr(~?bTshnlN9# zU$^EyVEBdj{tU1`e)+8e&zUQqsx@Z+zV;5?T=@s)+9n8MUv$~5sl+QZRE{B)%&t+8 z%ytmzWru?wD(Q>l%pu zp-W-+8fb0hAsQ?==~087+_=DksK= zbt3S2e#_GH+s*FatbEqrE4GYtj5vWC>5QYM{~Z62lYdqf7y))87~~Fzc~Tzc;c+K_ zM_gAy+^F)RebJAPSl%b!(T2&;hJUa&9NsTK$oI?PaUXm~pM6?T-spS_>W&O^I8L(P zbm4gm(_3U-l28)E`9_ZGe?0$N_{ef961lg$qw_?`1W({w^L!XD%ri3Xqwk1&G(P-p zc(|WL)=yg#3h{qS__^_K4_^~k$gtjBJkMa^@oVGwiv95P2aW*eGFGmGoqCKu)5>xx z&GI3d6^dw9ET&nhgd$Gj*f|QGkE~(%Ri)-&h?*A`QFC1}HP@F=yl3fCz8A+gau!krxOblK76GTMpkqlF_XE1;lwSC4 zo|_AkiHKToR8ClaZu}Vz~lG`YUZ&^lCdP~ed5sz@f`zuIVIPHv7GQS zEa%KzIUJP3b@5P6cQ5=l@=y+MmBZ)CAsX5VVHQ#Fj1zkdWts53!g7YUC9;~0J4znS z1$@0Se||CgEkyV`&az8smMepPkBmBtn#OR6vAC3)MueK}Wwe%?jQw8+bQTA6RuJf{ z5YSly&{=2$KukkRXZ05G*is!e_y3<$=FXi;3+8H0rvlTZ34Lw`$IyZ3-kw7J(U^wW zmWjPP)1rX}$fOBOrZ)EW%z@}b%XoXY7>Mp$R%y%pe>>hDL#?-4xqF04hNGJ7-KB`z z^0YuQ+>dAxKQ!PW8U6yQ(hR?rX1GCG#I61KKYWI}kgAm#ZXJZLrz=P~9bI1GTpvsE zCNay6gKs%}tEhiO+fff8N@^9zYUCv}@a1AoMq^llBPXqa7VfW{!Fqwf2#{~wh>Ngw zPFvOh=@etAnxZ!1zW9?pPx`#xKIM$Km$=2`c$6N;b>t;6@6vEG3jJRO`=HCXYZ5i@ zK8hN9CsJcy4OQLpBdeTxuRyB3KCk=)%vrDY-%)uW9p(ed2XbNV;XIbS56(*Kei&-U zUlptQw6YpVan-7?b@w_%tb2KtS3^jZruW9722hK;YpHQh4XtlZkb(He^a>|(a8LDg z;%y|k1!Y}<3*Fr#vU}ZM^(gF?@>ZtH%h)ps=F=~&u;_g~PqVOUnyeFm1{jFm+ZAQ0 zZ|kx8G$a<2`sQL1bEAGvRt9I6$s2b-3yb7k+;giOy||;fjR)fsQRiYpDIv8?W=)N& z2~AO>YE1K~ZK|QU)h3l{atK-(;+=T!r8fFh7;m@7*az^!#vRbYJE8yf)>4^UB`=3v zRx6G~Ni^%4Ogr62(@xJZz){6v4$B2{ zr8zhPscd=?mO>S29Gi{T!Mv-aD3MmAWE&DRJ0(dgn^DfTayGv1X>|~Bc#jzQ7BkD$ z(+<9Yc8F70StIoW=QuRem zi{7@N(v~X&+zh$QAjGIB83cSX~9|GmB&%*s5-{-4>TEui1 zb}eRi-2t($>4P3eWzMgL0zyF^DJ2z=wDh~$lmvXWzf=5Otw|oK1?qNDoaxK>vHwg3 zstWYbyFDemm6OgQww*|Xnqse0Ut<(Vt^_>eme}pytXpT13q`crQ40PtBJmNzi{->D zJ|5P&DyJlwB-@yDlmvL9ctAP1S%TPesOnT3&B$pqC0#&Pa~=5^`7@AHWLzCI5to&^8YML#Dl8V+zX4es1@6 zuBGYU{D-O&QvsDEcR)*T=5@`JT<&4F9&X}M>H>gVzJlF7ZWn-{~pldO5Sl6wu}?0M$EQ8u#GH025L#+U`P(G%d+tdXvz>OVq0 zg@pWWq8_T1K4CTtQNR0=6yCudHNx`jM+=7l;@%yN5|riDCZn`7hPFXy$W=~MPsm$N z8nRyUqR%r1W1c2%-_XGqJswW`{6)zd$)#334Ot(g@{Sq0FQ4uumhQ8morNi1l%z33 zzq5U=mE7ytD$kzm)bBgV(DGa=*6!$Q=Vpk<6ZWBm;B_94FYIHl_+DB6z(lf*t9tIz za+n2}AGKMs8_aJOZXq$3JJ8<*G~%WK#dV$w`qMah!o-Q>hg>K?#EIl={PGjY0B7fx z>{__?yvt>$0AWC$zg$~IUi5p!zUXHQUng$AJtod>*_%wRMm<0S%JKz%hiJb#rW@l}8kk~MObBug(#lA@W=8s|jVV{+wS&D&V3Sk2{b zC)9jXuI9Kxisjc2?QlwRa? z9=!Lhy&F>APYxvxesn0g0pi{dNo&Q#_X8wxEv&PPvA%0L&5L&8`jy2CP(Fc`2`y;i z6Q2W_aq>iRHz|x)b2XKVoK4MRK22<@J2V_J@LT#0_UlA4VK`Je^@QkA$)yegZB{0d zEo8XOtXJj4W7A3E%Sj~UtRRU^#pFd<67AlT_x8Rn%Z{PF!z1uDxo5||v$e^PO3I~r zRhDH)C&E}caw(zDkJa8UgjJAA);=iAZzOp+CX&`eA&EGke;k<#zzYEj zTQmXYR0{SgfGPzf3$LnD7UJ8(trW2etOdlY98jLKw<%{?q&>F` zq0di%-hHB{N%9hH5m0bNFp{FgW`hX$LKfNi%zrVLAx)x14%`ifg&D@c74 za92fVLrU4A;iA9mnZxq*DJ$amDlAiU0%b68b}y->YISlIj7SNLh{Ft@MzbqFr^X4u zNv{5a8ktEn^TRJ`%$m6%6@aKg%5&k$GZ7F3|eoc|eEMgMbs3(`52Q;}^+l`XrfcH5+ zek#$Nd4K%8_^A%FC}T@_n?+gZH5aLGli64eM1R}UL^?x@sHq@-6onM4?X)rR=eEsI z>jVerI0AH>1azDPbe!adQMAs`9OIF0TTTKvAKfr|jGwb+D$gjZnF|35&Qk)^KlE#7 zXc?^*b2>XYcF*MmS2_D~Ob4kG@W`o**YpEzf_^^{VLeWOzcKLlF%Lf<<~UJnZ8{k* z2wXtH`pe1u=j3hKEaJwJdIevJJl4gJ(wki<^NaN|qpK;}08Nvl;p?{ZhavxP8M${< z`TMsfeE0Fkrretbe4UpfwZxb`zs8;?fG0~Vxip>xaW9D4a%ed@GQ@L;(g#TUKntYTAU(Eze_e@$Hnmyaf%$gc+E%2 z)9HY32h@29$-NcI4)oF(wN%72$0zl2e0JbGnpW;*9IC0@V`D*Ws;YEC zsHxn|dfw!Rs448BDsakYO-_hd7gOC!LqZtl?H#l}4m_Q*57J6xAg=X_ys6wpRRQ_m zm~^%~;;>#?EGK=&uE}Bp>ff&Ft;cs)P-eFOTx!B!kXW*AI1liR(Khg>yOuGi-SR^; zD4Sj9Q}dLSc_}a^AHr(PZmb2ETZt2i`cGqJOHHyK#%hTfQuLI7shGW5POAel6+*_7 zh-AG+YiC-}9G;XAfiUOsebM%KJ9~-h1;6WfoJs8?G{g@mug}M~2Aa?UfN>TzuO4s91ZFp{q%qfGzF%4CMj!6b=YuQe>I}z(=`dfP z?pa6rqw{+kA@(##dt$g>Svm{TcF~wHm-z(JElNjc>u(0=-83d%;>S>tbW1f#m9%7R zt0-};E{RtswhEF9UxKu;mmqD#>&k9E6`;L+G5pARiK z0a6D2*jreB27Ha-Zt|9f)D-H-l()&kD#!nzW{J(sG`p74&Oseg-3(*!%p%NlI{2oA za}Wkb_|Am!QHhWrpWhMG)zqi_qbGpx=xDJ(x{5^-FP2DKv4cd@@<~8xbONrJOVZql z@I9889N>>Kz#pzD#0*N{ZBMiO-s2$N-wnH;6oyB?$L z4b8kLNsZm_)vD!_Jswxe;~<$^->dEX)yK8Qt?$Yt_b?=5%Uan4q1N*HDy`=tMsUy~a0& zQF;lOO-q7lIdBKUYDNPFP=+%((UPnZJU)3Mj)4oX^RtU8Ssl#aWSZshY_4e*2O+Ri za-}5A1MJ|DZmLY6m1Y#)RFSbTHh5CbZJtGb%Og!0Ax>co(4w&K@YcSAw@&GzK8ifE z`h^-+okn9zjWKOrO^OT=BW~?P1TB3jCpY5@$S>$Fw9n$^dKnb-bpN2I%wuj<-tb;_0nqyD3-R9U%YQ9=WD__I8{u(j< zc#|^p5xxumnwWpQQ86CANf|gPvhdPl&^7c%27Y7w20y-1_7bnRKRR>P!^A9y9*fQf zm)o220xhBbkQ&D>s4>TO)6Bu2gL`33=HM@AmlrUCub4C(43cC=fHao-h+oLdEcd>O&By%<@7dbxX}0=`k&;P2*Zly1I7!TLvup`HO0 zkxW+duk}QTmxr0kKSYf&5bCKU>Dv3@JC>OB7S4wDO}B9Noj~bfJy7RwI`#mSecUnJ zB5t>;sGq6hxNFpZYgH?`R~byC0Pt;gir>zeHGhs(xUILKOkZ&9*;v7ga~|N-LMwiy zMgdMhI~d^~=2PAixs+!XHxNH9ey`WftM4Q(1gu#KbKi+Cdz~b)0`U7);4e-2B~liQ zHfcgx@Z(u#$ywBrY77@4N0B1;l0^T{2~ger*ASz3kgDlqr%a6H>*zLFmNX~M$z-Pl zA?vC3rO_}@qkfTCzJhc+{++NOy#h%>ij!;$E1|7nDcl%FJEDJ)Bn{B~*r&`y-Nt3JOH0dYODA!-)4ZniD=*K-Qx@W%2V(ZQ2)PzQf? zo!{@ZN*cTf-0tiBewOK_|+Z}FUUBhjX6uhW?Ai8xy0_M-q zg=%O|;*JZqxp}9`cdE;1EC4*`xD%=TDdHhc;;!JGrG$5dh|?1$ytkb2K810TJV72N z!Z=2WWGl|0nvktn4LeRuSQ2Kk!O|>75u1!67TNoX@x&>OVXrStV$1dd?MQnCsalX5 z@;Mz%L0bm8Am zyaRab@iUQ+?9z!Dn*mt*nL5>`g8>gGfd0CDDQyJ)Dl-H;`B3hJBj&KUO9wHB&S88_ z7UHsd&Ve*|p3>Tjw~C*`UimM|O1bNM(2i9QbFNzkYJTJmoMcPQp!|wj+6X*Zgg?(0 zbG_;8k5AV&^MJpO16qn-!Q0X^#VGeObRo*UbUVKfw9heNdD|+-1JK4ZqbDDC6&VLT zx`v{ZO*Ll@oeA}r3N;&GUq6!tm;ht@63NLtJ;D{*JYa8Bl+Lat6i3{_=6WqLyH2C+ zoJTJe@@HTYC!nsQLaA!rwam%K-58;I^+y7;^1ZOR- zX_PXE*=Ih;C!%bE&z99dTK1P5VWZ@>M+wGm%VMeqQR@lv@g9=gHLPvq8}X zz-qcMK54JpGsCls7(3hP(1Fa(_FU=Sp#xaz6F@m`C8}p4xs0T@oe0$7dQu?G&wHfd zGbyCLcv2==;f=fmwL2MbQwRK-+tyILrz~;2Bh;HNyccu~bhbHuHstnbUFMG2v{4F^ z5b`R@n+uu!5D3FNu)gTm3pWrnyB*+r{ZMjuIeY)(A|AQUElV@pP*TXe#@e^sOpgiRz-xd9{AD#wMjWJb>oUgG z#oQ-^%`L0hX>)(m?B077^IG7^Jl5&uZj#=8kT!a(JNsY3eC+nzMzhzRORL=~pM4ni zgq>CyUdEY>C+%0xr*&Sa0dOgumoKO3ol9uS3;nqhpn8i)gGVLl?aOJS2y^=>;P|}2 z@jbN#;$SCyYRt6GhvrW+cS1d%0$$bYB<D(RS&^F!YH-tDmx?*IhgcjofM|+~cpJml7aM){@hCV#?uC(_~F|X?>W9?@(sDC2Iy#@ISX;!!| z`j?&tCV?@IM5I490q%(w{Q%bzzEGFg&V%=Gnv5^gC8oLd`BIdZ!806*>2c|nx?60T zDe=P^%ugBq4E_Mmwi*Q}Q-Css7DbaVR%aT$YLu90apRVDmhtSjp6T!sZT&EXI&HB3 z($REF3VP6tZlVccEUnkI~E+=U*@v&;#~e*+G8P1ZLu`j z|Lb(grr^_Uvs*N`**2}kqEXIN&Og&iKb{zE4K34fw;k8sR@YL>=kXh}5TOFRDJ`Sk zH5qj+7(3lMnvs~+vbv^m%!eDr@OB@9DK^*A{Iq+X7uLM+ev^k zCv2iAcZlH2H!IAn%Cs2uA5I%unStL5$EG9KBQn-%C$6Kr#8MFUB4fmapcyUM*LgGcCbi+Z~XMS*cBI^~Z1#|qx zG~Mtr4LLT4`j$YbiJ^qa=&}CiUpTt?#iM5x-f7sjiP>0~gxcrR!!mX_=9T^GCn~T0 zvw;tgxuVP)vs-EsMX2R(>jHdh!t~pHnhZ&#*s=BjO}udGEe?kqa1_e8jVmapFZx;! z>H$H0Cv1-J0dPOScJmNa721YcP+|{K+@+p}3I#^!gh9FG2)VY-jD0f?&!VD?-YK#8 z0+^c(yaI5-B#DxD>IRB>hAf#qDC^SzZzQJF;C-&24BMsiarh1n?^X6S4JdUpENy|g z`xT}usOjI+fQQ*QoNQ zw!pWxCUfJYnwX>3-yf}?c~b$T(+FBkIt$AEqUYdNl&Zdak(Y&8ePqE#oP)k%=Ie_l zO3K+C#Pg+n(Wg%TGm|bTBWj89`*}*k71+K+$>~hjx0T{0R$qz8m#bdQ!Cs2J&lzet zqn~*-mEtQ%Iw7^-xmS7y-;(l$VNV`VLO<{kuP@~TI{wu^$0~f*sg#eneIdSvBqxg` zBrA|Zgd8w>z9xj`!&AQyx0YPtb;|p^`ws3a-?u2>9c~TkF0}3w@U8wQoMl4+^}Czu z#+C}c)^B0oEPpXoL!H9X7PAP#MJpU|$($e7q@*V~Gq|Cpf~zPs9mOrGoGgL1c$ik# zXvb*-B;`O?=V_~eH!W_-ifT)m1028sJt53$nMkhYOfJ%bH*8tCqGcub&FMj)^Dg5| zZzaPJKymxVFcMv zuD2G>y0h>G@Qd2lQ0nzJOg9^*O>xm{CYPd~HchW^O)foCIT0bb@$0}`(d2Re$)~R5 zP*YsPMd%*Gb-OQ^Xs2^vy3?3-s{m)i$cLp^Ed?%p#n0!kvocAO&WxUP+ESD`d{k&@ zbT~*#!Ze={Qz~x3_9m7?x(XQ2Kq}xOT@pFEenX)|>9S^^yW&rreo#bPDE~RV3Cb~+ zelaZtumGK{h25#QFaCMYgCc}Ge@v%tbdc8^auatNS_6x@<`m)OGeOJ3`eXbu}US$ zDFI^4ompeNII||X(FN`%a5sUQtrwwFsBN*znN?6uBhj830rxH|jjJF{HPP-(JLb2f z95Ip+=Cq_8Ej9PG!O65q1zcHW+eZ~i;EA?Iu_23rj>csu4UwQd-!t`r$ z%$CRoniV(E824dmPI`MoOE$EzB@5-oxIY*5NBvm{ZC*wFd7GU`BX^FF6Icp#%DGd3 zCnP4p{pWw02BJ65QyBd-pQM`r1CTk8X6+PPdMADEl$;Fi8|-8P-&Q0mlcbyTF}}+> z2lyOcl9Mpcx!w>F(+ODUd^Z~*0o ze9pY(LYA|$Os9C4$T4dY4$|#`7~VyJUaU7t=4JrT-!c|wk;^=mE-7SH{^6jp=XYxc5N-K0wt`k-9VSz z3Um+D22-QV&aEi3lk>;Vi{I+T_h=&HcknC`3nvOVcW=MjLupRk8t-m2jV7G zB(n)t6o-2ltSEe|&9{YBp}(o2mv6uomD6#{vDu!d^_%=HX7fg>s-5&FsMDKXOidl; zpn&v0o_A%b+S1MYTKb~zoDN)w^5P;~XP=!8J7-e{LNELQp6$S{MlD|@@RUB`|B|a( z7?}&-+2C2K#rp|l68qx&!dl=cP?kkts~+cf8;AQoP;3J#Rom5ib-6mhd;z$EQq={R zOa>hFqlx4`V!i;ovW$DtU2IMUi1{|GWRG=IdM346lZ^J}yTcq1GFF1!A*0Ex(5 zZGF*$@e3GtFT>vOD!OGY6p_zbIvnH4#|$W+Gg%5)3)L~NMZI}R_Q|m|na3v87;i6t zuNS@x;p?k0-#)u0``8%xE`x6fzRTfT1m9lx7DKufkgf#2--mCwCL$kf&XtsTtOopB z4ci~c{IRws7O<$nKa%tdo2l{Dyqc68BFSu!7$457X*kJ8s@~gLu9Ak=9b_T&^w3)E zEBPC3Qu?)vXv+Wfp~S)%NlYI@64?+*jPZ~J$~}Kv<=$F8!Hs;E_Fh#4-6-Fo{jI74 z-Gk_UZM?Cyd_{}bt-Ulp4lXCSp6v=CW*JM&KW(D*fvF_@3}8xrJTae%+q|$51Ad7g zGb#jay5PJ+UamgCc1QaLGLtxiYO2q#mB?xZZ>8Z!rf4S$cu#U`+UZf!c z{8rlsr+;vR*I&()LW@i$1^+RzQDWI`w$_(**1#+PLHK&z@)h1(#=SL zqCH8*b8;7jO#W4x7J%lMW!XbOB14-H+HpppxSakeK?!P@jJbUJ$p1gIYfm%k;esD^7grut$F&Q7W z)~imVs2wasJPxzclFQ(U$7uvDxs0ngj}x_-thx&0@&4=;)ZYwrR2b^?(jty=L5<<| z)D&7LIGoc2d@J*}MV7ws#&EV0_L{$$Rm~Jr>~uSvX0o1kJKxg!qO)hLLz{wHC)CDC zOi0;Y(m?m$q%F&pk`m?-b1(_vU(}X(i3lZlrwMV=Uh;XZ8TzEw*5T9mYORrcwsxD# zCA{o%@q;^edL3Rf^bv$UT5FbkSZnk=TAN(vA?@S7sO?t1Vj5fA&|)n(IP*HM*N@?Y zJ=gjD4($^o_+IVil8v|C=5V+!?qRhmgIZmomD=rP?P@QZLJzFKc42#rJC zabW754j1c9l!$4M{gmc?Av+iiPZ8`GDPkl!P4L+uKffGU{LX zbHDqN3mxBo_E{~=gF z=?szM0m~m+D1fWicIEu-woA3YDJRfF8sa4MuLGV&UWA&W#YLD$T(pc>?!lF)gZvi` z(ZO`jIUO9*_^J|d#M%a$g6DOa>*ri*A`Ja7TXBeA(#kb7Kt}2TL^~Zu{P9|~GN}L$ z5WOaMBPTpj8x(RnTH*{V6xvTkJ=b_gAu`L_uj7|%P+(0&|Ha$`%7skh)d`8K=+sIl zG3u|TcQkE-!kLzTUi-V9OALr|!MoWALAreDEYutz^2d^q_ctBt6||%1N_uk1RkWLz zj?Svr(yY4E*13TH5It?HjM8*Et;G{S(%ALCv|$+8d}jxRX`}6M(yLzGc_$ zq$WSL7fsgk_qpqv@ty z6z@dan_#uj8>pc}efDKbwJ<{3xBoPEQ^p%tKzq6eC*a-0PpP?W zCpEU;K>M2fy|>Z^?(swBRtVX41M8QGT;}rYD8g_9uNre(JhPiryALbJzN6bJa-z8d zMsSI7<@I#Wss_$W8cv0D0PTlT=5pv`fT(T9`?pgI@(mSXDGP|X{aR}5xSrkfEhsj& zUr&dMGVp6|1(?N2GfC1rcF~knN?5G{>U<7cXKcNm8duyvQB%;KQ&<~M87#5dsQKD= zV2T^)o+4u_#1swA+kbWkgdtQcgSEby)oxp^y%PyNly9X~O95+FIeSRQ+M^v3OgSyr z=fa*UI~`wNRm#@iG;rhkLmu#i?Xdo+ix}IW2308QGgPHHUlfFIw6}8bbNQ2163J|Z zehTMGu*MGO&_rejg z72Cas+Y>e^tR7)tab)4D1hxj!Ircd4rf@ki=k8>qv7GbgZ6+h$sU_^LC#p6Z^zqsR zaJ%4ZOYkB5#uGfgpdnoe-b0cq?kYJ9)&v+Vp?aZC8~p}-wAPsYSS?ENMT=1S0B{`{ zDTC}{Bp?JS9o4{ndimfk~d+=d|}D23xf0i zxg0@zWf!O$!J(sOGdX(VWGmP&{3^9yaf|Rly>CWe@ls@TVRbLdkO1c8ohXu zvrm<~tHAvU?;E3tjAyQ+xA8o=WIWCi+{?OPmY`KGRm_Fp&OL{Wv`dIE&rq_nEc+F( zH!8Q#!n?J?{W(&wKL=4tCwe0_qCcnjZqA7Q;)uJoM27WwSK8%?7EXtK=oZ+AirD-U z*?x30>^Zl$;{ZASbBg{<{3e>IyT#VolY9W_SrR%|1cN4=%379$U>!HMr zP-4&TYcF>Qj=>(l;Sgr5zlrXt&%p0c9A^de`P!SHj+lQ>!dQC?9g3RkZl;yVJ#p+! zCtyco{ViytC;lF76WyY@@n(v>x@^v#CKkrKb9HhIIS_ZQAc$8lC+IFCdw7Jprzr!! z=HShApe?end9k?``f>0Uh7nzr#%3sYVg`P5TIVcYk}sHF5oR~^rP-Esi|QoL(HY{&YmxGB+aL zHVd_Asj_)h80tU7Mtf1=jJ2Al11o_b8aCb?lREb#JS0Zbr+J~bBS&jtch!` zE}JO>jCKhy8tjFOpV*}nwKAbdXwygW;Tw8)gd1wZI7LD%0qy-_ zxHOU<8+^Aj%U*+pas-BgbBIx#N~V{ybvhmH%E9pw%PyUR-2_|o0?Kq`j)E~(B3#Ro zgcL#@;gX9CM5VSO(jV{aO^E*Q^pX6zJnqk>9MarDJ;HS)BmA55YstR|VL6UsvqECM z1}$BX?>9cC#{`8*1&4BJn1!AYlk*jrg_A$eMhhn_PD)9W*gQfSr-)%;2#Wd(U9){mbAwfq@9>gTda??KN@6dTb5wY2{3oNdn<()?+mDV zfBa0E;Ie9wKAL~DbVcP>cd>5WLwor?CBp3QM1)5j*wf739`v*VF(>z0yL(tSX_1b2 zV)#5i2e;yXh5Ps@xMow4jxhV8w@&7cu=l8*;eM#e_rn-{q%ENFBm2R+a|@N|cq3<* zO)+nRWYw@93;j3gU|B_W>cv?7TO-sQIcsOx}a^beddUo z5PgzXmYoyP%{gWIfO6RyoVjLmiEak(ZjJG86o-TW>2G?v%Yar6o>fU~?TM0gPV2Pq z8%h`s3>>CkE5nuRS$?eEugt4MsT8q5zZTMtMzkDoC7xZK5pAhMiwb6RtX@IZ@M>@% zzTFe&Ed7GHb7n`u+?mPtYs`<5ac9Km*XfcUdU1U#_M%84;=X2d&B=|b*iE83(;v?N zJC69GlD%74Ol94y`lq;kLx>x|nrip*|>? zSHZ2pvl?gvY62UsRbgEs{D0!COumAH@`|kTL}sz_)ZXTT^4z2L8B4awN>B1M>2Tk~ zzGYpRFmocp)f8XNCfJ-BcicdfgE>{fw|cVbIG9P_!#l6|_j+;VRp@@3cDByiCo-5P zCG8e)-8{5F7))Xd0DAK{SX&jqMJQ)f60Ha|ZNi_&PR(});XD`MwL%7>NyQF zx$r%4mk1Pv6ebNOlW(dRPy%N-neIaG87=H(`4@+n9C6flh6#L-=J$zqZKQ4ov`3zr z!dfn$r~P$6xnvBp4M$KWZ%JKV>K-L-$w|fii?2T^zCOs#&=htradGUJZ^b*`#E0=t zJdbyx`bZmMPLi{w_ea~7UhrGyS>+MuS!C2a>-;~=vr2s=9+<#jygA>3fx9P4c1Fk_ zXCbZ4i$uOJVmiL19+s0^%KGAz zFydSoKQ6*sIJc7EJ#e~LX^e6CSOH_I2wLw+_twoH8QLvE9Yw2G=94Z7=7*z{)Gv3E zn6x6?A3wdf!KFE3()YoACb(ll9Z-1>+>77LicVE}|YKmpOgVo?>WENrdoWiL46TiBKGcP>um84*-;( z0~9E2g_TAn=XAR@IfXd+AaM#Raf%_p+C_x- z78BlA!mu3D(+WVsF`5dnrn0^6wU&YCU#6k9uZd}NA?+zqbOmg_;$(Hbo(*l#vqc;A zZ1E;NTk>N)6W*+6N-xqgWf$w2$R&Dq%%ys!{4zZ=_9uE~+!j4ku~mOXmYtdKHvJW^ z*O@85Tpw*m4d0za;~T>$Q;yi9Lf9BKliPJOx}B}8IFl7%v`i57?8xkVQf7PaWvuRh zZ9!b=AY&z@zs$w2J5YakH}`trh+ z3wAh+=WeH75St<9;=ec|!o6*nzYcKv_2=Rn&i=)Z%DgT|ftFZ=^1B0y0rlwS&WiUb zyFAuS|M9^-5<_jGXDvc|!S8`vd(Y?4O8S(32Cth3 zNYNWSDxP=(jB!##@-s?g2?;tNrGGd@HTbPm)ec$Lt{o>;J5c6iI^o#KByw4c3F@+N zkUqwT2<&_p*Xso~kF+t5gU(0YY2Q1XrrXYNP0q$ZAx&74U+aBdYpt7=+wJxGZS(m^ z`j)rrBhUIB`Eu`-aqe2&_`3Qfk!_;vn-&I}(qiW3FruQ4;j&Ezu z*(uJ!h#V1yLAU8cl@S3T&9)%bqdiFzpi~CgKAh_hw879#{KXOO?nQmkSDBsW2;aNJ zqVrd9R{?MF%Z0g^T@yB$g}GzwhBwf1?{NFCTPXLL4anl}&68F6#i ztlO!Zvv;z2&}?g`!+CJ{dflnpXY{0yzR2k)v&ML3ojt|?HH4aJu#>lP#w7@BR|y0M zl%JI|ib1)t?#@YaiFvnf@cGlt|6oJtK(eAsyFI}dXoC^uK25cZ^6cj7Yx+(%+s>e>fBJP@6=Kw67v>C1rji13ek zBf^8;{-&pUm8uowPCdq77LEwhlE|w+-Aj`z_`SMXRh8U6wv`B6D=&yEgnhbYViiR!a}W8@Hb#Hbv%S$! z44_5C2Yl*L=&zd-6T$EJAg)eDzu8;0Y6sNY!MAb_p;dH9D;)ReAt<xI$@zF!F*H^CLUpz}IdQ07dv^tQx1O_gJi6_1F2mpT zt!>{@(Dp4yX#0VJwqJ2r+Z$Qiw?NyM9c#7yMb>r*5uagge-YYVWnKYo6``%7utGdw zxATg8J74~mcHVo0cJBYqcHaA~?c7?>&aFpi=Ys|9yppxE+-@iGO*b>GN?W0wbzYT6 z%`W{-2U$xYOnl6(7NdVLUBNw|$3zHoY)h%tA*Y+ATlu}11HxQhmpU!vDPmzaT^n;j zn71#fwubyAEbOKKiFvn%LxFK5;ycExc3{}A{u1+Hm%Q-!_NOr%#C3aNkpDj zr=E>r9T&u8467j#$>YNJHW*rca!kU|S`y(uONIO{7W&pPF&@eeT;vYi`^lQmxbOvD<)tlp2pmwI29)eIejc<-2*WX#>4^2 zJt=2UAR)oeVy4@W>Ht#2=~O)={IG{^&?N+>XoIKv3d8i~{cm?z@-7-HIpvlR0bkI3V134R^g3q*^MtKDU$MG*`XJ`>lyeN`DYf!^6%xuwRr1QQss}KZM^##Z ze!#OT0ne%&0-ja51U#$q3V2rKgWvvEx4>R_w95E(kyZ)6ZUXoYz8=!*$FG;PD){x0 zR_t}yU0PNA21siNzY1x^{sRi4wHUuDX)VETh_qr)kRsArir-?=ime3Rp*13~7s{>J z0-$|bodQ`QJZP_7XanECm&4k94cD$vS&udb{ba5~kc{5@^kg+~gv-@{df$P6xnJ#CxbEnKA=A)q=10Z&o*p@b2L6Vs9gpTKI76!Sr97~GupQe$@ zt%TM0n}z5?O?X@LCph?;O${XzP7>oAO8eutoTd`gnZKIvR}L_(6fwRL!f%K0AfGEW zcb7DqjIFXepoP|SID*wXyk?K)1+ZeE~w zyWe(XFIuP@Yd&@u=YHhabFaE+>JvWlqT3^8)_mkJ*L>(eI|%m@w_6)C5dDqwG4?Xr z&l$U4au~P0?AUW({T~hy^R^dRy8DRR(--}<`~*<7zjoeCxO?C5xJ##b0C#!`*YKoF zy1lLXT(8%o@$#`L@AD*k$pXE|gC=YD-W&5A;QEz2WYm(m=G-+yCJiVm#fw1nX^Hv_MZ>bJ?M8PrIJD_lLw>5Z5D~qj@WZc`?LZ+f8CF3$BZW zn3pWnk;nHEk9Yka2I7^Gdwk}_R+xu)JZO=&No~ zd|%(_li0{=iu{os=fD$%GstiXSZyEKumy9Ub*AtScBb%qqRBp@`Q$USHxLT8(Z%kC z?(LmMv=E+sxNv>4IkU@+G(TTpO9k`b&B0?%>pcsbB{1`{r7%m1VU{Femc*A;uj9Nz zQovc_3_6Ld;W?ohgV7h-b;JvJegq>!>S6ZE7dl0Sz`81#NZ$CyN3aeaR)?*f@-HayO5jHDd(EHqGak2_UPe#|`Z zik^j38AzSk_mYkr*a718CcSL!d(R2u`!(}~dbT^@&0vLdTIre5y{A16sm#Zh>gH3> z>&i?h6W@ZZAc+;_ME+rg%bGhb5_6vu?vHQneZrY9=gyaObEh?fe&xZk?mrZS^}8R> z7Gx)Jdk2)udDI@;P43Ty!T4|IEt!}H^dwMiX6F?B%xG8jv9PzqxYY{kkL*|Yg(8VK zI+J*MbSjgp_$`TeH?q^D-!i|L(h1aSp>Lb}*T|NSGBZu;eR;`k! zOGFJ$B)x}Vk5f>B1Iyz`MBME|_{~gfV(H;e!FMOY z-Iya!613I9k*^8L%*ZectuKGUBf(4fG2|kCSVthvV=r3^SA@;FSAY&VsP{L$+p8E^ z@ntFYFPW{cNoR6>S{ggunsf)uC6-OvJ_cF5?iK_L|ZvYG!>IX z+)WPKQBgBZjrJG~^rehk}Tj9OkX~oG8$`5e6<^O1LACdoH zxhIlyh@n9G2&5kaFg>}{PA}xRPu|VBwOSv*{h3{YRr2jl*m?9+Yd7iCV}iAR3Zz@wuV1>OFZx@#9o+ZpmoB&5 zxO1^HEy=y7kBav=5lyf!0-T|}< zl+%Om<*Xc(u!=dXa^^~`Ke3#URZcJNbydUVRNG}p;F@Z$yW{MA;1q)T(FC#;zDL3C zg3lOT;K#Sb3QDVS`1L>x%6shM$mbln`CHfCRj~G8L=x}9+WUyDy|=%0?Y#qQ@7@1p z?Y$3c?}Pl>`vBG+QVZ*jxc2^0u=Ym7`Ve4!oQL%>!1@Satv@2HkG=!ervU4-JgmSo?^kBCGnINH!X$L*jVpPCPsufV45h=l9g4EVgKy4NJf_AEL|4S;8=Y>iN-0o5C!+0dF8pc}F)!;}T zDfb>L$oioM`e9POA0|OR)aokfYuePyE4lO1(S1>y?~BpzR88d=J!e-Vr#}|=mT3RZ za0*J4`zy%Ku)#sk^JMJ~;FME>gY2oyK#1muL0o_Q-@RS3DSxhabAW&OFLgDfiYZ

v)2Vwz2U9Tej~%yXD1tjQ_AGB$WXN{%O__ zGs2fTwsRE^984J2D;E^;oEvivC?&8PRR4dRy$O69)wMro{QG?pEEoH$07 zyhuqXPLzZYJ58`B8!j|BWMeT>0!c_%LReBLg+NJwZm*9&C1&YsLW|2*;Jp?orBF%< z@Cpe8N?8h&y|ks|cg~#|TXvv*{rmHgXXft9x#xb*z2}}QCYT&3FxhLVO!Gnw)~y!w zv|g{r4EdYoSs803C-ALr4a%A-*2<%(WbI_%j^*frwL-r_>d=}puvYvsKd4}>*8VE5 zd*WWbKdUxFdRZ7US%uY&EVW#8uXMBwu9z&gxr9p<(Ub6bbGt;5__{wl9(GLQuAW4U2Z zC^m0S@`#=UMDF4%%x-rcESS%byWr}|10g2f)5N>Gu>pp{0yrY}!(k@HJ&7%Q#a43J z1rSd1wl)+GKTg@}vQBu(c?OHd!82ZE`ta`oR4AUdw!ATuP#?$4nNnI;6Op zOK?{(7=A7i)(pu8fq8E&r3*W$b?U)7Eg6=V2OTxwFx>!HwyEQ|`-!TWW z4*cDkxcDN|DwyT$QIh-|aI6R`_bZPh<;8T5;=?}tq!|*2zeqB3kT#G#WIdYh_JXob zjVYklMRc;+^FJasQJ3I5|_EKh29k;JtPyV<;U%%JT)Atye?huFA6MHrlruKds`>v2WyC*Fr zrBN4=TsrXoH+v0fkbl%on|Gc9^}2nl!V6G>Hn5I*`#0v;7-QLoKf}KH^VU4{eR%)8 zVk#OJL>G5h$@}INwex#zYsr0!c(5)$&7Tl24-Xj^^v;5$Xs0QHbtkRUsf#Rp!%-^j z25a%jjtg=8c7`!TlESs~w%VGa+j`S3eF?h+fz|4F%;&=1G^38S5a;j5(KbXS5U2zK z=6P*+NIQCdh+4$Bx|h;FvzK%Y&gd0JLk(%C)0Y^RE@yhL79_;0!$s}XlDZ_N>%!}` zD|<=1j$A|>ce{J(PR4aaxnPg-B)_A4EVU%lMkRavr?K4PQXO;YheG!QYxs7g<$6ZT zS16{Q9^+xn@RNU#+!W_G21&d7kH^wo8+0QBtqgh*t2Z$`C5|F1VRVJ!$JvQ=Y^O9U zJeHC!*lz!sp6GI8)^!=THpx zIb;69CA9hz0AE>KgE1nv#%9N8wVVI|`hodG2_HaY#g%x@*uhk1rt%mbtc z9O3QV{(7?IZoJ-G$9hQ^%Z2H#JGo%}FpntZk!Ndy+@cMT5JF)}wGCU6dd;@nkF8YW ze&uj3rc}9cscI#uhQec-^6wsQhM#`w&h#|P_p{qP1f*dfXTL=%0U~kymE*4he^tkT zTE@X9dHa?!q=E?7%5+Brj;v)cisYJjr+v9BHvkC^TXuA8QOlC10+r6T)lg(P>((}^YkAW<)*=Wk+rH|w`pgB{imC`x$HZ~-3^<$;{39)T3|2y$gKq;iBLE$>}ThRaOOa|HJmdb z%>bY3k^1&4ar{S=R#>Ena?!ZHn(h=#27XsnFy1<60g%7zL-wnag6&feI?ncyFpciN zoP%_xbev_ecY)s5BY!g9!T2N#rq{>kWMQU}a(+=URG-LY_eR6ygN25~NtvpV=)s`pNT!^S{>!Mb`{+jSh$jX533`t{BOcKE^;SKRmHHw5Q4Z3t)E{Qw^uuFI-*)8wRO+$3>w5xM`ZW{3p2)LZ$d1SJB(q6ib^JP?kS;E_I>y4ig=zdI zZ*@Fj`%HU0Z%xNgzAMYEFS(&q4d*&uS)@uDn2oj@ok1UHdn~W=It-+LomZs@3}8+J zn5*iI!N9cNjxknRyAwBUg(-@;ifq!Srk_$XK{yYfS+@WMw!Lz-R^O8MRZw$niB*ZF}g*6T}8 z;PW?m-B_M_ij~F3@O(35-mOC#vJouN^7dXYolf$E`)TId32qsS-DUBYcM^UjS~sh0 ze8$5BL^Zk_mgOG@%OGvjs<_A9eS$&0FQ4=bAzf`=^H;VOF)4?VVK?bwD=X-Ut^87w zuhp&P*nXZLfOW&leBTYE1<$RZ+7(iXg}ldF-j=sczz|+6;jJg<2YuJ){uI#8_>GVHJwuwY(7q!ovGCjcz`)de9bfD&Ur<=D zEE+&s9LPFtmwh6y&sv^-imgZ??&CAFsGJr*HJ|0@!$9`2yuNrjjtxsnpt|r>X8=b9h*`MOE88)+`3wo>WLpwy4jz1>!u zd1|Xg*@Pkg6yZ^}cBz2G+qQ)S+CaNVgtr7>D@UTU-u`!5AA0gSdwuB11YB3%$GvjI z`p_$Eeds!@=i6%@3|N6f&ic?R`9T4Bji}GjJM|{LBFis@^!8&Ry}lLFgE)%%f?&Y` zYCo`V6^i7#S&1>?)F zFpUYMv_PhY;t%i`LOf{uO0TeW;W1yu7}D-t0}vLl_J*kt*LNsHw0%s8=JCfAYH!=- zEv<+5l&pu7)z^*Algh*8K;7V=_-&@I(_KdzyxIbp;T;KRt_{mBK8cH4 zLxdP+;mBOS1xE2loNRfpH*&XazK41SAub2Oesd5C)@*Y%`O^qLS!m+ovdt;5)BF$#Z4aO`yY$u34=@mG*^&DK!uJC;vz_SVSOr@?=#oHT(>xgKNp-dlsmgdW89Y6T7;z6mS((eO19RB;tL$D zEGvoSy!q~&9`Vy%!;#grLs$2>9_%=%!|aehSkw-GHH4V=s?C{;=ssM!H`T7Q`Da>- zYbaR{qje`A@{+pEGz)FGcy!lI`A0<|_2LsUR-p_H$ORsihv-*M{^ERWx2h8r+VAtIX>y3Ah zzlGHuk*R0Qov6lxRCDnx(zCjprxn(3x#3jnoK&84oi0O6iY?_mk+swsm0HY8Z8!QhvF(lpU^g%gvOPOOMa^&_hr@h5 zI45ZAy*aj*hMeEFZ8*_A!`yvLlC$qbxEW~8Z^QA#y%c;q>v-E5L>zW7wCkbMitNqn z+{QVut~Eb!>QVWzmKr!Ug-8>5+pQ>bIP%6VP=qRWdqElhx^TY{@l?P~Ja{f{{>BYD zztH35=>+Ia0=neT1qBeV5b>yRlZYNB|;dbEI*;P)uTWf*R+BlEGbmhq=?U*g9 zTdBtsu%{IW&3o9oU}{waZW-$o5J~?QndLe@g*9;+emk?M8`HtIB(7L zeBYWGqdK-T@}yg<18LbRt2W73&a^dbOZTwt^E+S4_vy!s?qMH8=XbhCwkGwl^E>Vt z2nuhXDjr*>9?<6G2jQapfHp60+X332g+vWU3-V)&uDBcIis=h3(ja*C1*5tvNIZ_v*4c5_#xBx*hpvB zLONgQzH*JBuY)h=lbBvy_=T6w4PCirX8Sr0r3L}rr0x#Ak=#};S%+vRDQzr|C_e1{ zOT2oH+;{C*CmoL?1Km}W>b)~N^d55m>2Oj-H*Wyq{>!}jiRAX&uaaJL^9LawJf=fG zlidFHR??4d!4SklS9taF$nAyCl0kF}X%G)QwZ83pk&+K=8?WYJudVGXq#=ebEBdM`s4SJ~}ht_t|F# zf<9Of@OjqxEJtsDXN@j&2z2IV=jWWc>CI;!u3ck9*1-Vw={e>;o^|q9^ElSa?VaXzu-s|At4CXJ_ZqfmJJ)SJ5nFGW+j>h!Td$v5?}RTnlSXZ~ z%&{LvbsoCQ_8Wu?^M&qf*3_kf&YC2^hkM+!x9_l#Msmy7m%5|R-r*NV$J}BZb4zf{ zEzR4yE%sb_pQGDCr$`9zQoGkdJzQN)_sgn)!U?|)R(KkDpnnWaNx{}C#O z$Iksah$~mkrnjx`{JHkz{J?30`9bBPJaOU@eG^spWL0~w3td&^>j~c_<;(89IG?%g z-NPuYU!PDfDbK3gF^!ct>TEuwfVFmzX|52Dq?A;4_s!`n9dz?1y#J`^yX{x=2C?jP zvVv}5o$Ujku4R0093J#NI?uZGv3YS{lcSwZ$lr@$qQK-AU+K==^Elu8I22NWZl*q3 zim`n~FSD=Bo;>Y`*SV+FUw6)Q{=toTaXfPm-8y*P76r^(lL{hhwIv+))-tsIb*~>0 z&?mH`=Osi>b_r4Zq;o>#QZ&``+oN4>b`IM7rO6m{cdvVx6P^F5B^2{HvJp*+gwt= zO<2Ek^3)&yx_;ZRe&=BQZe;b_{JHfzXI%Y`)Q3ASZ=d}g!z>jnZA78m-xvy|^Y7;& zsyv(Ln6;)0%4v7!du!Sd#Wci)s9&VA*>(lo`#bIUfB)S0+gSV?F@Bu4F~0$bh>riD zQfQ#GY^#Spn7!D(H_X8LGYCA2j z*Xz+N-wf$lH7L79!1AxnTY)usi(k!TI2?yhC@&~e>E1&+gK(351|eYg)Cn(ZGUG{@NI1pH!AMmfq4+Pidmy4${&E+7iwCf~CT@1?e%HzsgN~>~5B4}$b z(_V@$WrHi2{xYSJ2yQC3{RQ&`_#k?yHzmrWQHlaja%1Do-VN^f97yXMy=c_j!+HgYTfQYV`HO~c?TJ9z#5|ZmWvb~3 z1kER!{DC0(JPu7k@(aKqhjh#x<;a}#oaaJDm$nTS4LQ!KOn&F!JQ{!aypi!pnc>O? z{QfPA=Yba(r}e`@hE+UBe_il02fydwISvlE)-zQ`N3WI8(fOlvbUxD2h9l@`1EZt! zk&eE@=&0z>(FVf%4SFogry<>!gv_i8q@)7U#hFMKLwQR+BX23EyA;)mt$c>^uyU^1 zNHq1$&!MR=ife0024OI0+sh#uQW_I7SDcdQAe{{%4V;-DkPG?c(uRB@ zK)wI_IcKodbfUSnplnqhQBGH$QKl*{EB7aYJf^XS?cwR4q_0dfOFMqB&fl6JR8Pu} z?R*uD*S0?D?s$3JvoDu>2C$R^SlR(B^#GQB0Bf;a+`v{L{)8{61Of z`i;l(+e@(g_AkKl+e@(gHAi6iIgB@NFOP5_#QEWNvc&kKHL1EJrWfHkAufKUlW_cx z)*L@8$)lUd3vv0xPQvg%TC@I?q=;^^AjH*^Itjo3h~f7O8GgTp@Vmh9JMZH6?TFw1 zKXCE;1^FWEV|ZvCZ2PCO%=yfgquudaGi>LKju*A86o79c(uPvEGuIE%b-fdIJ%-)KT;D*~Cu(fhCu)XLH#66R==zOn+w~jOL#bPs>+jI@ zO2_p|biIwa{t{iUa$K)M*Grk}&(L+JYs_^Ix?bbBUW2Ze zGuQ8+>*G$z9>L=tkdr0Fb ze-E7swRfRz*4$mFP|wxue-Yf%cFNekl!x>&cR~}^>^bZ;oWu7U9c!_tDE+m*VoIpS z^rJ?{Lyp@+=q8ez*XVc{-F)cwFuFFuSPb9C)RWNjh76pPySgF|ee zl=uPJFr%}6D_~c}3b-Q~;i?fMwzCuB*C3bsQ$-YdLAhYa_+v(5{7_ePA%}Q7iEpmG z@7F5^B5&aD&5EH^U%SLvu{SG-f`+vDJwzLsRamZ5lTtEVFc$W#f&uimVsBLBFicW< z#8=P`rX_TJgSifA9T~ErriU{cS*7dD*f+YonkK9B(`=1Yd?#JdB+}Cx_>R(ayRBu$ zLd!$OAJVHZXT_p0S+Rwc#kOJkfsZUD6t!0jiQQ^l15tT_Q^!>-#4wJ0vcC37FT2mE zY&vOxd4`PldRH+@CrzFvLD#8mZTs}D442Wy?tp1^{J6`Gf%Dke!r5F4==yA-h1VNq zOD&?_Ia_Iw^?9>BEvkOPY+s94KYezf#jl?~JJb@4Xo#tTEm|b(f!Y3+a76dQ>`03q zi6Ul?wL~LjewgiTDT|Z`V0J}Id89H3v*Rt5k*W~Pu5PIsuHk&cwSs3)O-=1^Ef*M0 zNS-~lwTa;b7aBGc&z?lW7&e5!aGm7aV;FVAbwX%3srdHP)g_0MQfRnd3G7KG>xb)u z6~hgF@1FYlhT(=_e0WmCyQiUH((t5U^>Aa%yJym*#^FYPe7Gr6v8S=IX}HN>J#5A* z_B1t_!)ByuX0kpOYuG5pDw4yK<8^xgFqLZK<}p9i`7RBZsajJa5 z&S4ZMhvmSehvyE9p@v814$E?Lk33Z!Hcf6=lqO-lFtpNevnZMrOJBm`-83wV$ze5~ zczErwTwVLf+F?~~)>rqaQ{~}gGB_+p64+v)V%f3mEtQ!u6 z>L30O{NLOYnyOt;hGCk9CruJ=o-|1wR+M^dbp^khdnQc{4|~0J!*WI9kyD4Ot7~qq zuJ+=yxu<%ne!(9xUfpma;lDYNkcVTj8tnBLemD0drbe;ejl(`)!^6JeK%oAS=kdL{ z$2YZXnBy9U1)<@QwqZ%Ce>jH!n|q|GwxT2!==86h&I3BOrQ&ADe@8+J0sg=XQ zpfT+C*FN&Za3oT5b0iYPXLCHU_5I-Fr! z5nARDX_8+Z`K{c^!sWp$p`S#%A+8_A$&bd#mc+SwLY&E85T~{z&NXfvxfO+=oUFNi zvJ(edWf^jG?|m7LZ#g7;oOMi+dv4~&Z2ZZ{t#1z(weM;G_Pqs+n{n($mPyrcuj|K? zU!$uxT`@5R3m>S4;Um(@;+ROPJ9N?=E@udIMyQaA9&hjIp~nFH-epcm><^ zfg?)z&&zk$zmuDg5S-lVo8flM?fxTT$A$Bk#-+VIbdt(RK~1QmDX`S2|Cg~dQz@LC z&(RCr4=>uTDJEiMjMZOtWQnT&Z)pj3S{E5g*8EB}Ec=|4n!hk5dOy}_(YP@67)mpX z_2FjPsmFyY91ZcL@GZ<|+wm6}=C6xd_dJ=|sI6u88?%_!koLVit;ELRes)F(agn-3 zDs9g=ug<7#)1Vqm}dCVHFcYdhBEq9G(PO! zh^dFwQkkp*#>N(hvuHioAvt!Zjt}`sw0*tt>;jV46phLd9$k;6d0875e{4sAR%3IE z?A1jD>>EHxK3ZN9UWC4Gqm$k2_F+i0X4ZE0%`!TRDeu4_=jEo8JxtD;mFS#{_>X#G zk~5k^+;cp~b?{|iPT?hovN2^0Y5wWlhLD&Pe-tigs}|52C+*GK_nL6rhjn!6ZKczOB-de)uudI5 zm8$@1D~|ORogB#moygeh*nua#AL>nw`G>-UWc2rQh&HHTu$dY_ku{y14KNyK{Ziit@*Ly;&9)4vcsGlO8dB zapAe~t}p2*DgUZFt~}EnS0Cuk3O-2pE0A7EI9KU5MWukqZ<|{pJ*Ust2lUhR^CCeN zA|Ve%G%rNLK8Wakh(rPqi3TAO3qhnzgGhN8T7>%vnSD$$Y+U%kQYUx&?uw5hhz*wtI+jTtZe6kOMDM&uZ}Mlk&2<5RjcB1h3j zMxS4n_z?0x=Ws-h;PVsY4EIj(I}QDGe7=c(cTey;5&g)v#S7?n*953F}H=oiB0gXlLnAzlXkfHwp@0{bt`<0`gAD_F?@2m-a9`y6! z^K0n0WXX8Hzke2y=`PeQ=y&ska=wjz9(&pg)X%e>L( zJ8|XU!l|cTw|tfVzm{{i{@3z*9^bdT_Vs!!M*QkEUx0%UnYH~@3DKLSGAFjul{aMCP^#K0m{zL&9~2%UCG6{@aVUF z_UvMGSFmf{kTeBK@NX(!h*k@9&JMoZ8Z7kn&yC+Ft)43v~lXdLy;aSzjNpA*V= zAG%E`sqsGit}pq%1-~0gzW)=yt0$y!9o-`2y5anKgJ}|9$Mgm;Lv!|0@31SJPXF-Wu`8 zezGXIbH=Iu?iD@37l>AG&{o@HFT6 zBQo@_tz+NkvTw&5wmcFi>4A+ejY9w+pG;_&qTdQA4++S-z@qOm)Am0lpwAc3rtU3k!MBd zJWq<7j=oA6;BZw|>^+vWbx&vEh_8ft^hnV{s!G5#P zRAV{D#iJEeyDYcsX9FvpaYcSJ%d_;pk7~9@8C%PTjG zubs7-$yVAKwgq(K-QzKo5Ee?)Y5an8uI2=8ETywI+jrI4sj<_>n3~397lmwpR}~Bi zO{ayVM3v~`;Rchmp2IjFCyy@LONF^Be& zu*{;pmt^1HEm2sxs2!$zF-7xbCUO1B&Y!5pgEL@QE|odyzHMDA8roX>hHo4l+{0e8 zTsOwM`2%J^PdRRkFU7eNXP7u&{Y49Nwyw9k?{?}qxiZeZyTrEcq;qr{KPzV;DG!I~ z{P-m2RDL5&uu*^#T0J;63Q(FqPl^k+G@AxJLegx5;1_6ro%FOi!F;u-y}pQNr`OpX zj@ldezll>$HYb(j1(cUOF)ys)+pawXq=ECKqH&nrM#`iIW(`LM^UW|9aP)U+ojX;s z4(5Zn?^C9KejiwmeXR@SZR3J1d)Y2RJgW0qt_!U2gdpSB zK;iW;rMi#t&3H5`41$%x+=Y|yiMb0W;1hEfmOxS(4$}-k?Xwc+4QiiN6YoP{I|q&( z3ppV#izbzhh_&{kE^9TGRkq7Y*b4J*q*CmV$>z`5DAkU)?NHL@m}b!JU)fmG5y>ha z9;R3;!Td8>ufTkzpB_)Mhth@VHd+6@1KTZG(q33IF7C8znbWSi)2=}`9QG%+EB2ZN zA9X1nOsSbDoAr(_;lnh1HDKL~Y4|GfiD~#^_{21PWFh+eEj|_w)9`tahjl~>#-IB4 zf}&zdruEom7#{P!_uHLWALf1UHTVqT^GuBIEr~xps@#JyCMSKzM3g&~xf|t(B|%p7 zfz^9`N5YT&>zBa#^@p7pswL|eK)EB#)18;HgJExCW9n1qlmnGSSF8)~#5z;^|8*Jh zLX2Cqw%^^AfHMQG%>JN?AIcxg}x|5}yzb#|-am?ePg@Q z?w)9;(m=agXIb0t!IEMtCb1Qn^$r#qdmLM_3`1v2<2A{&t*_{KU>#6z3#z6Zg$D z>z%No6He+_}H{2zK&2-|wC`qO&{#jU;Tjah0Qc|m{u8NEd#JTuRzO@xz$b9==utA40AhnQqg zc+gUER{fd1SwVunOxa?xN|W?%s4f`)d)_p#8VbExM0kC(%gHC2^qqx1FP_(fKE>Xg zh$)EjVx`w=SkJ!VSVCn%f5Qfrr^W0LV4mW6z2cXxhO?Zs)+uE1D=9t66^y?tb1<#5 zowP1g)Ub%(8}VDk@AnZ`SOU$xs*dSI%4+)SH}$q@LL{q6AVo-v{AA($Ui0r({br{| zn-w)CfK`8v^L?ONEyM5RmfjqX-~8_rYB>){9${_2GD)SIJ|oW;C0HS}_9g|0TjHxd zeRCRmV=`J+n z`wIH8=3gkrI%a)jG=`#AWEDSTc3_Mq(>E?gxhd!s+;#oOHL}*c1-!nj4_m=Awb$xt z>doQ%pzmU(uXl29&M(3W|6`fH1yeBWhM8xu83B<~jWxHWm-e0p;>tM;aKJ(uk z*Fp*A431lOuQ#r)9?)t#>yt}r2J}Q{a2!4@XX_bRK?kGlnK0ofD$_IJ91vFA z<`Du{QtOSUn|PLX=^a}%mO3rF>>p}z?mw2q`G@(q@Cje+pA0km{9?g4VSYC&qu0^A zCQLS)<*V1}`U(MBBccxNc|=dCo7#4G%&tM^>)GSarSm5C>?5RB)IMWwUOc8%P zh3N_wjm5JzW64Q}tQ`A_^fpP$lION1rwF$skAAOi`ulac(er<#$3btlUKclNUo*$# zk!$G|Vtk6NBzN>dd2*2J@C<3McPTRory^Et3D1)e^Hz12d3$-l(;AP z)x49cFr-PX^z6(0CRyli^rbb@W3R-vR2*K`?C`S9+~if|gz9y@KHVlkx{g-qJyx1NI1 zoIa1|h!L&zJ_Po{8Dc9NjERfMc! zK-Np^k`2J}4I!9jsn|cVXERk-C47)J~{?@SEty zR?@G11K*qM_b#mKhfck)hu@k_b=$!>#@TM<FbTt6M?!D-oKtjmFj;%py9wX|f{X z*@@+^ZQbGVhRLs-@g?LhYth$aKC)NMY?mNHcA|tx89+q!OiU-MpF=L!F|Na0j-$4? z4*W4E4W0b=xT!D05Gu7M`a~$?4)8~*)s&LDj}gG93CM&P2bCU=1WYj*hZx5}qxKb8T$}W9ll6jahfE zoyP1sM>bncdfHq<{xUyg`l zr@an8Bus=;2MoewP4A9#KRXWRueb*Fu%yPlX@sO^58;r$43n6f?c14s#HS^6dF<$A zOgE3do|6TxPU%<^fI7r4*OZ^aaE!8`n@-J(rZ+2+6zuA>Og);H&oQ%uZs2?hP0Jz zwZ|xUah3>yQFuqAUP&nLXiZ8Iyy1fJ!2ANUmG2EVDRJ)XP@Heb7E{lp>u{D>?JF2R zZz~|z4Y4(MB&)VjbI&3ZcAuw`wKtRvkBcEmzPv_YPi-Sq-w+o5)6b zBKT!K8uGm5yPbH!XPA~T?=ANKZSV*5Q2o10Y6gX8C$aIfO8LVkdChF1cZJ!f8-&*< zMd8_FFR>_g5a@fz_zJ#JFT57WK@GZn{pc~b^fF!8@egI+fBj z-_u!48r`2^?bhSh-~3VTr}sT_nDVG)+=|W{460j^i+gdNT@bKuY9wCO3U$p=?loq3qwNJTVP>An>1) zYDXx&gZTc7pIorQejhRxdG7~rfS%`L4~($4C&23;dBMpyK-e_%4b0oGATs!idOOSe z2`F|Sn)cb@u*W`ip|#OjJ-ThiJ$+$g85#?8mXh|gE?RNXtS5|%HeO^sF_%u;sBG5P zK#ygJdvt$uzP8aPB8nDm6wOX>bzj9?Np>pLiw%t%mmW4Qhm3tV4!u0-#D>^dv`-7V zw(oUqJ3K<#g50nm@DB?i0iaZmlj!RA949@;aUyAAP#$04FS!0f$vPkDVH8vCYw0HQ zX*BDJ&ta&oFfkq9SUMb~6XgycJ}lg+{geFovHWbUUh>zS@%J3?SYD3VN~Cdkh~uh@ zT4JqxFM4U3#FJj&I4`CvQ2uvmp>gd>WxLEM8aw9Gtpiu^MeTl_Y?p?3yZr&i&YB|Zin?KsdIE$B3#Tx7-~LG@Py1(c5^6WH0X2iHKw~aL+Sasf)8JLc|Jntb zqfSdx8L)nbF@!OcPBXpW_2kM88D}tGhBni*mzil(AS-$STmP^rXKAHac+P1*u|ywn zI;%rk$f6vOjTWQgz@r0XZ4gkeBhNZ_*@pOyIBhEKXt4mi5eh-^>4 zkCMlqmyl(f2$PEXm{g>12nqU1{Pl-~5a=2Fk7dvq-6Pd&Re8WO3U z$Lc$e)t9h=$Zl_~na?>EGsoP@*-nM&8FPs<7iRfVrl@u*Q$;f7E5U_$>z)9@OrI>_98}a zqdm5Chk~OspUw^iN;Q?i_1dAMOKzQgJIwGDwJzbQ&D6#o|!9288Tw6*E30} zsTJ7np?}nu@GbyZcQH>OyRL-wIXXLOJQgAQsd_Y%Zw1}s#1%Snc_7TZlecZi4jEc& zmaHL-$_aHHy4hyL(62p)ckU z*wK!$B~_%@lL*^kjODf!RTleda7xYD&nDH!WL*xb@VS^tkCn{UhP!9E8%lLn3b@{D@Xm4Qsf$XD!}#~IQ%ObbBIg@xgmQ(on5EJ|HDWf~ zx?kw8TgB3u!)npN_Q!aoEzFhfTVDa=_N^7W9-CP`RBRcm;M8Li)0WFnA8B|GRQuTa$G$pe*9p1Qy`(>=(J!Cg*o73-K!+uvupLTrR z$YPw`COjyHDFsy0I#e|31J%YdpHY3bkM0AR5G3FO;$B56>+`0eU~(I4moTFDh_#Di?L@3yG$CT` zW@GIny(}wY?T*DzilWlW*>jS_WmaMAnOHjkYbRjsWUSq4yLKya)Y`R+fKo@#JaR== zJ33qVAk~g+{G0c>rKLRt3oyj6eRD~I562R`N4AX4*pT+eF4DRpA6ns_T3I-L(-41I zn6E~fAW7z%*yomW$1bnNkrpa(M1Pr&@@L#vd%=(~$7{d=zKWwg<%7H`o8bez8e~@M zQF7K8|3XP-7ID{+?IzD{KOj``q``2I=ToW}0W)$yR0}!r?}zD&Vs$f)Dgn)9ra*l= z(sw|r60?#5&m^~TsvN~w`!C%lnD#r4HICA3wZ{-V^Bl0^{EyFN1pnK^qbbY2?rTVKO;U@|{_ixRAB?@i709eW%)E@!cNKbMYc`7t`KAd1}W(s2dr+0#Fd zj=5TqG&vX@E0q-MI;3L-W8oL&buQbR##li{$3djymk$JM)ojqA;7}YXDH>v}{~x)~ zUk{TD<@c#WNfC`vu?7aCM5xsWF~v}F9N|@zoy=GarSv;@=HPFK>6_yEKbMM$3MJS@ zZ-HwXILJJuGb;46yHJn{y+nn6P-bEOo~3-$3^`#i&>o{xK+4mM{`l21P~IS0&Rim< zlvB+Hxpgy?#31)Kw)$AjP~#9E4T|soZ8ojmy*1iXv{Hv?M;Mg0sGvWZ-5D!% z4}A5aa$2pM!Bz@yC))tA&y5>o@lJ}vSzKy$86t!F`If0I;1Qx#Z)28OV6!Q`4P2bdVW4NE`S;lL5)hFtfjl1 z%rDz@ciPyi^Bp(7bC_DVl~#!07ct^&R1>w5ZgfFTME7d&l|X4JD_Lq{+)nXTOjE7` zN|#r{uu(Nv&zpdYLAjJ>PF1pRr6P`J z-gg$)#_AB|PMNZ`mZ-2AC@fLp47N(Rh{hv~Xbw$sq+vieon&YYU($IqKws3(SvJ;Y z`H4oWfmT^oBTX|GrVSD058kj_vMGHc)z28CdNIck5N_tRSs1^-v-Ym8f zwj4R;XzF6oZ-qnkv~%&_q%WR6G#z=!YO*(OHQKaJ@;&wcD#mA37?fT~uQ%T6w2;G~ zltBCZjQ1ba7$-CQJP#XQb&AI#Jni%WjHYSu%3J}SC3=w&r%A0i;VuQ%T7T)=ksmm`Na z4^b_vK{+E4ILmK}Iycbq$LY2k^(BRV8fzWpZ<X?6js`20p{n9?36b1tYs6?eHC) zaSoKV&>d-JZrMJHb>LtN2d0efm~~Eo%y`37yDnH zHlrTrn~Ri>RFP~uo=T;4FvUX*Q{(@_^vu36UKHNMUFpP{;{EHru|*^hj>CoWI%V6U>=t<9SDr&VR*uWcw*-Pk59#!UPb;SW<3-eo02mTr|$nP;tKBX zhv^GvHg6ofdRE8SI>Qw@h`Ryw1G-O(M4&qoMX@Hvkh0EFS;6zogm%jUF?!3Dg;*++ z!CRg!m*_Sq!WiX3ZWg#fWi#LMLht;1HR;$(^+4^+}yE*@fam=E5nY!%{+ zDuy$vI0{>Jpvu>stwOY1T|wW~sx*bray6pm>Hz!7Ron4T0B=pU2IJQ-v|OW7_?rDA z+aN1r{MrZUyH-_ND1PmO+^*UH`^weY@wb3CkxgLy#5Rhb=%(}`^qIo>+i$|k>UeS;qh6Zkhw$!?7steLYq8KJD$Bx425DCrbMpzrco?Y zpf3zBW|5yBEc45}codlB2NM1uz2y=bOJTl~XQWJIS}{EAF7uaR>@q*>{|QRHBE>FC z@etUzG?AXKzirX(p6)nFT-wB$o~g>tS?{q00iVSgpP<-)f7^ec9M zAofU@QB;_tu;FO<`H?dQcKIP34PDc4oSyl#1EPLHvv+=lToB8C+QP6bO2_`3A9HRX zEQ`XU&;-0_0xvZqADN6Z@f4hiTTu3xihSWHQ2i-T18qRHr5dPOJI?i9;JvNT48P)r zv~J=Q{s5Qtla0JqmIJNCnUn1tklJ{X{n_s5Rd;G?6mu-Y9Lq7s3d}KtImR)^D$KFE z75Ey=wH9+tV6Fz{T8FtN+vyxGluCR}ki~gXuSCl5m^hB{-H-47W}p!}7=En>Lxm>; zjlV(t8Eh?8p8~WmFev|qzT_5Q=LE60d2TA~e*nuF3fXQ6Q;deNyca~HRO(#_X)si% z6__-o6D=PFw6Z%WzK!u!F$GNORNkkQl{Uz#Nr1xXGY|Y^0r)8#@GT;2lyBvl z;6=5H%T{5_)?&*BYkIuwXFl}RpNLn*Y8jfhhbsg2Y*?aSwouMKk8 zzPf{UQ1Y2hcS&}?4(rRPohKv18_}ty<7E6YxL-g?zwM9!^8O4;`)w}?l4qAF#71V~ z|H_e>F)<5ww$t-L?#}$~Fee=1AhbWcP1r9`c%+Tkh_;K9DtGI^;dsVAn*>UoigT$d zR3I*@MU0!k(Pd!y>)7bw-c%k_{c)Uu5nBh#5oco?hLSkCVz4RtI?mdv5XEtcz7qPP zgiZ3Y>Z}{^h_-lN4USDrIe;k#G35}ZtR+zfIMo|tw;$I+lIsFRi$sw+>Iui=tlvO5 z9%ueA&ip#g{E;kdj6F|#`dmGhy8#9`LJj~&JDA}-#0=LFX5f$-_{qSBreTSvW65V= z_?*3_CWJOD%@Srv0nYmzLjgjFFoO^Z=7iBTHFj^Mo=413Kk@-$h7S(N0iH(WK|vtQ zAcqP$*~SdU=xI;J$7RF}D>1Z4=W?FOAP@IVAe>}9+MWBC~m_akQb zIr644%;2Zk*gR4T%>W-ECzlX2NG)u(TXZC55Cp^wfzQJX8N>|ARE8NsF?w?`L*Yow zAP9&V0^>1*AXKPoE5i(-N_ulK!?q(agCHPg2#jF{L8w+eM~z~J5c_g5!_FfygCNxG z|2<*`uY(x`p_Vw7iy1=f%f$@cM`8v+NbG+aF@xw}2K?rwwo%LwVqY$1Sac+2!0b?^VFn{uP*t2$4I49HiyK*k5C@~RGQXd+|3%C| zDD!JXZyiK2e{$)qgHh>T7c*2ddaFjvpsLmTpGVB#qj<#dI|(zqjFiS>Jp7^@jq#X4 zRki(3A!guNoE0jLTfz*%7`?feK^u=5RCN?H1Z>Qpsue2Yb;1n6N_ulKgLWilP*oQ* za6&j5WSHSl7xG$$87?Fj#0-a8-BnoIdVHg^3X5~B>cN>?n1VbCXKraK@~BqiQ8;s} zDdbOW$e+^4BXH&pB3=k}AaCkK?$ZV8B(igK3{SWLkpG4_Iz33Z0bDJ?DRwT1=u2@! zMCC9yoU?g9=7va8MQ+23m=husz72CyFeeY@rjQG*gb)4-sc!{z;v>HW(7>3 z^v00G)N#n6bsTcQ+1`s^UWObnXWA*zk-n(}`wwDCgCX0k7Lh}+1UU!-AqOlYJGl}g ziq1G#fguMhHAy*xo@Xg#EPvLA$ie3#hrJ9rpqS%RamHjbTNSOp*~r0Of7^@m8_j1L zDEkr|AqNVpa-BeXgh~Efm7glG+4f|?Mh^6myfbT?H z(xpKE%};PiALf(wK+^MZrP|2TJ-yw#ijTf;-S``>(03g7?Tu0X&`CC;Fx**#RwXe{ zuRJp7lwM|QoqzN}QWnegS%vNwSB*SHC0hXr`A%KusU!vzjf=c;$?B2e?y&G<=_r_v zvwGwk= zCY5|-}FP$YX#_bnZi4<_NGe+?f-GgL~;wRD3vLwAg(pQ|uyLLs3+Sk2f`lmg-zy%#WN;iC* z>Gw?&JT~tWIwBaCEO~Jhmt(r3d->TQ@-YrRy;Buihl^xI| zCAkkr@8Bj)L~lO-ct`W|Ymrr$j@hLpzOT>>In zvzSlZrJK-$0DSkm`U=c`M0%jQk9@Pb^U>?7m&;dG7h3jDPCB?t&L#BGxbU*(SU;;S zB-Z!Wd-_C~L9-$)5yQY=ynk@WH>wMnb^Qs$FdXw2kb8MQo@u8HC|&+^we?rW+FI?z zeqQaA{Hoe1eXcrJ_GERg@~LXNizaD~uAr-h&B6n#{r)r|VM8v`;|MZ6j@2_ofEsl- z9#3o%8|oSLVVc`YQQlfMRt;^a*PE-`U!9w`zj|-7U~XW#t5NZM>yla11wouGm?YQm z+v=SC+v>e-_#L$_rc08D`m$Uz`LlfX7W>yQT|E=l0>M3brw}9S*Uc2X^%N33J7%nF z3ezjm{M?RN!CwLUb&IHqn`&lcD#(mT8GNB`4jF&tGQrbVxmi(#O-pC=s$|B=&;r_H z%BZ`m7R4b${rSBudzYYZ(t2jcvz=+K3`6>`EXz-}3=4uVEQ;cj$vp_|Nz+MUdORD_(GxhD*o`8sYl`m+Ufq$_pe34@6zplteo0&+TP zK|cmsTM7PcK|SvUgy{>Puo$C?%OosAE;?Bbh&d+FhLj347gdjKR9e}6$%lco4n2{m z%=MnIbfVR%(U+z*Ucei%&{`9MP-JLRt9Ofl^83tWV{SU%_=U1XBFf6>(d$jpVhyD{k@R+yQYv| zB~K>N>opZ^SrwmbvubThWm{F{Cs$fCYR^!%@S$Jraq+Z*VxKS+_@{G59ryOMJoGW3iIq5-~DdDo1ZCErn+_ zc3VkFDaMz&s%m>AQqmEDZ9W<;>4*}#9ddWXNMKk{&0#8AdkfnIp`=3~(lBs(kQ%(* zvV`rHRnlP*eK;7DhfPzwJs32%2ZJRYK@u7kWMf!TeS7QNlFG2EYQu&h?%lIpRZBWl z;)hZ9!5Y{0&f6}EC9s)=!=&1!WvH`tJ;x8B62`oW3`>G&HQGw0Y?auwN*&e|x+iO$ zW$TraHP!Z4`GyVMzvoI@t5k;rnrNM7hbn`^W{BQqngQ#->~LjZ*b4h^vjBh0N*}at zMj{Haqm_|iN~3!wGi-=eio+!zH(&?`TTR;nGqZVLDt=!bTYCkpSDUp1`o8l%yMy zVGZgCg-Z8)b2uCpZVQJ)FphLM8ZEso8a0PwG2ymYEQ+2AYr=q4hCn(jLGADhzK(K1 z?kE$29VJ4fLkGSoECf1Yf{6BXv7#|t@P<%nb}Q3;@ttw}bGsJ0eW z5f-c2_C@t!AMD&6wh{Hie96`q>|itib4;!CZ8HipE0__GukA2ED9d4vfzdGZ-9itg zH3tDwF+@6)kkp}t)DB-r?=V9Cj$kNY^>zsGMGl!AGz7gJ=Ra`239$7>{YiH>K|49v ztIH(8CxnC}<<;E0$`SI8+d7sonvs>Fqyf*{66p}PY+3HF5U*tslOy7|bxUYM+2h=@ zQ_z-1I+j?OdSJ}0)_SR$Sc~f;)udMdE=xRyG$vJE|5+hvy#B3+)z9w;J)52X3yjzO z3mA`e%hoU$;|#`X24g9Mv6R=@o3_U5{MNsK%hMBWW&7#niwcR~&XNd5=ableIs-U{ zdXOuiMYE1rb@k?SY|%W<uKgXhgY!)`TUG*W&Bsi)7qy6JR`X zTA??<$#Fkb<{=gm+L#u-g}o7-R_Kioc5?>~$qj9XS#N}Yvo~@|s*j-MOigQ6gx=I1 z)*B`z(M*`>hT|Ne52|k#^@U+=?D3xal4pC!XOZi zcWX`)s}1u;#_Eoevx=!>8qXdqp)hJzqE(FRBTI1Bz-Uo`WDSfK zh0$6AqeWq~*1%{{y~qNGjTTKwvm^P_4|di>*=S9M(V{R~6t&9PXi;WKlL@=$6P~P( za`PyWMRq!|4zVwaI{WLm#yGr5_y#gT%j*8xMy`vG{Hfydr|ACyy;C<@Hfd~(lUcCe z&yvt`IHD!n{DKL5d)1-}`C(XB&x?h{Q;F4xmW%JR$kW(cq?Hy(5uC#Q{8TS8kFTSZ zRERH$NLl%N9kXr}JSuzSS|q4NewNkJ#!A&dEibcLYS?>()grN4q@&bAm}KJZ*Hc&@ zL3V^*ZxV3lZgY3;Hl!P{a|@!6jLVL@Vw;vCFM$4`kQcxh7np0Q1iy*SFJ*{dGT9nb zSQ|Kw7}u>?)QOcs|AjS7azi>v{9J#Xvi9&fE%O;dIPe~>p$0vx7R=N7Wo(D1%Gh3; zh*V9+ci6`YnKk_)&;@gXub(ud!T&r6`y)_9q>mBdV7$qq>>cIxbTmQ^u4@9x0rL@( z{*cG6Z2~zZLjJif{WkoKr~g<;M74Tmt)a09XB@xkTwVwLa_wlbgxSn@CiVqAd~xh* zs7HOZ9rI?360_^1_)Xs7%!c)i(x{B@YQqe)QrWST#s3k7XHL$*{|LULYH(uXpWupxCSY|3bnoBlWqdAC$CZx!+ukg+Wp^{RYD zIF5d$<2ve7omlgArmG9{M54l`J3jr5B@X6J@(l=sX8k#6?bs*O%;}Skozo}R&dI_q zgnDC}nT-zD_|sh9F0?h>i@JoUKZto&GK)x_M`ib=O9-t?pB5$FS-j59v~<`fP^Y+I zae(xZ*X#Qfeg?gmX_t0muEaUMDKG{FYmP#%&4#`%YMGEa{5H*TxZDd8C^&}GpgsLij*QKBg^qNycBqoqXD%895~Fqx6vIs4{q-}e;WIp0i1 zeY$|RGy8qaj>D$~n|)(rEZ`D&W9ZM-5%XJL3I5AKp0|TE5vByK{DL zkJ&w-VUm%jAh(QZ&)>0LNQd`bxnAPA7yB}Y-!)@yjprr?<|b8M?w0Y~c(-g2ndLU! z+`Z{Y)L=U9S9&EDkC$j+B@(PeB5SB5W=POl+KL%;tOTG2n?mM_P8HXIHHcv#2JMF5xWVznVEN0K9&`Ap-!=GN58n}rm>4zARxUUN zaeWtw8s06;E^qdO?yW|sFL1He9F$4JZ*{N!5aRxyi4{bAJmA%8W=(Z0N7OI<^Mp6} zJzSyXy#8beOJVNfeiVH-3_t%KHJ&o3e|S{53>U6oGt6Mae)o2$Ditg(O&RZ(7uOPgfcQ2N}*fS#1lOWnz{*jLt&>}x-x?bitw5Y$M zz4TP~mXky2cW=jyk*8f~4fL`K>IblvA{Wa02j_P9m`Rj?XFSTA8*;2^8*L0c!u;`63)VSWlbdBGeQ3JnG-Rt{R zUf=bGmkg59x8Uey&N=fz4coX1&(ayL?tp#jmsZs8XxEai;UZ1RgskcTBbMsulJhOzWkXJb*U{Tf0h^7YRyAg9m;5=gzrnj zX;-fMPu!PGGAfiYAAS1;stT5f@ik(j0u43`A%btHEpv#a;ZRz}FT&8MR90kd7-m*l z)V0zIe}=VTS&_A&g&I<;Ju5AXxHrGBmZ6l!b}bEdt&O8vnZ|TnnYAHWHtxH~vo?%; zhP7eYVb+FGW^G7aYs2VgSR0m&TN?&oFMCc4p_Sv-01e_(b0Fwh8?v&o0MlFv2#_-x zU^*((Tpg8nEN`y~GzUBzEy8WIuBA^*Azv8R8Wm}q)d;(x5(4`4QPUzkw;&%h5q1}U z*O?d_67sCbYVe(W+QjVvKE{0VVB+30Pv(BBxlN&ZKH3!SStA@+V8XD$3Jp%QB<#P+ z&;aY_9Po+KzPr{-`wb(r?}wyni9q@9?s9vT; zeGD&k7ccz`Fa6ZVb+@92>I!=N)$UQF%!~y9FM-QoJl1X(FAW-CcxjB`f)tCccxF_n!^ku9jnPQvMR^OWr%ScBQ?ax%eeRP%d+|yMrw$W z%b5R|d(Zql$Jm{tni#}AVr1LCDX>GpU%<0%TXoSlvTf&cBO5ghFh>s)x{#hrmmPv_ z{o~ZJlv$Nn1-cPg)kZr^^qUG@kJ;fmv-0s@sp~MVx0rKX^df?U9j|vqcvmZq(5s_iQM!*}U zNyjl@%9w2l!y9Qmvn{D`ZA)OdWM*@{3Gjx|PCoYw#%L$Q8wK!Y@u*UvMOB733bzSC zt2CHp^@+jQb<;g|ZcG(|^u~_yp{#lDKnr8`#i71+I3^Xs`5LW8 znuzJIi9{NefG*0!7?tJxNE_0{XPXV7Pr853J{f4DENAv9fUC~V-jS9VP>7xLu0umY zlh)DQnq(6CA$ppn*CDRL>UoSlkCsp-+tHDiL_hT@ly_p z{g@JFDKep-pnhfqD@)Y|fX)8=}#W4`N5^!`uNz{5xADOu%2Tu(Bt z5=`%t-)?askW-XHFkgwu9D+uQP~Pc5z-Cs%aq_tkxE?dL5VS8q`^RGYOIZ7VX^J-% zt-cD>NR5$yZ~fhO$oh*a?DS#r;j55dLT{O{1~<`L>0?t!-NErS7~^ZucjPr#yaMqA z2l;ck}#nJP)ok0altB6>xmEiUC2> zOGvZGbAE?$Nsv=y>q>-mm5704xAQqoD|K@@AVu?BF_Enx==Mk=Dl%?Cj7p4Ks1LAp z5cE6^D7X%SB)v2$_MXUP;GX)X} zx4@jC1~AN$1X7ZW7N>v@Z;HTGh`?2>@qMYEFp7+leipcdlzwB3Ud8-fh!JMXg4U~= z!b^&@oUGP1BTig_IAH=6RbBlk^gkXC;QUX$ebrky{{fi)5Vu1Wf_T0s1c6fxFdF<5 zFV@6FaP#%7D*h6uQk92JC~2;gf&lJjc;PuHFC zYXKsROd-3O?`x|P&oo|Tw&|W1*lH%h23()j4N3Iux-^i_1ZLmEB>8IBrYk_=kX|qk zEC4B2ipu?u@bZfoT-7Yb(PH0RoYOY9Mj4|fG}J**8nR2Wwp9)hF+?Q1|#Z zFz|51!uM~^9smA;ze3`-ll34Y z-CbKq{G+lSF+|z{&mXhrg85OU=+?$tZx*Yep05?vGvrIuT;R(}L6WF>%V2Sx^|;9W z>0;URdsb2Ttav;bGFzKP*3#EmJ#*QO*%L-eb^`gu^6XlmbnARIznMZ#Vw5I;{wL4_ zdLR|(3IMIyNB0VU5I$Y4`erMn=O>6sDgOs%g<&xtwsfY8QwNedV64#;I@E^EOlow5tl} zRRZ?1B%${U`-G3DkVUZC(d!Fv2sLPlTFHG6Da>v}sUnt|)g(gCMJrgVIva$)aXeLy zYIt*%mP9SVwe-<4L{0)#uC3Wb`iyN7u7h3dJdF9kFxEeNd^0~cwhVrfmGys~M1#lt zhNmAORxn}`g8n)p7W|J8f_5jcaaBr0tb%S=TSPntXmC78#01dmWR$F-D`!>`BbcHe zms{tdbwuf&KI4g>6exAdc04~j_ZT(Y)dA zixYe_bH+^|M_=BWU?cyM2)KSU(si`nbO1*p`F5J#7f~5dcP~j13zX0 zKQ@;jH#Sb?R{P&39v3!#nwbLXr@Q>vEToIdF$C8odImPxP8pFh#H!V3oWv>6NbR0& zpF0_8LNJy?h&17d-D9TrV_(gfSXS%FRJ2 z738$?O(tzXsSwag1yds-pqGD#Qt-U*d}1_*%E)LasWpe7RH&Mj`h?Lfie98NCKS+xcizWPD(fpJq~z3t^|3l+b(VbM$rk;S{ozS=>{A zOJyFE(Q=M@(t^fwYvmXl`+9CyhO$#7KqX=nxu|f#ed{_9t4m3*Fdg>&Z_@&kiLScayA?+7%$nx08RUM+F7W22<=wR$!8K~{~*{(;x8!&>H(sI1%~+{K^!+FUcPt=rrR0@j?$fNAPt5RNOZs$v+jK2_Mb7P8B(4_>-dgcrygkyH4il8N zr|BvE;h42BpLzex?Ml=)4Gv*Qrtcf+xTD8gColab~{7tl*&Z9ntA7=R784t0DI4ebj5A|Z+oly>RYNcvYcT`#WBA^tD z1W`+o8w6nNi53QF%mTU^0~%d|G<7MAepG09_ldtDM1T)~`597ZnN%Z|THZJ^JVkF$ zNR23y2Y?#sPoO;D(iV{>p|<0DJ^sHGBUqunMByZIGRlNfgor3Fpe_bGzn=BzZ!Yuh zR7%{lYnh#0huPV+?4DhRJ$u(;4s9NuU5AMjn#fal=f8bZ$Rh;3KBdHehXsnFh+w=7)X&s_M~j=!hNFt-Uu&^<8m_pvHR{NUG22B&<(eZ) z7m}3kpCY|gQ^SN#rVr4U=$-T_`Y?-GMsEx#B&GaWv`X@s^8z2KDSDn9)yhwF?=0Omw^>EMMxQn)o|Z@eqnA|(pUfNAuv)qh zqX-R}cQ026zx$p_ zDR?)5FmHISb3vswgRW@%`~!JTFwMA*IU2%Yl#2Y4Y&$ z7><`B?1MF$Sc-TF&&?v>rC91&eHVK`I1BI+z6fWH%CHa0u%pSxh|MzWO>$Y0%s{!! zpkOMK8#>Y7NEz9;0`@@#N-4+4Xicvv<=#ySMSFLKl?tXZ%)9`3({i$JCG3L~O3`Dq zW(uWfMUkXIQPRMD5K`eu9=QZhz$(b7c8tknjt2B-gYwP3e*V;~jopZNk_zsH8tjFa z?8{zL8_~DaHf$TaqtlqjYVVFNN$1f{x@ro!leqTa8tiIXjb{(8As?Nt<;OneLhhCWeBKN__Zdj6|=pj?f0*@6HH;ewiaBj3$OtSq? zWIhQ|3jk||{PSQQoF#w*cMeyI>2W)He$SQ)}h6Ls$~wz`Gon3oWZW zdN8V7)Ae(kudd#30`{NDu>Twj`_ClUe`;xONexXY-w|*%;x1$oubzXib9?GhDg~ck zLwZLwDL=A#Uv|BOe@WHI<^z%>0cw+-ms}U1k`<(-fa4438JfS6P-BgDVL!!N8)y9f zFbr$=yFe`I&6-llFj%DMDXforw}%*uZu|`9O{B$sJcC(FpJwu~AJ5?2GZ=%N!5Hot z%wpe-6VG5C1$p?<4EpauET)mEqyZAVZg|iT!#VnTLsGL`@*CO zU{swE;PB4@4qsi#ID9|p8UYSp<@yXAu0Dew%5!esFZU77&Ce!%1bF!S#=Xh;U2k$c zYV*RyZAISX?iD?6ayvj8ib|-_Q0Ux0E4Sk{BIu(q4Xz(Lf;ut}F|0TaV|~D{-+h}x zE@I~)em1vw=0OB2P4A<(3VVbXR;$M<66v|Ih|AX}>pV7@XCu?<+Q{ext-5s4s3$~rN`rAR*(%#c}o#;HYsGj(+?Z3 zz^zPiMqS%s;a5r2r`C(?kn2ft9FJtLB{0vOX^fhX%(Ledq>4>qoSZDFu^?=Y3MdG;a?_C3I>uCEf9 z)pIqxFY%AR$Kd^c>&M>%@IJrEeLp0!SCHw63#?yPkO?st-0=wjUM4yS@dM}kk>qC* z_(2JErpi#W_aM_L7mcE?|A4Q4~l;W-UhM;8|<9LcIxi{Cx{C zYD$W7?Q|ALB#~RV66Rpj$`GwkZ~V+W6>2{j|NcSI_oeK+S`-J&Vm1JZ$WF$kQALrn z3ikI8Xl*SQTCVC(wxMO3;@VfEPISoxTbQOK?t0HIj4-|UTdKSmlOe8S{T{bz^~zck z)>>1W!OGS_nT7;ISLABCYe@ z#aZmUg~9M&8f(N3tTKE-OPg?iCeu>o(%qY=T!pF$WXkUjY#ut%~d1@EI8 zV7F&$@jyrnNfTpdp}hd~;oyw=Nv!V1f4go<>T5JsNBRJcMo2m|)>n$zBxJ~pga&ob zB2AV|?h(^v5waZ8bojQCY3Kut+tYyv>=Qh7zL)wWtnv4e29A&MF%xL)ka>xWUXAyW zgLt@Xy6?iiFuV(bHsYm-`%(wV$e51+PERq;5%OIH^CFltzf{U>_UoX%xoAni^#0R6 z#3D?ajZ|4mi<=sF{5OxjUXrRP+FP(*j(1u+hp~^8G$iXVrWMBc8hyJ+&3!3ooXTTgQ_IMSRZ^}G&drC0cgH3TNDf-m+5I~mQw`xkP7*(9F}b( z6>{wYmmlEzQPN_Nbt>fPUaG4T@MEN;AJk_`2->Bf{x3$-40S|EM4rX$P`HiCxHSro zDLKBM;94nUwz2qih0OK%D-32nTnMm{3gNt^XsL$&Cj3QZGOV9`htyg0E{t47NOA+l zD{YEYkdtLiN^Zp{SYdK9)m7YO7E+A6id@qFp4x(|24i9UnXSb)Yto;u#wfAtd9;!0 zuqGacH$I!M=RxzXh1{xXX?4 zQ#Tgdg=EL1^hcHq-=a~(QTavKBMXVstG)sf*D5)K)BJHS2f081< zKpXZ&<;>g0%k#L$jJR+^RX*_zkccYCdmz)?Fdy5;Xe~fhiD0M52TFx-rFiSQ_9ia+(t$g^xI;!ZiDECk_YUa%s7bs-1A{NmG{{)&cWPWLZ0J#GK z_dCSth#-D7rT;0Z71Ib9**Y$5V7rq+LY~Y;GG3RoKNSid-Oz z;HS-ePyxUurvbo9)5OH_wkshKzpl!>HSu3(KC(D8hw0KPl-qrA`9MB{$po zmKg(5Ygm$9n@KOWYmac5-6L+ctzW@!)$JeB=o7sDwSM)G z{wXA#NGap}LoDFwPW#tvr)!Iy60RtB+OD+oiEGZUBi-}9%6b};4W&V0JyoEm%D8>( zcwe7~zCs;IDBE(sx?p z%qXNDcST9&i(H7g(Y9Gzn->A((|!DSz=Fs z86nOyh_gqBcxn;EUdy7_@-%>WbkQ@=W;}3tc@`}SI1D5uK3|G+vis`@!}_%Ii)-y6 z^G{0xB>iAW9gp3MYlF>!z-8w{=S60m0H4n=TcabH|qxk zNZrcTDs_2>k&8|uv*6e1-D*3+20JStT${`DiL1{CE_3-7doXd;`AOmk*u!rlCnLti zPt8N3$N|q7@uJ8{aq04M=WM`Ph1Y{VO0PQKA?dd)u}9nh^?YlQz_4kYzG#eIEgle< z|Fbg(@FY+u`YyBYryM2yG?uP1t7JY76YA^w;y|M9==FK>9hO7h-!Zq?B=^p1LdoBOJZ-=Kdt+Htun)LnlA z(7&62Dx5RWdIb9C!Nq6-dAZa{-UO@088GD@=|(#|0d~r0!c87M5RXO={#Ba9`g7Kd zFyXk2d43D&I7fxVTeD1e3__5ix#N#<-JM%*w)?ckTvo0kDgD+`i#oS{-*#^MflaTX z_sF|fYj^i!4O3hH2z*JOQ7JV%&HP?{4S&P_ur|>?ebU&PSSEZIDBaDlCcbC)$lr%` z@n(r-yj2;#+yXfL zeA|(6^UT9=bF56)zP2Od<(V#Ca(e5@7CnvI?OfxXHtg-|N91mJvScT7hmB`6gPm6o znDY!~|1G)lyyus$N4Nv_jVd)kf=9s7P8UZna&h#4i=$s2!%@@4QKb7%c{uvof7@2d zia2lVu<^FLzAj2o@6dVeZX4@F>n|p6ST7WAx7u@Quj5uOQx=MJ=tVALGXSaM3r3q0<}U zzW)ey-SP5tw6Q{-ek*xV(**P~`jAE9QAd%*z7B}D&%DOoK_QlWuR=M^tZ#~yyy z*Yi2(VF-G-nfGv=*7Lc?0M9;P?f>Yc=FnFU_MH5jjrOA9(BW(R0IcyHu*TQ0HGcOI z*Z2;$#?$T^KRW%|;Nr&bT-?|=h8whqzsY#GvE;r(=$A^;$&@;d2`ZVa@^okE{dQdK z3Z($=oX(wq(Fk#!+?~4*a3E7tq8KVh3_@)v=%;#kKYs`P+zI_$$NG8y5&OAw0xi>B zf1RH1p}6)Xv2*=gy^vV)B@=dTXYG&d&P~tSg_hsc);m7&x1uPx-=s4xdDhN~Ggu6n zTcDXujb+N1?~KKp1ZVx@K!f)-wZPL8V^4e7lPNpv_l`Y1IrjCbv8SiUzW&^O%7WxN zXl@(8zt_TFq>D)3is>oun=+)nrCdGEB118okQBsfZdU7HwRi1IK;Bggfi zEVFa0mqVi8J@>}*z=doNy{~pV@#&qtypQN*;>qoW#Qn9K;fbg2!&LI5Z`~c1xsmL> zs#m`^)h8UVBVwF5XFXvzP67U=<=%lhpU;<;(Le1E$hz&FXY;ZS)HCe!=~&7lEH6M@ z2W`7j1dvya2a+S5aNF?{p?P59Q`fj-v8VcTmrCS2HV7=umsM(>4xWAyHG zM-R^q#^G!KH|KaFbdMhqx}ur=KaSk}?#SU?5r@t0I*I%a^`n3)D`;Ec+Epal_m^TM zZ`vML_Lt_C0;fXB`mLHuF~ajbtGgj3t)}2xK6CDXB0J7@yHADv;`BQizh_OcDk6SZ z9|p!_ufIJ;8ouQxolAyor}K83^Se_>NJt5=lZbpLNs`He%OO|r-_8K`@WtA9+}PGB zc?dYV3;j{C`;0q*sxCRVO)-Rq<*=uyVQr1L#&1E+K6=2OCd~HW41iW zZDsG#TZtap%EhCN_e1*6$6I*rVER)_UL&r>e7LM#TLyh_+M5GI9|i~PxV{KEJw_AI{L zJ_B%~yL)Ul{z78yA?>d{Li>+@X8UUo zX@Bhz+kfJS?Jt*MTvb7CMy)m(xe1AJ6EJ34r7M@2G`ykG6uRVRY~0Zt`h@LhkK2yE*Tyx(*K@Ocrn@eu^uGf$ zjkxdO{jI>w0^WqCheAd(Y~`9s0Soc(a&=?n;1_Qg=zYPEfE z^c%5FvnY=OZ7S0h#b{P|o4{2o=)qy|^cyDRy>&v~KOMxpK9YW`kchYb9&iDzx|hov zD+?|6)V||joNa~R+Ao2%|D#%1`*O<9@vcKbyt|K`FjZ?xI6yk*Y^cOs&Z~aOQp8X> zv5sl@6N{S$7?lmRu>G?QFf0}!kHn(nq-mj0bZ!VB11K|RL%yJw1Mn|0I|OtP`kFaA z{ecz2y$`;`rbT1Xxlt^06P78#GVDuqdL$Z|9lsO1b%$+tVb8&Xv%Q+KB@) zTg5nvUj5LPgwHyQQ=au|mMsc2ht8Ex7)wcf3)-U4*0+WSt+y4yG>x@8lent^+C^S=wmf|-C9&CUcQb4EB4~F( z_eH#2ggSQ-Yga$CT@Bjh{nWg6Vbut)uM&1OnTNKjKn=>=@m2**G)bb?9o@;SEBwOJ{ zx+GXr7KxH>H7_EPj(5@$tLo47Fe*v|u?3YC<1e`$%IhCH#(^q^%n$h=t7EZMtCSDe{5^JX>x(vxtH=wUqt{lzX@T zB9^j^)%@$j&Znoa^XZAQl_jGtfGb@oaV2ZuoGEO+6oNWulw^6VWR$L=To(ZK9dQ3s zi5EjdbY*0`r|Zi6%FdD)$z^_FJ9WRb2hE*2$cth_0x_RG6O5uUm>ALV{Mys;^K@FU z-?`-T_HhDgdc>udtiiL}0fPvB?#A$Bf7*jYZNT)B+j{dG&v+daYycDMNA z1o>WLkr((G2KpU#mcL-kh~&_{5chb^j8QGbJh)w zgXVcT=#z9$J$}C$I+Kgs2&v~{s(eq|E0QE$4d`si5yc=hzeZh|!*j_)VOCv#lPG)R zS!*uw62Nc_8-r)8xcmz%uAC)yF0R!Fm)tf`FB?)=I{FtJ6MlAKviir*O&vDI+d6Zt zFWFY=IAH<24`pWNR%?dZOQ+f!)5DZ%Ly4&WLf|%Y{Wmo3SesjZW8;oOO8i5q70I{U zJkU3DC}-y`6)+CK(aYk<0RN=jv(^%3YZCfrgHeGL@tz^>=`$t$p%m*ot8}On>Jza( z5AG!4dO)Ik4jyLbRBx49LOyZp0NyjdY_s>U_x_3|EuMCOkv&^hpWvV$mo>cB2j9T;bW=VCM0rqy%{tls%J@SHjDW zFU9viDe`V9*P|UE2LR%zi{m9{okU({@+L;afHfxm4ydCQwG>DFJ#d_F*g5TW`#A9t z%p*ofTpX&XP-GGB%yYo`pvDF2h@|vA)S8;lglewvrF`efQU6(A315MhArDwQas5-XV0NCup4D4|csBfe<)Hb=MW`K-@?RZ`7(SBE z^qu*%o-)o?@}0Mr-?TaOHzzcMitor^)N&*;WAPkqNDHZZi=0KuhNT)k3rYF^Je4Zn^Lntz`n5x+iY{tbRH zZp(p5cq8>pd@z%ox=C5?-&pC`&&Tn*%(T$&t9_dJ6}}&TwV}*AlN@cxd>2Z2-_~_` zU)NpEzZWu-rw*xZ8{&}p$|Mmm>mO6D@pK$#{2*m z5*L?Uf_!LfI^>)!S)Y+}Ez23FtEAio{l@K*BE{8H%Z3vF^B*&q1SSE`0WH}VEADP^UYx|KL*3!oIEUK; zmX-FbdSpIAl^c3={@z^og^$ihOe>g+`TcL=&r2quMw`Izpwa)N`H1&p?No#LBz2@sWt_7zgX;>kwI8tu5L0&&DY z*jaH%$k9LAmKO1?CM7^{OBA$RV7Yu#A=ebLTyS1{Jv(TY!kb@kr2n;h9 z)9YC__sPzNYbxs$L1OZE#VTP%PZT&jM||6ENCNH%@7j*|7Q16kGTu^$w0CUOOA-jJ zPMg>ZY#{_#;+B?&zE}>uFog7<5A9c<`EtBj*g!g^H|@l;Lz-p8{OeDOgwgtUDxuHD zg(1xeKUS5qF00JNHdmtLl_P#-(A-@sFkhgL;;&FhwDeoVPqDXhz3j-Vg$FbpFyblE zA115(=k*9Ay(sbQ1zJ|HS-lr%j`c(pMt8(A!cI+v+Dmjv)-%4y)S|G-QI`C;ZSIpVEe-|?_TNJ$Bhm496u5qkhLJ7 zPUm|JhwEG`@sQ}Wz7MJIAC~$7q<(N%>W8+|^&v}L!Z>zJ4UzHKcF6nVU5=A^&qiAm zjPHORiFPbRJEE6?y>#l|x6z9*`Xs<~)ac%k;9ovC>X#2~&$kgv7j~GTu^1fKW+UT8 zP?xbm=emqe@;w{%8BJ0l46(>5nD+iy+67~2AB?4)F_!kBn-&qKFuiGWOe-=xL6;!l z%8LT@v&VeT?lIqo{~y5r4{gs*$&)u`jL93HfV?q@@!DKJ6L+x`*$exGK9FJZ#+33t zVa9?&;_AT&d*?flz9jk58&RwUY+g3yIzW-et_ZP9d0vw;L=4*4vrvOKxh_sZBTVdk>c4 z8%#V<=))BXzu(8R?8Mhw@!T(W%7EddDo#aBTZ|9WTUZU{u@wCJoa6q~;XM4oX@lm) z^{8z&Wd42up5V{Y8-%8pjumF!P%6xLSr@Jj`1F?p0Xcc%J>O{D{}EuvVEs*y@5P|+ zAU?lMe8E)c@``-otW}SY8Sgv*Ifm+AMJu`r^wIp+Rj&Z2gi&C0rmMDf;aA~(F!47` zHwP1+;%`{AfEQ1!;pHMavC74$k66BjtGsA_zm0)Rr&~m{DoE267eVf?ARHxGQbC$a z%2;bw+2H5TUiIBOd?hdXbOE35zTD>%OVM{>31F;P0(DlT=V9I~;7zt9hH?{@ar3=M zbb;r>)X*J1B51Ipr{FhBvnsN&2$Tww!82GH@}dUq!1FhuO>9F1u{!++iwrJ??*JY9 zzL?Y49s{l(1i^BMiTmCBLWx92mnMptOAH%j@4U$cuph zq(LwA2oZfz!0}TL=2`}fLgI@!qw345D(_G+rKvYYUZg~@HHqfBfxFuV?NLaPFvWd? z#hQM*`{V&5x47RJG`~_n`m;yu&LJPjHHWWgIaG6)r_Z*JoIdL)>D#-GoIZS5x)=Wu zb)t~goFN3-dtlAeXJm#4=;Z%ZHV(1<@Jhk_KvCq7;B$&QQ_-j_uiJ;!c>$7Z|xJ_e4p%r3ubj_3cU0 zXF})JLr|I^Oq%$iKW!B<%`+mRUv+*~-X77PVP!jam$r94UgnnT3pD1!0o2{ZaYS2u z)U#eDSnWMxr2Pyj+TN|i+Pl?~_A_W{`x$y!dyl_-!nhXe-o}Zim)0#D12x29HWKYA z;g>NhmCr2dO_G%OD>WrOqvp-K;u6T1x5VoOPZKTK?#1i%&KtixwkOoKA19p6_Jq8_ zrIXv4bTXKEb6}nn{{KumGAWepN2ep+!vB-te*^rV%=QD~#v$crX4m|H$AY!YZnL(% zCpxLU+d8(rCo;Jm#uH{BS)}Xv^^4uSy_lEhn*?Ph=H>FpnL9ms1Zou^mpHk-TROHK z_qXx&BC)dyoQH?;3~Wa&e9zr`Y`b&cSN-4R8LnpPyEm4 z=*e;Q*|0?;`YFU(NMBr|woOq0s<_-<5|@5-NPF9sV|#J=JQ>qqr5pPVLl|r^V?2G4 zczBs(YxuW2s*+DbLWY)IvbOfuSo-e~f9?1^@9Ja5nr$eDTBlQg?k}dR&7Vb-=DMix%c#SJRLA z({pH{e+90XSfBQqjb0V5KwZ9#aq*9(QO%2AaD^AUM(guktThb#NJ`^T?|GDjD_{>n zi}>w?ZosJb&V`Nb&g!Q2t_$khomCC(YiRup?nfK*c)F>@ba;8TtG^LwaZ`Ko znO~qt_wp3MUElX)+nsw)1k9QPm^HV(YiD!2GcpU-d?R|TG(NK8Acysw2i&HK8lVRE z;Ux7`%_Ui7FQm@FRHIMG6D#Jd%mA%ys9H#z^QI9mmPm1|ldPc=Iwx+Z0?>a2=8bx9 z-S8Hd(6(t)YbVZ?d0+vSc9x@;(BJEi68v(>gfAz!U+AfEg+?4vuScC=$Qr*>3!K{F<1|7=$D%YtQk`w!*;B-9){k`=x zg`Jw5&0=%M*bO_zN_$Ii!fyy5R*5~9C^|o%Lwc$Nv8O~5drD=oC!&a5ReuxE61%JF zuLAl+95gox0&?I6a_849=o2wQ9qcuZtzi!o$3i|77S+k2dh-) zp4shjVRCs^!AMG%FNml*Ia#GD=6ym)`}&m4kfs%-;p()6tc3YbT#!D zrpDzFD=Wh{>7)fIg@235_-&377gGS)R~Dd0jFTlQF?d8ylex?S(iHIE8pGu^Kj1pb z-82g{a#s5?u^I4rHsJFd;4S91_oydM*at0`8N53{UrR0QT-k~k?A*H9u*7=PUz9T2 zs5enIbW=cTHt|>KBQp#uT(9_HRm?OR6oq61?8e6rJZ)vcH0B4Pd=}bDiBXBx2+z|u z>0j_fL-U2nYTXK=MeCc<1PKYHMf{G#WQ!P+Ev!^dYH9D1TiYGQZg z{6m!hPF|~5Xnz;*jP?=|r<^kL=yum=ofnza5o(Z)Yfzi;0zC8NzwCTtE%Ap+{J@(8 z&~xI)gl5%+?QT8Gu?~RyUr5rOyKFA2PF3C3Z?OrGGR0#uZ+IW9LdS z*ELPYyq$R3+Onf|^RfQGavHAA$|{M9zxesjPsB)U@H-d%nhj}w)2%sbSsPRMTm!rC zI@^5`@w}pz_^p)xB8@(>T8&K#A++?977b5{1sDgxFIGtZWaCgrQo6*?(*K~9^grnr)~J6O&`2s6maG8%11+ZuX%9V*zCpjT zT2q4{e>7QIq3a9w=2Hy0r}11PCGU#ma}~YOv%<0lqCwF)wX)MfI~s+Z?Q%LMv0He+ zjz;ekJ1ZYg@FaWCtirLBi%zsP_q5rEe5Q}YeCr><6E$bfGx5Q$#MHYwj&>$}iJq4E zH$3e{m|n8t^vB`2x{;mB<88jBHDyh9bGez_E^Mr*9{_rgIc?Pxndz9nhngn%K1s%L z;`172mnGba-hw|rgWt{UyoT>3-4F0M^Hxi@+0wquY6X5~9`G}5?L9HO-LgEM#>>Av z$8GwMS88eRu^?}xt$kUvmF36Wf_on1)}M3hPw@P9`?3h+jY7Ft+Y#!&;RkO1j8{L; ze<(ahx2YTM=Q`&+cK2DTUC0C%JE}n&D2qu;FE8&rOJkO2 zGv%I@irw9(+Rk#F+2s{fLug>JYiZtD>9c$C8|*#`vIF(8sJFboI6f)u2c^y`-F7bY z*-nAlokN;U*VF4()7$!iqtPhj#=fGj3*;4g1ZtllYIcvT+dYcU(`#2h+dlCgcPwvp z$MW8>u>`4^!Gm<~0HfzopnEW$V!-Z`fc`b&Et_Rqr(363QygE|wkoq?1F64vGO6DZ zC-w89q<&+7Gz_7quoL=8~IMWTKFhfG|d=HtA)QHUA*Id%01np(iu)FmD(7|0bIasql zt-(8w28&r6)#Gni5Qeg18|*NE57cD%Fr=mE73FBDIhpiOXjcv}teEPS4GVM#Yqt*h zl7KHx-v&D?R+22mc&)saT9Q^%GPk9xWpG)!ZjqNTI=a=Q` z^vL!FrOdt{==xAZe8qe4d`tVlwwF`%?ovy!RGJsQNAIPN(ci45KSN*bAj_^LJ)2AH zl>g3B=gO^ie%Z2tJ72=|2T0G?N^MSq4%IIxAJZ>*v@9-HYn?3{D&q=Zde=|->rJj- zaI`PvF#Q5A-e2GW~&v`jgq7SfzbNNfltx!~Fumdw-te z&QeP{T8{BHaZY^hIVRGtKDSM_<~BmRmsHyo^0rnhcASVlKXMx@Y`kA-$Z<;=9cWfc z|G>l*wt!65d75)YrQLa1l^vHJEbXfQu8nbYyDzP<2S0!Iz%{E4y`dbajv4;9YrFF^ zYxDXvwdh;}^;VFt>z2yx9-$ib7sl*vj3OBsV_|pRe8+V3zjlj6#7&K_$g()mmgW^f z0L~*_69uWRSIX+Qh>)*lV?BP`Xd+L7o-v#)-?z~MJ*8|fwP0_=IoN6&P2mQY<2taH|z_OiT4pF zviW+W-l>b*x%y-5<3z-f<3y&T6h79*=+(HB2(V_IaE;BM!;s^cf01J%j(E@hL!Ld` zKJ+`r##uZD#yM`|S^S~4KS#35eAu%kHi3gVD;C) z>aT^>f2c0`Dgo>l4zv0y(!4SJwv8 zPbS;J3HmY#f0BXtz1Hy4OOSdMZlL2zPYxg;k z=AFQ3UJRf^nuq6scy~m1p_IYTk&*u0^jD1O(nF^KmAku?-Xn@pLSNTpi_nkg^GFE= zMhPD#J^ty?{)45CxYc%~X?8xhY~XvJ_C#jb7z3-vnrUOcDxl6M*xWu8A;SBhv`4$@ z>VR%l;jAL{Yu!)@ds{!d>-iV&WK6Fsa#UQa16-@0a3@pjBVsC}&2_eutas^im-$_W zA&&VyhUd6HIOYr+JvffP&z$f+4hNpCBF__Yc_ySA=OW#BrkHM6HTNB2gLhxu7}b!0 zYEZ~Ev@vxE)!5CcM%S+I!rI9q9J>Jy(FZ&Ek4n)B@zws_GMxgH0I&fg-8;JwZuCj? zqf-33OQaZiuPjBkmmC8Kf&ip^L zy$N6&#nm`IduVrcdbRQ?C(%kyh@4ZF>_jGz_}ERH!*MLH1CC5dlsJb0Avqxg5+Hv0aO$Kznm5epT24K5?7H}_`|wqp%D+cAj{ zCePqXuwHpDohH>}6(1a5PHw#61{(KT7trob{TJLJ@7Wlij>tboF9?yuCtFX<8MCft zpb^#+$Bp?e4fm`KN2kO#;x7g$&3Dc-eUCWtJTGYIqnSXwm`^)#mijQPy>fn^?+*)D z)Xd?`sZ&d_EHUCWW{gg?gT61km&BOXJ@6d&;N}n(nKB|2edW?M+sZcLx2Mp!p!ZPg z-7+ZSkq>OPYm+qv{ryu5V7}#@HHDVTPQU8{tZ6Ig@DFILHq5+wkIb&irGzVYjZ^Cg zxcF2Xz{4|mGBk#3AHHSq@BokNk#BwD9{eWjz(XS(Pc20__R>h#z(xtcvtlL?$MI} zT^pr$ho9LWN1QYJ&O0YY4f+AG$XN_4(3_!*#n8jVK~*;>74D@cs-AfJdB|!2m*KK$r z20t{VZx_e)STV~#lNZwRkH zzuxDLthd&NU9c`@u%kYQuy4a(gk471F_ObOGa87~{xeSd)T@t@xbfB&?tzw=|p4`DI@#t-Q_GJZ(S*zrU9l3j+?xXiE`y1!uTq^GMa z9m+?$jY7+z^<&2qS_T}edsI9j2}-!^deEn&H_=p)CP5ktN1*Y+o<^w=YHXdPHKNw8 zYjKgqjbY~jhV39PJF-sqYD43Dd)641H2_l2K^!ybOeM_KQJ>jLka5_)s7NUj^U_4h zl-J2Im1L|p75w&j-`6moz>c7`=J|0$s_I3Hp9R$6LaNOAt%6Fp=DuAWb*YyDqqhM9k}nJa7V<0LEM{ML-(GwT8ssmS=-wk7cy&? zcRR7`f)Zv1lE`G<@fUgk{=No(=fGbp8RHxSx7z3z)&O1%7^CgsOvc>t9p;mc`-Q8G ztTtfuht?QhWS_9gUK`KZYomJ1wNYPM8-qu#jquT8>zra(#wMdL3E#kIP276;>TrDO z8C;Zy^3PRS>M2GcQL%v+g8Y%OC{Fob#no|W4a$86VSWP`i|xfKrnSX57L|=@5{2a7pOG(2(10BQJKcXO=B)opai%oV#0G( zIC`r&MhCQp-W<>h9%C?G*)I_*S2V1;6OFVm739uZVomHb(1sOromW%P&p+KH`GmY7 z>B>g?jF@cjN(+;yfgO7=^S@^)J2!y=WrZSU%`(C;j@l(Do2$7&>7-Wy6+} zm?&0h6@`{}1{x=Up55O@tkfyKh_Dq_C&oJ7y9M;4hHP}R5qDd4n*oY{9)k6}1t`C)s)Et4ZZWd!PPgM!9X@9pVa^g8SbU)2m}4&b?hIJ7_xCvbiP-X><1dOD3sL~w z8<|YyECw}Vq=JYIAKuxyR_BNbpU=|>&0bu2jpWd~FgSljVAt=F+Y+|$F ztPe*9^ip^>Q*9ByA=FQDxZD?6N74wIfbjOVY%v(!ykH^jR%q?>d0s$EG@+5mz71Rf z>0|};>^GITayJa9Vvbw7Fvdq~khXT_ldJ@PIJ|hKETf(Ux^RGw%wAYw_u;NSP@*;? z2=D|;x-QZ_HyQ0`Swp{iiTYViqkfWS8}vTt+;3&~QRjZ!QT!;+8nr((Qto$Cx_CCo zQxob4-RU^zi1GZQalC{PG^!nGopzqltDb8#(@2wfRYl2&?~OH8Xe7-?i3RV|e1fhR zp2oMILV7h^>!?w&6%)nGwt9pd(CAv%*m}`PynL*Z5uUCsn%M!%@kfb;v(xxjeHob( zAWYca7|^`B3xF!VSfRDx&Z5BQV6Oe}MNd9F>ODPs zbvSO0c&|Rw#F4}4f=cJ_3L~TKX7R@OKDe^9D}hpM+yGh@&v@JDIAd3ih%T#77k>@p;+tu2 z8_8&{e z&tB-yx})@G@Bd1M8M%Lqep~vo*Q-zmke5Zs>s1*JFpVeMuN62R`P%+yA3VX6iLZk^ z(7vI?Wx1{}m~C>mp@lGyPAcgk7WWmyBD)Mbj_NT-i=+BYquCV(p1-4p#hbR;zF}m= zT}IaR6{AnsO|_p4VNvaaoZKRJXSr`0PF&TIuy<3~-z>rYCcu8f5wPDtVSf`~&rsO+ z*s$L~VaF^p3UI{h9JuR_4tLsB4Rdk<$SRitgqDeLUk5PXKw+Lle6CalgIRNBUBfUR z8CP)gQQ~Kwew62%?Kp(PXK-gA?g`J$NF}F|Oz_zmT3b;M8=%GTT1pesJd@*qlW@2y z=!y`FJtrBh6XTkevCDE8WpudQTU8X(#P}bN4%^869E>q;=`b#UQ$T&`xB&Ilzd>V_ zswfq}+W^Ca7?ejF=YQNW*N_7I;%M9JiL*Dq->{Ob4ESVOL|78|w-M0UuqbErj_{;y5+H-!wvOd5)a}L0JU%@9-Nxan5~XEc!bqs$?u% z!G0sl-8)L|7-=hDc3c>bD9%K+Js!x1oL`g-$GRre4@M!5zbBzINu>WVeUtL?mOmb= zCfOe3k?-FBoOgfuoOd6W-i?gs8Kkm<;W#&#Djg8kwYs9B#DS#r9j@ zEA6))p!hmWXOD4kCi2Wr+1Znrx^_{qvOOfFS#CM@(l9+2SLw%%*ciw zGP30djcmo^Mz-<^qp#{=BU}BX(O2_`(HDNy81{#D>d>4zR8|LkAA)+yA2<3c9;S6< zs}3Hej`7e#+($xtz*>U-CSj7{9yBuiBZehBX;|VDhUI$Pu%ySJ-x-|U^%12kDECF& z@bBV?_d!iQKH`5sdz)iE!W{9GS@J_hhI`b=cpf$^-$4U2t@0{I&h$uO88uN=A`w;g zWA@-kh?kUdkwnV>tSOZOiBw*$jHs*H;-D`6QGn*4kr5v@6kxxK2H0I85~T|2t>K~G z>9bTD7ugt3B4m_~zO*!dKZbrBOXsgF7$*HoSOyQ=kH(xDK*^%78SJDO{+n?2p{Wl; zeNA4!*^V0V?_Cp4qHv)-5@~jvu=oMEp2v-~Ub!EGp7+|Qy%~uN$I0xV^z+At)@`-D z1}nCSU|jkn-Dh**X|NiN(^g{+XT5>xQ@a)x)omSAi=z5d0M^Kr`AGyV#lv@FKXvYK zd|k93)8X$J8-DBu^ZjT31l*$Cx zwJ$81j+PTY^%KmI-9kC(+I#%1#RQq-=YjwK0%Nm|?{FdHdY{KnEhn8orzi6)vprf` z{Al@kHwJu}RM{3WR|MnH_MTrGlUcl?6QrE$Dj_C~S5_%k3;5(BcSuo4;l#%Vh6b?i z=}z5H3v%t4^bb;KDR)U4T6<2CEPbHWE+HJy%DEZx2Ce*9roL4R-qPe#x1hgEiKyrc62fg-yoe-$Z>#u#kX!tlAq z4F49;Lcn3kk^zVLk1#$PJ?r@U8qD^NlwT3Ykx|sYSk%uuyMgYeKM_WLZIwUL zg>g(V1JSS_>u3vMngfjEE_is!{BmI#@ts#(uB_DRd}3TF=iZ@DXTsC?$2f91f_}c( ztLHwaSKl1b`>$3g3Y1fzoEyrySvfZeyZ=u8l&^w!&_BNNk^9=Qe{txWDB^r#45plW ztCG43BuxH2H%1MaH+9H^bb+^Ryil5-Ofz<_r{jXqmygf+w@%f(nom1j{tD*O z^+2ogwrszf^pBDc_vr#IfcjrwC`jBHb%HP`AD3ww+$_K@q$g)ws z0ay1o_kQ^%rP<4}QDU#{jPicm1O6HDc$>W}8|CFoVj{~%xs#N8X)em_+sE$RnG@e! zT<&=Z@j?%`UIq}AdtbKiz6|xr(;~jvd|tiNji*#%e%@6P*gmg9_y=gN?bUx0%7vfx z-}@={HceM+93xsWSOU!g%)rgCS_2CLg~Zi!XGl2Sza{c}NNL%4mj`N2V&DIke!qoy z0(L#>b%B72*MD=aS-nzo0P4LCDdg60$X!bceNCG-{{`z_Z%ZNH(KI@ragqzRO%0V3 z5(0%m3!pb^C$M@?Ye6N`*qsEPG(C$HA15{_NhEu-IKl9ADo9IK1hfI}(@; zJ1+QCEufVFhWN`h2_)-KXabQJp-1eQp3~QR2xem{_Pl#+IvM2b%$(fhFHSH1t#bc* zr6M$n2xUb%tVp$^Y*C5=-ze-}As!_n-{g(C@2ict<_OlJ;u33deo3P9%UW{! zlC)1GnWrmzW4?{!3i_Mp97nA7!V+r1N>%k@thyM#3EsSOPLd2|ZY#Ug>qh-&s;_M%y^=36NutvF{E+=$WP*1 z21fe|N!3J~taWH^Egbd*c+3BeVFlhcLS-tMCaxDy<8du}lDx&~-Kh^%BJYoI?35qp zWX+|g{5TRfA^~QF4N&TTFc|TFHGug;KqByA{tzGK1PwHQh>w=}s$gk9@mZlC`>e*) zjGQnuHRd|6IwT>d-*!sHPs%ypFSp%`_+IPs$>r_@;<=}hppUVp$Wb{d_izK;MT!yu ztiN|IK=DH0i$lD=9He?iXZ90cSvm0Q(w)Y>E9d84^Rvs5HbhAzfE=;egSk;sNt8;~ z20{YJd5J&FeV6(tMPcppbnWBH-wkU#0c(5{2?gynk5mBEYo(H-@RpHs{vx|gjrc<4 z{Kdm}l`(!b$ZeICg~Ypaf24#!6b_BsWYZ1!gB7im^F#@=x?bNG+(jhu30y2^Jy{f)^H@SN-QjI+BD}^jMi@FLRBhJf?lFj z036B#TUD~7x2WGVD+4k-=pVDXNx5sMJ>C_=5CNu{4wOcpuVk>m zw>&~}6+*%TB>o{!NUR|Rt7+4_$B%}F9|28(gvC#(gwjgh67@i{SVrXgBO=ThaGY}6 zV?bMQ9jD82f#-CXSuPtAHIi!m{Mo&Xb7ptJ4_2It*xO2M%oQ~`)rgs;nY6xu<`l=7 z#TjDri7~p%y%*bG?svZQrse=2^{xj#`j@$jW&CPCiFhBdaUC_8^S$;M0{`l*#nXsZ zDw@&fShZ=dK;(@P;XyUd%NxtRH~rA5U7LeEx}ID_ssTzB{u}rCy>wt}mirudfU^QT{9IziV5VbMtrmJ9nM%$A z$~Ng027eT;FW^daO^pQZ2w3j|L;`~-iR%X-y7%82aRy1eyqy1fshu1@t|BJ%`3ib= zRvpoDnpn(CS=PQg{(HK|z%$<@+)Kc{sr|r*--O?Ox|ci5Gan%=2BCs^#6e%o2yfy3 z0%&NK1e{S;NmwELRN+p-xa0Y-E-SiIMHrvxh&9R1Av(M!DX)vjWkDJ-eOkl?BhbBc zT9G_B5BGpj|H57Hzj1)hMOb5v~9Ss1e5(=T>iL5Hr&%1?!2R<7%#ZcxzNSa>7yb2^ z{xQEchV;9suZ29qK7kg2%*yu-Yt;wFRB{|GDVsU|3hGhFY}+4svzlyLA;rvzf2Ge` zDOXyO=c!M&La!UCw+(ts{A2@WxP2Y|#hu9@=~2CAjAwgQJcs)d zTxrkn$o>5HL8koRu>Jg_*)hLw+c7`3?U>JwnGdmrIQbAiJ~AKTQS5j**FTKDwvUY= z^-tX*&93Wd<){_uwu+E|aX7C#Iq4coobHa6awA&iCx+FFqay>J?yJhHFRypm8557R zeSTbJsh@xb`OHylpP&4%Y@a^r2~Wt?{md85_RHcvHM0C?AgLcR`b1*(yEt=&#G8GJ zVD`C1v)|(~vtG$u#qF$(32df9yu+j0fhuGLkGX>L+Oc4UeHMIlY=dTu`-q;#d3-|y zkNdD9H#)Bv+S1U6S#&%x#TfY*Jx-wi2~JBEGbb74+*o$GS2vKua`^cv*1|Z$NJR*a z^NZ`5kB-}P;+Hw_A--Vl(0t;!egSkIr*{Hp=^m4LQ5-EsonWsUXU)gRN9Yp+ebhPh zG(xWrAK~abTwACoS^Ex$%eq%KQR)v6>mkL&Oe}Dc{6iBFf$K`X77V8 zGxIPpw|KsXr};=0YRao`Z1CD~m^r$xv7PPMPQh(5e;2C=wQ}@o=u_&oqR~}6Ug?RQ zUu$iGUb6V1rF~E+|XDt>3}iXpFQm*&&_9BAz` zBhA+nyTwwDhGG1{(j~uBkPy;>=Cn~N-IHSNMBBZb7>bLCf${(8DSFM!888;o(|CFl zMnMMYa(GMwbUYlI)_RojVC7$e@?PHBHk3-OpN@AB3 zFauXR{0=32-UiVt#JCNB*X?l4dTN)06?_^zU+(3(?2ykKc}@&*2yueNO&&)YOJ3Mz zNAQstN!5h8RHC3?ok!2ApviFEq2)*u$B}ev#6clAcRfOv8uu@wHcpS+y=4MjJe>6^imR^ z3=nNr-P-HNcM1~UDN0-K4;btio5dO)-G!nb$9x3crCTr01NpT@4Od*F@t5iQ1j zS~aBpwcCqXAYB`4hxAQ+mhLlVmU%$~`IBtjnJ^29_cnBUt$P|w>pQbdJBEuCkv^?T zOBKYbika5>7*L$!7F|p{GG=3ryJOy;1jFP)Z$a-^ityzVcPt&?Fdo20l9v1gcvGb& z7ZQ60nq+Hjor&kemy_(RGog*yX7)~iesA2&?wty~s5i5BO*6CiOgH;(pJC<`wew7m zPe=(gI>1J`O74~ive4Hoj92!asb=;LD18T%zHNqyQbv=<$ESE&dY?R196uaBG8N`hWLk%weAe09^vZ<=Wq3HC**4!-~EWUt>l{2la` zjgg#Ocj2LWvgS~gO>^%ecxGB4j}r6&kjU%w9zFZVksop7Hyo9pnN1FH3wcXSI#gwC zjGNY`debTf0#&2L=}?H}m} z;^d_MD2S5D?MqdX)n}PS5<&SHu4kKpG3@R_wPSamX9h;eZ=%f)S$zLtpER`3L-XchBJjp`c$8QZ>pTgkpJj&XhzPoW0MX#d1vUny7VOa+S{&+;GX0_Hpt zT|Pc1)C#F2wv1~P+joulhI*WqC_d&*X&jZW=SW!ZD8cHr&(1nLmdO&^j2zdc#CSiz zF~hBq4SY3}8<|THO5q6^3<51@#+0pLmpJg++-y91m8Ks_{KKX0G_`Ox1}F z8?B({#ZZRd2U5Jt_EpAj#uMjE*vAd*Oju8Axe*o~1)a&eGMcbjD?aCh7>keZBEx>Z z)nx73we$pPQ9o(63VcZ8cf?}ClQo6Ru0mamd7-apDL1n16~<_PCd4gEKL%j^Q4^v1 z(<@EX!$|Krjf0w0a&#Tzm@)IwVqGscv1km^D4f7J>rv{baz8z(X7Nxq@#Cf>ceHwb z(&Wf_hvTRKML@d0$My%obI+(d#rS>gZwTq%!SIMxmuIuO>0Bu&b1R-myjCT(WaNDbR2l zjXt62h;!p3bFXCdw2_H6+rILcXNIFI&52~JlHqt03K>g3O&fh&^C`ati{T#!vi#9-q%8gK1FG9m_B=~-`Ko{=V%(3dBwtYWKy@>U`9$@-Rt95?rf za|G4AljGHi*NS`*X+%GFywT6kHTs2lMpkSwvaZ&{#`I`%-5>4vKabgR-JeSFe@5o- zZE@tf?shwtQV66vKS*^{CK@w;Z+sH_?OkpdVQ%J9%Q6k5>E%>T>g#DYGRx;1#l)!{ zYiK6l06^B4!KVvGJRQ#O>mDIL(D+F5V^x{e^Nq}!1xD{G!?1FuAs6HeH%q_AlN9pd zvO_;-0KS=kZ}UN;USN!r9Refj#vK+dp>dge7aG=mOAPD&#l}<~J*9f@T?BIr`1$jQ z2r{Ps!rF+iqqflUt1ZWmD=q_V_?4XRSIMA{zU3dQl4nQc?^kJ_-UEvac@p;q_XC8@ zMQGV5D@#haTSZ34Y+XVeKe2_zRBkRA%g^uc>&N!Mh`;{zmqqASRFd|e2tXTu~z1$*t zmPq5|s<@JASXPhT21vo;e~a+{Eh_FHi~Pym+x_HmD8JQEn|{5$U+D(wS=z4*c|dl0 z+g(UBOl_yW9?dYyrwST}vR)05o6vI%wG0WP40~Eg$g7Yu<^5YR;_6Z0W|kNS?&Ito zUQSVh)C&c7d8;Xny&+(Y*PR_;Zq)PIx@kFAT}6y5Bl58k&)JGRBN8YJ_WA(xYBoz4 zC8eDI(%k;js3!pDlSA%=Pg|jhnslao#VnELZen!zWa8xb8IH4`Y3T&|scBaGQlP`= zZD%D`(DUjvmPG0#dW~4rln{s(#8Xm?N{=jeJQ@9tl-hLk2&c_2QMqR+(EU!peLU5e zS3h0vcr`m$Q#rbiKu#*Pu%qO29rsye#Td`=t7-p>uZGtF>g9f$*NpU|9eI5u59&0s z+|p4zs0!8))`9ke$BCV%gezy>09*z97JMvHAY0iyVbDTK;QcUFY_j!E2od3E7y@8C84v0j4Cobm1JqzTnocNF95l7ihbe`|^ z^ce5BJX}ti=T5DWNb((#aCgUf?nKLN8P=YD!;+Rm8@+~n4X?V0{IL?0hjvNrOx?&|iM4fjQ%RG>Z2V>scDsMeg<g`8rq9b+30OfBdfbRG|MvgxajPc`Kg~Ywp zJhy?*+4d1f{y-ZDiyDgZAI@l2TVZJY@Lkr3@htW-PqJFSQO+Mabm+X{_b0*o7b~=7 zcsh^gVq`&eL4Onam<4E2vcrgA|Fd2rjvrrETgjg5hd*BhuvHV5e+>7$F5y^iTstPL zxYo!>>kLcY0BdHwF;(1%@5L$-5iLHVbn%%>4=Sk*Pm+kdF=So(h=Tg-9^!GQ-476b zVLzXC-$$&o=Ff`WxPQvAp1nl#nm)Jp+!sTtOl}VZ)F)o7R=3;#y9MqWw1Aq{c9Puz zuV>qz-wgyJp)!TM83-tvtLeW^CzZiNSQ*+*8Y+UJITg#vFM?j-N+Ia7&RZ~R zep#7d4Ry>icwR{6XkK|<#KUZh^MT%OeWS1|G?o>2j>s?4P*DRaW zEP9A0W_LcS#9dfFwuYxOfhP6NCLvxSamjfe|ND2Rz2S0k7&}W5%L(={ewFhU%cf>v z)=lS0@*WR)!|N@TuO}xT$_y=<)eQA(e0Ikp3VL3_oZzlU==|DKuo?*z zSLW%t^c=Zv0X@yNpqOZw^>g~1)r05T%VoTZOGRDuVm1~|X5XQu)`d?vt|Bg$V>Gk# zP-@do6rVa%{?vmJ%P?D|m-Bfu`)+J>O3zk-JE@udH#OQd`er`~PoB&?a#Q2}ahXSN zY~1hfy(&-j8JO9hTVDfw_|Zv*^%mfSe!%?{DUyHS*#(eNNiF)9BBuC3TAlq}jBbCx z{X-HL{GNEMs7ke%HT>^ko?tDkR=^XWBbcKjOY56XV*VeXy)hHo@U=&B-s^jYPBJo{ z{XS37!)lo9@q1V;lRYa5J12*kD%@~Yu;s(u#L3NiEl2Xh=NO%s1bOv_Mn_(A?Dvjc zKCfThq}uPq5j=~&Yq_RLO&;ytRi$?$>!ka^`n65!h;zvJ4Sk-tt_iKcM?SxvK0mUa zJ+z)9`}1hZ>Cchxo=T0?S61JwMwN`!&do=8{vY(YO#dTf%Bk%6Ci#{|GG_VPXnE)S zC(2CpxpjM^njF1vK5|deGy`-e4d)Pbygeu{Y=0;gAr;lVT#xDO|7N&eQw!~D=!0Kt zQ@3duD^0B_uiwSv?%3>BEED7Ago~spiP0VL-@Mwg7<4sG55Ay6F(xq6+-SyLYRr^ zO5pbAUm54cmIgp>v@e(OYPfQxr1kjHs`?+`}{Edroo}iOcj(!n@FL)@;Pp!`DlLv9nD6WS2v@a}t z5G*E6Y)b+?%_pV~4sd9DrdHkzd>313_6Ql1#W5N0>dio(`D**!fSFnQaLgi>S=4`? zRO$J!=Nobu*+~6;gM{=(f{}0q$OPA93Gr^bJMYtsC@U!5{^FYwYXOSz8}XjmpmNPVwh`Mt4J&7 zkmQNzkN6_7wk$WTi}Ge_)w6(qa|RU}+X>%2L9#pZrp~=jaWg{RSM!PE2NeM$U`NQV zahdb8rj|-IOe5C$Cz{rd)6A6unK6{u17mA#KiRanA50(5S>*ZY6SyJOgEl&X9@2zb z>vvNRX+n1cV%2$dV2~s65B+2UHyQYEJWlJp;8YXqYk)7YwPaKw&72?FJIzFx&<7$) z12zJfyTiZ5rqJso=64K=QX8r>s$4J*LR z?mV6L+1k+uZ76oXpF52g;mcypx>M2XqmxA%`op12FW{=4#Jw>!Gbw8}yZj_GX)Vlf%B7H% zE;0lC?v5SIkfZwtoMC49A==kr{~CJMK5>R=k#p#J#<)K3`$D{r6cS6Dqe4;tX&dqg zm7t}Hqig9Ns{1b03hMn`c)BFZ?MlU5YPIzje;ji%${Oy26&h$Xn2&<-LW@2)Nw7W$ z#Pe!@C5yWwR*t}Z7=x(}?!y>72DtKKCp!&O2G=ijvNKd=L4;7S<0n~Gml+Ws4~`eD zc6OzwMB=raCPZKDrC$|O&&E@cZUR^|e zKk&5U?r||PuDZ(mi>qM__|4u9oX10x`hqr3`W4qa|gaT@}^Ut!1Ro zf3BJ3&NER4Kpojj`9c>tJT{V@af66Kdq&l-m`;o)hfnKNrf3}$NG1W;5lpGo1mv(8 zAwEPJ^$@(9Jt$B)kd0)^V!YE+GrZK-fM)$38H;ZhqLs+X z9Xq9&uO-&nv!)c)F>yo{N7_My%!M znP~}H{F1eN2S^FU#L~f>fVp2jT7rAmX>k(CO#G}q)!0d_iT|vh553HZ+v@YWGPi}& zjaFvg75CDZpDhHfxhowTt`sK6`HK1pZ7Yd&%%}BfX(|bm7hCiCn~PS`uQ7{nn0#-< z6E|5Y!8nl`(kO*UTnm$DN^hItFHBx??j?j=3zkv)icr!mQgmJ19n7?TR$tJ6yF`Vx zk!ky^z9||fRvYwzMi*4(W~hZv!>D1D#H_aEK|6z$v z-rzVc{yO4GrG2Ip+r>D+=(lWf&iwRpmzdYNx$+oSRc(o9nHl9=)AF8YT7hjQI|pc$ zZKqc-6aJm1<+}{zh8?Emy419!FPoO#JYEhg3(Y;C%T$7RiD7$VUX469YvVyVe8SuNjTrqMGhX)S=YJJh7l zAOIS&FoMfQ{ zM)*t)f_&PF*KYuej{hjgSqsiHo8{w(wP1&d>mD=Qwg1@xx&@>E~dcxCJPg| zz7@K@x6t(svVvUD+ZUZd!t!yxu<~|*O={oryElj^Hu@`UP;vJqp{3|{Oi z=;sY?CP7KA=v{CTv<}p)b*mX4XDwhH8S{nU%*d1*1?kMlHb=JVP5@r~ZW~*te?BBf zn>nC~*yEKx&~2bT7sy*spJlS%R}j|oRfPFO564EWDbZ7)&<$HmO*Jwtk5W$7!vD-%MhQc|39a8xQ|FMrr{Y<_{)BtC8__5%~JM6@+8~1!^}2a zU}k6SG_$iWH2c#Rnc3!x&HiIAF|%_nGh^Z>)yyL%+x}oj%=I1MSm$=S04EM~WE(Gq z_tgMj`(PuNZTzySiG7Xd!n3=f)Ng?LXB&6H-2u3}q*H{xE$_tBS=q+TV?I68Tyfmx z=HYwq6LD>*XPIddB^h-Ktda3>&p0oOXkLM_2I*>N_kLQQ$v{KuWrNJK`7G1%;qTbVnbx#tQms~b? z7RdT+WLI)S`W4t-v?n);G83T8qzd4}vG^N~1>Y1cgLXb#qS`VzquMsN`D1|MEZPzg z?|f88+g}-dKN{h#PRx|Za9-_9X>431)4j#q&-KB-Y3dW)vkagp(f9_D@M&>8<(5|W zE|8#qN4ez~5YZK=2}lQ%45B|<%Ql;+Q6OaM zHo%Yo$!gnR1lM|*M4wg9G2<%Cm6p<-9d%r3Ak}H-*fTqU%Z9cCj)0CvdpDlqU|Go* z9(4iCg@W=(S_lG9hn56Ci3uO61+^E}T9`Z5hq|^Z#9NBw7#bVKif*$xd0zcZ19G`! zC<))7KieEC?}Uh57RD^TnDRrwj}X+>MA#LpgMB@^4B`;AyKxK#j$r!<&hgtJWY{K^ z(LsuANU9)Tv|{A6ILIw94r-Y#r^ zFpm#(Ab!#P)9KkTXs@>-#9tmnDI$CK>85q-26H7(W-wnzHYYK6MRkt9rZcbZS<0j5 zI^DVQN?L_{)n_?;AKOr=h(t3gb0}j!Dl^vYpy*4&&E*wtu0mHR`82{38neNL)ME06eQqI9gp9b*(wt*HRr- z7meUg;xesGzjBZ}BB%XuU6#7qJo>vqcsDXWn7`Bx#W2uQfFtXtn8?kLFR3*844MdkjT6lTipCcZG;n)uxGyuP_}C&m3w)Ml}Q zAcwV%c^OgAeqIK@@lJycR#0;r;wO3xP{AZ*(*0CSMaQ5-k_(p zp8SN~rGZ{sci<}j%Am-_Wxp5c+{1i5`5wWN$9n6@leA4Ppc)rX#`vebVe$1?wdBmikp6ln z^ARZvrbQXB?<~M7uM+3Q^+o->Mc2c-uyR=v%bich63THBEyn@v#4?*HzWglN#>r8; z*V?PG2>%Z?uWkmK?v`VI*v4moOGO6MZzMi zLKmz;=>YWrhjo$gF0SBl1!A0{qMm6(oAN1#DuGZnc;PFrm&Ck5kX+jqc?lg&As*?w z6Zp|RfF=6?ONez4u!JC%;HebE60e;f2eHIUB`DmxT?_If#S-rXGTF=Go1qM~#Qq(k zvXqNlM1S4n*A$Ne}G6-PdE&R#fvg%{Gjh6&Y(O(D?2wNPUe ztq$98-xf3&oPl%j+8tjO;;TqV++5Wd^}^G0?Gi2$a&NARw}$wkst{;$jotWmE54Ob zlM1<`N3*-x1}l`NHqh8 zeO8O6YVgUXs<=yQNYzA0{D-KYU8!UXr4^&U!v zl8Q+BHm(IK98>-R(n~k2bhM{9c{g!vkeBM)r+L$)1?UFw{7Zr7yBW_vi&&Qe&vygQ zcLPMTvlj!;-@YZZdfffKx69>mo9cAEh?k=%Q?Dl(?sQEYd=Uq_nu%{_kGD6>e)5;%cp#v z?8AA}dIX>dFep3}3Ll9D01A#l0r>B-p-|*sajzp3B89;h@c9r1ABnsCKHTSjz7!XH z2GS_NtptUIr?4QM3UG{%`AO#Gb>?xn-xa{wc%>UT73QVVg8S7zc&A~^0n$kNegx~{ zler=_@yty)#x2>Kil#47s)IfQ@-a{mzxLM@;xs# zsMG7oInd%(_y+a+PnO`)0owP@HmzT5wXe6r^`*d10N*&oH}BF{h{XZEaaGl+ zS2{>m0Bm#Kg67FlT6-KBe&$)q_O$3e7Kh(u;d@JE7z(t)mmLSArf#5ogkgo#3&0J5 z;Reke&2Yn`)yS2I8xqA0okr&UJ#PKJc zU$P&d+fwZn|Q$FySC1E)M~kmCa*?oU1J{*=S+^YosSd`{8t+R43lv|MmEn0@>nGb>zg z259_U=R6ah->{b50OOlEOg^a`A)iF6E$uopCg{~#W1(f$U{9MByw*e;P6LVmhQ<8+ zf2gzk|A#s!j$Nlb;tc!0S0`Tvby}<1dUF4Fb-u4?R>4{xKeEpMr@o70_x;GT%4ol> zwC%SW$c!s(8&553!gy(tn z`w8rKQT?cmo^MnC(&qS=9`5&2R1dBl>Dx-k=(A@$8O~EepK)c}SZBJ9Jaf6Ve(W=s z!6V9A>Q_z2?`AANm#^AqM;$nv_yl7;JBrPf{~FMmn~#2GoBt1Ze+zAAc+N2fZkU{? zNt=e<$ z*xL~{9qUc~ZZ5M)7Rj_@C^t#{W^Pe`a5um-Nc%>5Z0G}u#xVC#7Nj{MLWzw;-Q2p=JkV#1dSW{FyL;P;J2?P z3t9;GP5hK@a5QHxW~t`6n<}GZ+!+4U3t<#qNjSb-K6_+Q9{nc8%X8|j-5pfJV)J>k z4Pz~hQ&3N?gL!|svZ(&K&5L@FUOAuw*Fz3^@`=bnqrmwdT%6ad26X20u2u{XJgbph zK`^grSnvwSGaJyuhQv?K>*ZKd2#a4j5udk$Msy2&Up>$cx>(3Hm4u|}FlT>Uw8jPZ z@=Ov^PNw%eWsD8RzIc*zt`3&Ib-p>g>{F$(ktKFn8=|oAeU4pG`|s^x@~gRc&r$x4 zyGl9k+kw3P7RFle##Lt&!h97xeQl9OuOIcGW&jf5l`z(cA0=+_qTeB*J`6jlT>H}W z*<-DJy=)Bsc&J1FaY837cDqc5&pFR7;ZFszG96}}bbnuAEri3(c_bZYHn4 zl)$LCVZo*0ItX2AVnp%7m1F#0&Ua2{LTYaJBhQYc@JfBqoxP`Rm znQP~f4HyR)Fkay_nDZ(*BvcVg>;R4bw_MJ};4rBzPWx|7X?A%CW^`j(bzPvI+)DjH zLhf;-@!Ab!3-?f`2Bl{Ytai$|BCfgs#$vMHd7B=ZM&Ip*(T{lR0@fo>)HB)AI_dFx z>#@h{(f;)|@%Ynz(5VhSR&Sm37=4CuUen%LupYH-KKMHAO_1pG`yPJ7?dIaI)O~%| zIE-9nx8rMiu7b96E6A}CAGGs=(@yk<#goE|FMnv?&))EOxcF~l&=YF~w3CJQdmpVY z^vQF(AC9LqmtB{;>DtM(u5Rib2&Hdib$KW(7~dA7@M`~v3z`3XUs&lSGn(c|1fR*f z<7JI=TqHFJ8sI*-#cR-Z&^X# z)3yTe_~tebj746(1%G|^uRk34ZXk8)DI|Fse6h}cD&@-d2l9!#+Xl;gQrJ@o6#OTP z_R=<>RA1Po!IO6vEr(f4ogtI3yxxnx4Cj)V%%aN6uulKF=pvWTgRAH+DnU<%e?Nk6 zeAH5O0$o`$+`ZxTHWtHj^t}XTKN`46U#~ zm1X{lGwo-vDnF*R@=KOOiT_$G!ChPmOXsDF`tr6sL4We-a=>@#4N20mEhr&l3+qU^ zw0`5p0=ve4FNPXsEp>xll26D>?t<}Z8gZ9)0VXU@OK$kr`G#L|0&Nxhf*u-8vpggx zvsJKw<`u;gP;`#uwA=)v1)Ni1obzJ(Y$}uo&Z#g?xrIg<2$Qh#jS=^-(v*8f+ygyT zzUkaU9d2jtWwevaXN2T1v8o@hZ`usBL1HU=KHVcJCt>NUC*YSC!F{s?HA&C5IQMBu zgqmM$l~0I^c$QJ#V!0NYiUiULo^tS%lTFeO6E12I|1SQ*oSozJRZNR@1oiEZ3|wOq zW<^CxDIqj)`P z(zwG5v?saHDMKwJ9~9NECq;VaCz$8n3IY{?XHJAwxg539#s9)6Fc?_FRv`<&nGyN1$y6? zS!CwOxlVmBmm!$jzse|=;W$b3nH!$Hn+X%(2Z=WmtH@X};*j^ekT^V#*6_Pm={w$* znjf)qE05LT+ELJsx8FZv`gspB;mEz0wS2^_UV+T-Of*&>I}jhEU;yq?g7;qzHe ze7qR(!;EDNk~b18$C}HQXRwa)QSwz8v2>8H5`n>l7+1o=cLQOOSV*thsZXT6 zZ@^t2!(-BtEfwNi(Q}_IU1o%A8#kWxwk|PohSJ;=kSmv(5$?tDOL@*^wRXbwmT^{a zRxjFwf!@0;&ghjh5&lJ3`QH|!#EyESe|k=o#*Di}<4DByBAGyfF25`854%2X#~p;c zdfy^kTX@F3n@r{=kjXAWWz#7DV~WacIA#r0>UH*7DV)pBniA$7YjI@lO!tB*X?ogI zB`M(dAjda+DIpD%%81;TU-z(nIz!fc=ymQ{DN*;~HE zY!(%QE0S4BC1QnOB!#k|^Q>9y#F!V4`0IAuO$E z3Cm4hv=eQT?60WbT$o(d7S9d`U}Vrr7zL1e zh}1SW!=@1_s`t7`Ct)@<%po@isM3}8{dIJny!5;YIc5%@nnt>(l# znL^0O96YVJm~1~W%$>xuE6ex~6S*g~eZrF#XRlGT5)4Z<&c;U`akV9io>(J&$b%#F z9ca6~5)o1OzlQs-pptE<{y0{jt3%)o$%PlnncHBrtb7xY%TcWuQ4$ZA5R)a%l zn|tvzYXj{IP?LoFT%hcNUyKL)lS|AAEPi!~p5pl7Dr;r*RAlrt3=l?3^t5(V?klu~ zSvtZn)7wnq7$X3#*LtZ}t{x+Ih6{S~j0DL-nV7)5aoS0?ZmDTa1Q^AHH%5-55g}h$ zs|r>f)FjOG7884-qQLg~0ZXG^!Y;01Jv`6AgOFV&4i~vff5f)Ur05DsC1p6$;BsCb8 z*HG&(>MIyFM#)16=$M)}?m?<-4)-8ag&R%F^y~Vr_@k z3AD~b>q0|y=9=!A)(t%~3*EO33fCYENy66Au-|GLe)YBe6=|u7Sj)fCVUID;(;CoC z%hs+!O@(74rAkHhsjVnyS@Z9-{f%Sfgqj%lRkff$)6q?=fvRMf|8N<`t)4_eJo!uu z6*3j4FKe&{Dga9^*ytiGzaww^T_Vi@9BlcfX|>*Ej_0hld!XiX=*f^Fb%FhR1^lAq z9-!mGPLTXb#^{X#JxLY!OyH~*z-ofHc%Y+&IPx;espz{mwImDZ)TZpR<*nzDW}O8s zyRE{1!ia9|+)hXOFV&dcJV30%JtLm}NshbxN?X1K}?D&nd<=t#8o%Iz%dv&1!1VcxpSlKA8G6an6V#}=B|o*$vbBUeIt0} zy=EW(Z8IzEGyBB-wr{UvznMVw8jKwqA(`BM(^|dH%&hsgX${3!pu_DS%y6hbowF79)}z`RJb$Qz=lIuRhe$NEzwQk| zIF#Y9Zr?2me6->Xm+Mf6i*vo!3vWRxZ(3bLIuuTL?UF+zb)kzuX)gY8EU-llljdZY zn;;ZhCX)+Q)a-w~ARtc;Sg$?;_+10iWzKbdyY<=uGb~M(5&i)ZlO|{xaz%SlAN1b?rXU(~-jxRUg|`KVdx<;cN@R=`zW4+8}GmfEgRM_#S4W!=m&LiV*4^$V*f z0&NKk_bo)Y(1UMXHKQ^vQnzE*xVSe{w=IZ$&BV3_i;4ATM+Nln8(PA4dTW99J;D{# z`((^8DlJo?jVENb=W%A0_2=d7g_f(tQKRT_|U(&f;@^~Q3$ zbW#8Btrm&Dj6Fkn5b+In{}Im`h;`osrdE!4)~;Gl05$@CQ47!hhv@8cboRrp$+C6e zfQda>4(-A0PiC`^XEQRftJ^iDaKePHfjHtoH$jh$x)|WVcOEkl19l8pF8~HS0~pYY z@%g%3ycBW)2F&V`cvr{;7y!Rf*A=~p0~vzfRk{HOu3Z6FhyzieN|jw4wKaT}DeA(q zD2efG^mr0=;q37zMpgXPl#C9e8HLfD1f$u#kK5OpSLH6WR^87zSNqjn1WyPwRii)R zccB(~YVhwkPCUhcKbMF2T38Q%$ws}n{t_I+i$Y@ex+e+Xgb#6oCzE~b3N$7k?!Pnv zCfrB&El{HSh$DaI=$?gRZ##}SXF0Ns-!ZdI2TZHw5*ST4YHb{1H%GD!55Q=Dcbx@K zvJDRcXWa!Qs&E8&ECKpP@*&gy#$FNG#KZ8-Gx&{|Z9Hh&i+K znY3`_JRDcFVn1%O7>**f)u4=ALCc0f=V(%cP z(Vv}o_{8pSh<>X@n^YA?-1{b|X+Pz8}n_8$p-R-$z)i8+5|C12s%QB38P&yTz%GxSD5|wPaSyWCONV(kymf= zG6}6KnB$%_@g7H83k|Q*y!!jaEKkKkxPBY1J#NjFc4OR`Yg%RW=;JkaUj5Tz;=Grd zrHy#Tas&GIyeZ2x4$&Zqi+;JDe8Vn<`8c|QcrBx>+jSz{*X|&4J;==P{O5~7rgVp; zL#?y-1mGK2mqK&y2+P)y=oZBJO&7)!PA$KOT5|H^ru}t7?AqdX-u(&Qjcg6~7LHn@ z%t{vZ-)!APZ2BSR{y+BKJUpuEd>lV_n|o)?%+11(05h2cGGU368G;F*ObBx?tHR6; zIJscSKm?MQW+H;t4G_eowxX!m+E%R#)V6~ALan&(OIvq~B5t3yF0E^=-|~ImbM8zg z3)J@c{`$x7`S3hp?sCq#=e*}V?{?nvz6!u9_%o+M8fhfdpE)auPtNu9PxJ7E`r8yT zIFcRkD~}7<@ZH<<&}wz`n(~60gUcc|q8wdryOd(%8X{k+3b~QEk5}xuFMSB**fsWV zJGAuYd3e6O;gGc!W%sast&zu&{xdVku}`vocf;>2`2B+9VxWA@p|Ahoc+4Sk7GKP5 zAf-G9)Zr?pmtRBn0oD~;HV&lyuT%S#&)O$sJfM;o>XMco@9Q$2Oh}IX#FiZQv29OB zv8<4zPj!=5B%6{R`?1X!`;o0D_{F>q;*`P_+2AcoAJFnf=~pDV_*Gl-gx73)R!=_d zr^Gnn6y|B&kaKaECOc+xcjltbFqzDdT zI3J?);x^)PC656bUiX^Y%_nDE+VWaa5x@J*8ONzWj$Uo000(w8~ zq82;NatVf2uY*VWbFGbuh|5pH!|w@4jFmNpO)@QtpqDCfq4-osBTp}9$zC4~CB2N%y(Nev(39`}~>t)P2um;?C0AyvzI z{bzDC8zb80`{!}b+D+tdk94=dOB!lM_csAP3;CTgw=Xot51>ouXehbP?uW=lO zso$phsARac803vAAHdOurQ2I5mwgD}7&~6z?8O4WaPsjYCt!9K{QY4FVOU9FSV~fR z9szCODAF5$fE3R}NG=py^l2H)(|z@A_`ZPO9ZrURFk$i!B`}sWpO5j%&b@qqF_igY zpwcR*O7aSM?Rwj$QAibwZ2k6*gVr8OFfz@LC-gwNDGCVF{6_52gb{o+fflbwE?W}M z&UO#=@pu#{_M3BaeoMLhJ~)R@(>a_591iGoWb-H+=K?MGx=}W|-*($v{LOkV!F%ZQ zUn-CbK!15vuyi=FQT%C6x1(P4<}tek16sZ{3S%m)>2yyG7+| z$?`*7aqm5HHWp zHx2I(_GrR0Aioi=TN>N9`7vl=EO7A&To&aCX}PVO$?&_z^hC=Sn;d(pud@<~8-*Q=w=4th#KZ=TxY{w^&zL zJ|1aISp6F z@|P1xDarutonNUE>1cKI}18R~18-6HaQC(kh- zsG;q>c7*ocfcEz1+uINA{gJl!!V%j0;}P0>6WTkFZ|?xK_ZDsMcSmUNt$cgsG{=CA z`cIw6u^j6`ZiXLYoXcDQu97N1RUjKK7kL3s!R?8r;R)vX3o9Xbk5|2shcQx<_oW2J zJWZColE_GJC)6@kR~yw@wXIQ{O`RwV~mB#l^4ysv8wv%MZi;2{z7ZS#pKO~I6?-Ry|-z8Y7 z@JaM}N&bEW`(4jJ+gXbG7`%~OBS;&RN|(KYK60H2&?jRNz)K-O?(_9|HRLt&U8@@9 z?-5m=a?^U?IeU=jc=%$F+I3zmrhdyF;wWk?T1GjNhq#IYMedQQuiu`%arV_-mr}1f zyi?VAuOd3*+_yUCBHb^ATP~U=}62HXsP5633Y0^99mfPOy{Xe|5$KG`yN~gq8wMn zur7ZBGt?ITIn2`3@ITb4$RF^D0;A$|1x6LV5K9hdSx=9^zP->X4S>?XevRz!SDKFH za6LhNi-cWr9Q^`99HRgn0S%`)3^LnoDr(*#(pmvjZM~OZ4o{9ox_ilYS3B++%FZw^ z&+|Etwq%Rr2=n1sWzn|pTEFYy_Z)(C3Ees5L8G{j$MZZaVkhdOx52yMTgUnvF|W{D z0dlNA$pHo90sjS#Zxn1~Ph}dOgl!>s*Bg1T^BRxgc{Y*Z0Pp$d6RMzAtEG+n2og>D zNNlD|G1Wu!wbJZPE{4xfks2p^6JEl8GoFJWB|Wtsu*MVcoM;R2M|*m`9mn#d+;*HT z8+4avNXYhuw>N0cT};a53zlRfwln)|<+dB=m&=VO;9W*8w~d)uE`MiX?(W@Le%qZFN1tHOJlx{k+oC8~M?U37)j{e4;1# zlNnCvQ)~>(8yE2W(9`4HGy{6+9OWV-v)*gGEO-5c@?)S>*83B@cZK-JKz7|IJh(qC zK94z;#!Se!(dhXH33$lJjPu1s#-E>?UG8G~|5GI7X4*WS$UA?OlQ=x;Ck=1mxz`uw z{u!jlV(u7%C!SyNcn*a>-F+f@^G)-(oaLVG#VDEonS^baN$W9E?nJ-oFVFZ5)s5Yl z{c6w`)Z?n&x_A_73{KD(%7Agz%bawKJPoA#^=CK_Vm=;WeAhw!S;=8$`@h>K05Ro=iyO{8BJ$O zSP1Lw;8af;seCoA>^yEW>e{07~Bz?nzQ?J1fq>s}aB|8L02`O01A9M>ECImLcL9waR0+-FoK zLXG21j$FrE_92q@0S{ghXY28j0ExqTe0|7ze4VbxIIPDU>e4VZ|1-=*?NmrVktu*L^ zGRkhFE6t8JFA>+;Olmv)2|lrhB(~NruTBfE)3tU&z7@281)#REx+DU z{W^Qb&ftG3^oqg1){&O>Q}_cs9kFr>e+Pp<^vOQT!Qk(p5eO!fN2v$TPw?K6gZ>Rw zX>mV=emdVqqXVE1b&XvBeS63b(04HCBMb^*|1^dD%slL80_+bAf&Bpr`4$x>yuAwHzYgGkkp=(UoJ@gdmo4mnhL)mS+4#btWkap( z*}pqS2aY&LMc--n!nAh6HJ8LwNe$mkvrE{+QXwl%4a|ik8+oj zC-`#yD?XbXPv&?rT5ubs6uGk7fW!7*8zaXg1NI`H;R_@&GJ%yDn=cns0sWf8#Td^6 zeaU$0H?oQTAEp1RxtJbGIk)Zvv^q3`q+8CJh&(!D0=qXA|JX__!a;Uq_6Zr=YzDS7NLZ)lu#|ZArOn<$`i|14w7}&hny|(-5ADH(b~bZQr-@ zCRnk&7kBsW$7@CL;dzbIr)Ps3MqNpFSUh-dQ&f>)bpG>3ohIT_iG-)%Gc5Nr>X%zV zuYXFfOX>Abs8tZK&z<%Dnzz$C{L(!uFT-p`LKz+76ZHSPX{4Ad2-+MK8sGD_xirov zJe@-DObxG~AF7WiqDoXDydA%e<3z7uRc_Fy((#-EW593!kT~p3_DQrKKcLq&^!j4D zw*-9(V4oCvS58L{HK{G?aoV4IXn)S5{jt+{zqie$@v!OBS7ezBKNb@1DO1I&StpF{ z3I1cgM(v&_jP4EIy|M*krmv(vXsNyNl<<7KEwvARUx42S*Iv#Hh%q#X58|$1{yv{7mXykVFHO=Qb~+!pU{l! z9@mU(p3-C?Af$@cb2q3Zl=2mOc~Y!$AU#};e$sWdMCRNDPv0SfZ8O+PfaKfYN{B3n z!|X2iF6;F)7g6unFNyJXSU2Ih`K!m_?+Gov^GVG(SgRZFjMt5KW4g>Kwqmm0b~EO9 z;$nMVJLGc$JSrNw-;>t2Cg@E7p`{;8&@nqZW;GA-mjUhF+x50vjb&5IW<5X2@Qz8! zbWRK}a3?ZaNeLS(jCY~^_a^DBZ`J4_?hL5Y+jT%OZ-Sou8hUaI^kmnQn&Rb%oJE?% z$v9#KXaJ5LGpek&{}TH|V!J_laLRAXe^oHsTtVKU40q_5Z1AF`EX(-UrG4JccIx3w z>R=UYYxaTEZB&ofdm?Y?B8PnbfG(1dc)Y)LY>nOscv>oL_-$B#|7T=_>z!WU_B(Ah zDH}WuugOkABy7h9?es?ef>Dfk`C%hC39z`mCQjr?csyu$KA1VHcVQ>ok989qQEnE) zf5Z7;p4THthOj>K)PBSIjGk7k%?C*MCDpIi){?-Xn*8|23>cqrfR)_`*nr=`9ag}b zLul#uQ6Di})fj(g4B+b?x{vFodG2h0ab@(JQ#q;U&=;+oNaws%HK`W<`vL!b9)8Ya zKb!elQd=0)lkNGQ?KkS5){N*gT5tTcu7#DR_>|_Oo?kgXVq9}3|FmWb&uD6>Hxjl5 zx#8DbE;rDL60Okb_zS4= zlkm8Z+z&Guy+r79W7V5lKyEEE+TYSzOF}wk5cKgOaibq0x4CQWqV$UWS~fVoc_nel zF&VRHvOLiJ{blhXHv5grx3u2K54yafDZHuq28>B&w({JV`J4~TK>PcHRIQ#p1TA@8(9MImU(B9|y_CAO9KEw9nf9T@9himV%BeZAJld7WU z+Ea8xm33_I#Ur#Q>;3Hwp5twPHph2Zb9{+4$9LxEI2Zi^dD8cDbG*-`8xI!g#zP*R zYN}i%i7pyJV$E)1>~reIqi#K5+vdj^b_3n$At87F+`CDQ+t>#sxLk?weD-TR15e%C z{PGLNFQ+dMze%JUjQ@-DYcqFJ_2 zCIR<6zX`3Ik304BBQD*FlV9f5jn(zKaZ*Ij*ssu2uYI0~U4h<2w^!dw9B#~FbsN3v z3!dEd3SoFAml=~L=_ZWEd!6_L)9gR|yoW2sKpqF`(u zp-)d6TWD|m(6pbW@Q>+g6nVP z1ulEcPHQfbJ3{tL{5VS^C!1T?cho8P4MRIh56Ro%-2+{EQ(t6%*E)sO1I(+9*|!|> z5yJ=HD?Q%dD3z0PsgB~|BABz|{j|^LLR*RS7X0dqUE4Q;{KNg=5YDQ+EnFP*&4GTN zcPL+S5$zw)n;jySJRM4!8?AS1(igCIei8dH9p1@nYRRfYOg@#Ve2Q`3W)MQ@@mR{A z`{OMIEnYI2u)HC7h77&L?;seP&rSs3E7kBf75<**hNH2U0gWA@qilvWwoD(6#*WYn zY3$H*%U9&}_n{}^d$G5qe}g1 z6lSq$C@CU_^o~Q5Brzb};5S<5=nEvC`bvcV)==yqn#c=%!B?x+GT-bkd%VlsglegH zvXpTt`x4aEsK>R%t#UDr@EpcCIu2Pf7QwgG_Z({Ro+!pKYW2sXNphxdD#$>F3Vq;t zF~CC~LUZ(tFge*5{Af{>L`8|7D8#%OX*WmD2lvOQ!8v<$vPvd#0-4Gwq>dA%>3Et> z2#>6TXVYMwC&4p}m>&Kj>)nW!Ci0kpS0ZspbrO-LNi-8$%ix%|x%f96P=~2{hD_5< zZzG+9e!n|E9ox_Hb2L@Q82V~oHu6db#!XuTwL;`-cz>`9-%r;)R-_SDU!pu>s=kIa z>$%uax!7XuIA06r=zZP~7qL?k->c{guH{+Y^>PIxB^tidD`?aZ8awu;m=yusyBlLN z2*o1q8J;y8Z3f+QTj*)1Tj*|4i)D?%Sf%B{f@8|XSC7p`CX!;2MeHo+Zs3`vs+_BA zVOPeY+0d7d7qLid9{TPlf@RO5F~^IMdj;i!nBzHLhT(MD*+9wX=)>{Z`4*oQyBYo7 zY0+<~yHJ+O<#BJ$%Tfzrh@t$QZL%fJE^|mqM1dKn=VLzTR~L+^y0rnO&l9;_S^r`le8h&&9k>Qo3j( zs0bBW8)@`AkuRoi`Tl4RDz)~?D%TfzE{SU%y2s^m>k z6EPlGp&JCKEsxYz6_4T5WKYx}?>OXy20#qhfXbf4RmCDA;!L#dRpYtt9`8Q< zRkFeO>aD~nr=D1?XM>AQ-bI{tqE+feS}OeEbXg>FM_9smMDQ!)j_@>o_aT64qDk_Q)(2MUm?N{t zJG$FNTr6Mu(Q*Puj{WhXHQ_r$>uP^b z{GG1pyu-!q3l|smjn%jSYHX!7UZgd`@3VY8Vt%h`Cc(Y+MJJ;Vv=L!nMrjgZUx}IZ zf_`E|psktk^;z)snfUb%;4}fkz8+7)><0tQCB!L)M}tRD1X)>c~Y#bN6; zLp`sU%d?7SzN#rreQFe9_;-MkEZ3I`?Yb#u^bmIyaGuw?IC!%{M>|6sw;G;4=r{O` z9^kJAUfT%zPAAY1lk3!3{78xP$CPVbxJJi39(ZmP?M)KK-QxdR9ujWGScI_JQet+| zvRUz{$Fhq}pI_+LjP|j@*mnY5hbt+s%k2Roy=p^z-mqG4yI{3$Z0es;(2IG%v1kz~ z=7Z#V(avv9Tn`w$Ig<_A7mkGz;nI+u!4Tzhzlhz?Bd&HlIW_Xt}y|%No5&8bMmOtb*TSSg&KcXM0(W54;ZVLVLDMmY%x``WA#1 z%uOc^%e!)PdZIvZFW z%k}i7r|K-`RERq?LRF0I>viLb({$se?YdmN&h|fR1cH`;ZMfg(pq$D9G}lp>TZZx} zagX1KK;3$%8(pXOwvO+v_WCG}2^Nky>AbB2>{_pz!f81=Di+$T2gUJ%Wrru18%&K?nIzvIzm`HR3pZ0kz0T6++BF|H_OA;}#3;7o~aG&QvecL;UT2mGnlYbgOW` z9qu_;Hy^LT=n0qW!=3-Z9-^%udyBms-d>Qy1>M4hdo5g;oyP??#RX(1fAo}W=% zC;?o6+1~wA-PrRJ9p~Of!Ul~}V&Md(s`Pns?=?E|4HsyGrNV|8lQ>Q|hKmDcthKbl z^r+RYkjU;tQY?%js+5g9-tmawav67Bs~e~9)I*N1%8Wa%)77y2bGdAt?Ya(unDA|L z?@#sgtr>+%;iO0@PQuhgp&x3%*OkAyf@B;CdfRBk`@iEO^1Ne9?;Nx`z@XG|jwqj|t$BUGn%B1c zycXtQot2x{MR&lw8mYVVMoxvfRp>gmk#M!!7M>Wg_0Ow~)Y#ZNWAUA!|AU-b|K~(T zd?(ryeAnI#lK977mU1gU=>Hoozkyk7osK@6OMFl^&KKf=2&j_~g5f*i01t^8q0?>`e0=uYWiX}%~Y z`ww_>D}4gcvu@`+wS@pWv)A{1ZHuszk5M$i3CLdzX#hRo&smTDksXJSN2R z;q&IExql{@JTSmcUnOhFDuvnog*05L0!jwi_=#QKDn_RZ&paT{H&=PJx{|wuRY(t z!|z{vEE}|G(Y>O)4O%UTXET;#@mrZsTeSvSTQ%tGd@YGaD@bgnk0kjj&5%Qyp^Vi6 z3fpb=5kW1fn|o0{J^(K^>f z+f$|RTdJCoo??AftiFn@uS?LjU5b5`e<+_Oe;JUV$F1z^7^_aTH>@e9U%#As`?0S( zXarTNV~aHY>_>()PBRvFxdOJ%qSTs~>#~uPx~_CMY=*r?GuA&^*J#7cmiJ)RN1N(s z==9MxZz3+IycfsR`t)mcjSL1DmG%?W8E|$MH9BQtnq4mQ$6c=QczLU;s!}a!IaJuv z=s_)|o_@K`I1zf{f$M|NllbUaZ?sr;hc~cw#FFqksx$l|w20R)WjLU!+;Fxi6L>m| zELx-W#$9xOW$dtfo#Ql7TnKPfz;hq=R& z@mZSD3}yHUq={19OPj|MwBJywPWd5?tOF9*BG4(TXJPcA{!+Jni&7ynTIr44QXLcq zzR&d^&%~7tD^ulY%Q%a+tgvWHO`f)luwaiqedB3t=u(Tev}))Vt|rtes?x~!km$?| z(3mC?%@mVZ(oT>xg*@~!ey@-JySKNaUFprtD!w)S11XNxI4vucQCBwWm{b8k%eO^dBsHga4yFSx{5 z38iXcXHiI6C$Q+R?eYpm(9%uyrh@6Q>ZDSFw2s z(kTU|Tq)y8s{Q3UMU_bE-A)%$i^>k%8$@4J^qy0AoLA%-Dp99|-^kU%8pU3W4GOJs zokdNYi^wzOJMx}?oH_*~gd@G=3gY_S(#-CTBF0}?5Aj|V8mbsgtOtrLFUJ10o&+?} zMrk7MA$_7s0SUf?l>O<{qL=I14s^N(^sWlA6Zh&;>Z^6B(m&Rrq!I0al@-6cdRNqG zM=1s71Z|}5Y5Y`@;ejgvgt2xG$_h{yQz(Em*AHoRO4`;+`9>AUk2um;pMdcqqVjiO zwn}iUBHdY)iJX-0kUvwoa6mTXto*rJ6}}bQrtqP#?1}%a^Nn3j1y?Xf+V1Xj^}{NI zur%a5F!!4Elu>Y-oP}}1D4+OeBR8LfgwaaM|7smlgmdkNI7dS{dooF-I$a@&QHlo9 z5awz~EsCX(*zQ;1>FBP>ifT9QfL(SNw;iy{4r8{%m|<<1_N1oHO*>k(R4H(fg)6&~ znv08NajXH3$^4v^z0Kg}X>5NdEE?Q=E&Mg(CMvYA&TZ!apLd8O0YcF4T5{Dt@vKVj zTs@WdZ7cl7Df2XA?R?G1&e4p%xthFOzI>gn8aRTvda>rS73PL;Q+_iCR>NG)6y|BB zI6udCBu10__l@RSyuheGNlQjMv9KWDd@ggpHkvWL`oj2BjE#_!fp8fcxliyJS%J(s^PW534! zHI(X_@SFa_YDy{h^SG-{cl}4n2jpi_5(zn(4arGT@4Z|XvUi~8QKYWx9?67u&DU3H z>EEr^k{`TTCzr~vp(HNh={FB;MV0qp8;zbgL7Yy#$MC&FHeTwa_`aAVeX9ZAndJzi z!WX(Iz8{c6QoA3qy;M{=`Xv}y`uD3fDj6;7=!zP-uLL{{uRX-!Y4iYI@9(B~?LoZW ze=_2=2k_c66n|F%{&oZYo(%Zg3HaM(;co-Q-!;SHZztey7vOI<;P1%;@V78-Cg$){ zgUQOZAjvdXlFS4St-r|_a*&Eycmm>0ppNL9i?+`&XvptGeF7_4`>jd>L?at3m}cEC z2jQCVTX;)jzz(`DJcmD$%8H%zeEYFoc)tBqjo$lm_v_ewW$u2xHvBpJwc6lw_Qd*z znwRUo2hgz5yMs|*zQ2<7SJ*Fh?!KFTw}pQ9jKh5Qds^;n{*l+-JZtUsSZi=MB5|&a>9ud9e1j{2ObJt~}9%R?XKp!^+!I zu<|m6E3f46D{t#zR^Iu8S00Zm555HBO8Zz4L}$ds|`coeyj80$6(&4q1Bxb&qYJdt92=Juc1b z9xDgv9s}$A80uV|uXA<2PR9}I?1VbI@^yCQ>#WY#u@~rO7<1YGNXnn&6m9T%JVnFvcqu=6 zOMXI(B3Wblg@U#Vu@S})i#mznvVlx5(X*vRMBX2sNcS(?Y?ZuW?OzlT<71Gu4>4K$ zIXA`;zvh6aE z8Zmy@0NEC^!h9mnM8A7>0xUHaWZOqNUE%9d=R2A>rFLagMK->tx?_jKeb+IK?j46P zPYB9|vSmAw*ZM?4V^fG0uCJ%QWu-*nN0MMws~>a1%T)oP)t{W~(@G_n7n>-dm**ZM z4NqWR;2q9O6)~b-4Q;N;2A`&usWqVUNef7{V?2qS8YHPmk(O-mXhxG;Gp4#UW13Sl zraLs_7(1OYo`{@0MSe(rUJWZg2jSX4D{!L4$;k~q1<~IYv@;djnFj4l&$XlYK&O}} zay0fBdO$YGw<%5)G&^h+b-8eYmCW$BfD~Usj5J`xRSYBSoP%aY1&x%f<@U9d;0Y?n z2!fi|F5<9<91Kq!r0p8eya-6DH*-INZ&cwI{lvV)u9=rPH1l$&X8zcvnLFHC`bQqE zZCjC+zQRXw>2lEKV)JP<78l^sGx<69s6~KF?}c)>xaxUF6=_AQrsnk_mmQZd-zSNV_6zolT9Kh`=3we-e&pJg}+3+V|O*gcr;HJhVly7zm|6u|R5#P2w!Yz%QH!eF>f}(1 zD&`$>oh&=1$>T{z1}$nZtgh&Xl^Ra(@KLSlRJ%)#=?E>w2eY{bv(ey4?75L#Dz6Fe zQ^Tkk{k+o2p+yAqV1;FT$~|CVoq{~zV?A8~)pzr_6!fcq-UXEDrY3Cw3H;C>m*=LncjKj41(|Kk1t z+#dw1EBaxDxL^KX!F@N&8c2EZ)yRt>B|86 zG6+^z^ur42OT&LiUvB?@#9P0U$N%pD{>O*lf1Kj~ck=i@!@~dgu=sy0;OsGgv(o`* zrvc7R1)OaH{BQgZcx$dLXlE+4GY#6A-uNHz)+6Enf5KZEVLqE+KBvNbP6OPZ4)b{o z%;&Ly`|xKa71>Sn;5Z-zz<*mIG z=Qj{T*=F(9OEvUOEd$O9+)}(mGo&AC%xhlOWg|Q?Bmxdg42KO;BeHj<_(RQm(V^fu7WLio&uUsJ2>i6|{h- z<3sj!7T<5X60~~RtiMt-BRe$n=&Lld=|@_6^3`|)7sE}c=Py9-1X z#h2^k4dRkovhqyUzxk#&F;C} z{T^*3d0@u(NinCAO};0*tH`a|@OkZr`i4BBC0Fgu`-be*XvFHgZ^+G-Z%EDtivDe3 z&e{)Xe^xUx&uhkt=d=mj*J!PmdtCtqckFJO3)E2QiJaASp6vTCJnt-G&u^s9%ehx* zZiW#gAguFdg9r6fNPz!X>Q4NW^lnA z4gD|*2y2C8<7!ucpYMNcYhUoa&OUhm=+^Ynbmx`AbF`A$ys@Gmg1Fl%102^0ZPlH) zjiABW|O ziui^3eUr-px7q=>GJsn&(@BV&UJ>B?DtaT^P7BHb?k+VXui$$l-#E6~QHJ1T7r@{- z)hCC@3RiFZ<|!La$DOs1c#c27-L0x)d*f$zl}I7dEtYUi%Y5HgOMBx*rQSqegCW3ucgK zsUIZzxA;khn_QaV&rnnWS9Yq`*jiHY8tH*mR+=ZvJcO~MJV|+?au*K0#0?w<2p5Q{q9*o51ZGuuR zsYw(`Y^;NXq@|wT$nTE5!`>52I~EanX~1=d+7mpq;>3XCA3~3}3}ky4bL%`; z)|)&_q7k{yRC*(oO0vww74y|(Qz#p} za0<-<9K2*o$>I7l5LWd8=a(Yx7y!IDd)=NF5MCn)!s;%}+zYUh@w^&HpRsBu35omd zYPL60KcU2l(9%gj>=qDKN5j<}s(eF0x=v7SFne>>+se)qzg;hmp}nwX?X4S@-^pg} z@H4jGj(s@Q$!07du|CvWa~E*TD9(B>ngtMZ7Z=A#amjR|f|in-H${axv!8v&VdrcR zJ{9(E{+B17d!*jEpm*=Piun8a;2+s7Atz)6JO$R_u#_K@vm6(ptPIN;xZozjk{ zsl9i>N=0uW(8c);Gw{4;Ht0IKl4c6|gbz4sfHHNvuXB~ywseoH&PI}}SMn}CAOdV{ z%Gl>q2-}q;WBa?K#4%1Q+k^MlljPj1l^$=#0n&mqMjBSHR5G?(>DBGFjP3R& zEZqcpE6%1!PY9n3ki=-da~IwXTmv$yOcALsSfpC$3k zj|yM7TVh!DJ~|&_-$L#xUMzHdpV-`&`VJy>us|ZqAvl?RW+R}k%YKsOM4>=mcIb2ZG)p! z{8l4V0?xZtT>S`*n+^22Eu#GRbb-Zoa9O_x;o)xh`!W1w;BObms;6`89S{TZ2K-(H ze~U;irVR5NLAfQl;Z=}+TQ|L?8Rx#C8Jk}R$>S!JYVA(GocxnxIlcm7y*KN1>6opx z(Y^{sb+7~@8~1p39fMg~o5%)GQZR=Xo%qGf03Ull-<5 z)NAZChjj(@h8{_rR2l?m2)8I9`#gUmv;&mzw|LTo=P=gWyPb9pW2{|9GWN+ypPl6W z@Xn(CLhL*==DKuKKcH7NlYbrLsW-Hx;%ftZk(2_T_p>cuB+ybq$(94!1Oc;@1f+fb zfDPo;4v<&n+trY?#jj53ja=H*A@>BgcS$sl%3igw%mm?hlq#VlmK$r83)^!~N(a?s zlCzEE+b{c9?T`JI?GsL*a7n-)dP(A$q8zMTgRaGbb7lSh_5cSCwK>$|(XZ!lza;-H zl(|ukl}W$P75YRnpR5C#THhacVQ`M5R__NI(gTvux6*$G0N*d=J{aKBHB{&P2k4yN znR%QqN`7Ie%s8oVk6UKz0UM&9gYS3OAAj)iVL#&^s}}pXpClf%Ynr4VO!T z*eKb^o|ZH`0c?hMXeUvLQTd2QbA42Uc01O}^kG*Wjp7eUbmdwSHQGsZ^Ar+WJCUTS zAJ&q=hcsi{gPJj6pB8Yg6O4%uXaQHM$e8q7E#SUOHR|ry0v>pN)Niyv(IOh<3wNvJ zm*o%TPt>`RPbBi~@*@(pjz2lnI-dUqv~PoUCP4d6Xn!KK?}GLxLHllaUI*=aa_u8c z<#_om`B@1lt0Kbq?~t4-eBona1feEb~E-7KdXt>Wh1!HD)9g-F%D|j z?of>hP{VnrYE1kM9V4qDyTjwyRfc<_&J6xWQ^ZnYLhFjNjF=OCt0}G##00n~Za*<6 z?bFiZ_G;Pqg6>NyU0kdlts&=f@}2TL`C-|GKI&-ss2Fr^u?c8^{PSAU!&z}H2E1(q zI?DXBkp`8Jc79Vu{|Sr`&*D0(M6RkO3pf+{kNq=Yj?D27z#sH!>|W}bH&M#E$~4 zPfBSKN%dGe5dX9+@E$xT#VfFOib{$6YruX-_>c0R=q`lpCCrNoBhIOEEx9u1+r)gW zzOekN;O;15`0}R)WL0T6jak?>0`HT5igvr!k6x>5^iT^MWwc=Ef{l`q$| zt?G1fmGVq^C47snLHSpzqn30ZN}cvcPoPM{Se3SZ6mcXoXJ_R;V>?b{8A%8FSQ(S zhG(UCSm_KadwE#^oj~vj?eeCI{Fw18&xmK>*lWpO|LLXCa0zj5n?V*5jHmHx9onJ2 z^d!>NG)_rsBR->hCIUV~Ut%n?3pBEwqDW7b?qYFP1?vo{fKaS#0WFqa0G#IiPM-4N ziNG&_PrHFnbBs@Kb2#nDr!R5fd(`MQ`Bi)Gvh%wxe=2n@;8Rw9TmAy+F-Pg~h=P6i z5{}t6g4{)UoApKhr25SeoAo!;W_?lKX8jM#X8jGdSyz%+%Lrl=f2|oK{;nDRuQX%i zmzq)jMc!_0C-O-7T6wA>fMhf4+gPrP3oO?%QG`;^JZs61>6JVZGies=6W&BE*xSC) z%*(#i%uBw~%q#z{nLqkkOK<;%uFoqEXT^51)c|^+OLaFqGm5T;*I_lw9|wv$i&CGx zT!*n`Q#Z2pXsok*K^?ES-5j1pQA@(_VhPoQtEb5$!WHvm^w2oq18mx&Dm5h7id&fX z+h|=6E3V&P;}g}!_7vfXnpz1f?)pwwcpB2)14F25gy0uz$tl!|?V-=0-dEQ5;jWaR zPcYU#NTU+~M#GvBvEM_i+6PJM9ctCq)skAW=n#%i-hkJsL%A4f=vSYj(i&*NSr{QlY!0OHx)NheKHwiY95zbIzlN}@^zBi&b^20Siy@P2-f@-Z}L7xA`h_H|m zowL|I`yYKehn`PAJ%2vku6qu9#@{<^42sjN7!(g$e(c*VKlX?6e(X}gnZ^jQ{MhUL zgW@WPpr6vcO3QOywDu}RVoV;X2gK9-Mt!+%melJ;NmNfq{kl*t@&Nu zt^OqU{*YbW_vxCoExr%jGK?foUsZ4 z>9q6Ak?iCHt2uf=dDHnffGVqVE9kQ^&`!eR~&7nVLG5Sht-+`S`$8JFy{xt+*ttgGcB0QBzVom`Rp|pqqn?1#9LlRm|qMq z-`UmcFdR1B@|M?g_%><)zBx#EK8;+cFlcWjHL_usbVCt!Ll$(aOwfve@;!j6V-zv^ za!@@Bpt|9^Hxd)dno!4tx@l3-EvVA`FX7SVsQ``j~=!dTt3jnkLPEaJS% zW6XJuH@Ps}zh9b>3d@ejQ_#jfcC|<_c3+WFu!aqm|X+bQFwZV9+K8-3T6~ zTX~I%>T7~_%&MbwwHT#Ov$|3@sv~;Tkcc@p0#943Lwa=yiRBKc&jx#*9#gh0r@by{1*Au|k|4R9K%dmWX z7V!0iUKmRv$HQ~+bz8l2b&TL|c<1T3vQ|v-4LH+>_?!*?X{y(nufq5cWrW2&#fnX}%fb(PcO}T@wt}-= zs$~s>o+b=EAkFuyaih6aPt9Dc_bgo8wJ4gA0J4%iIDQn_<mSwss_b#z@Z|_KNGIfmaTE96L3!Gt7VazNVi&gxk--s;LQ}xUA-d43+tn81M z)j!^)Fy3W{9j`iI{Z?D!y~P^uSQszzPao$gh@rDHH{N|+h4J(Db>~-}8&=-n*!sCx z`cTT9Dw1C?p?vzmE~H*l_T^*O2i%~c{XQRuL8Rx)G!{>01wl^%7EcDfBJQebl4*n% z^b7jPc<5x^n0%3r8H7NlF1fZYrTwC=-L|PBBr^G9rEL5$?-goO<<#tr6%DJ(XxnGe z3`d~-&3&s5tr$D*bt<`fo9#3w(*G2Tak2@tjr&@fp=amJLS1~b-D$&kodVPkDKHvfdjB(Kx%^!^YV? zIk)EdBj?J9So3an{jses9=uo}nKuKSr4)6Jac~3-u6xD~&H%*R8@x zK$;;;nh8>Ah9jNJRX4Zqu8E-aYd8<{pY%B|tA&_e<|5w9!4CoN=+aHXzR zSIzp-=mosUEf7SqM%4hv4SG+oy_<38p?NlL&p%?|u3A!?*AG7wx~C2!YXDY z`{QxNRcWbouf9~ePiI_m;QCHuKbPOn`nfzn?uUNX_v)A*uyyf$@LNVq=@+0G0gf$Z{hmUAGL+GNFEniM zEI10Dg?V{ltL+h;r6T)JQ`oxJz3bL}j6KWHw4IG07v2yxPNP&n5f(jOb~ z9-t@dJwQ)_6)j0k$Ezpe;Y^cfx3XFJbt8 zqJ{W}F-Ik|II{s|6)xkFGPVjK)&YHy81_j8bQ)>B5qU4s6Kv~>6Fj+)?m}u_DErY^ zneq4OH?Z6y;^fuRp4P=(Tr@}bbMXQh{rWJGR6k1O=+{RH^nlIA*UaYC9Q_)8t`2sx zxteRu)jOTJx$=?z7^%2tEq{@bVYZfklE66nst?yr%q!FAU0#+$Xpm)_y)l;mH4z~5 z{UQDwzp>)81nx~mxpX_UL;lhn5tZ|E4yjfB-MUm`clhWz<@+Y=qgw_?3CzW#>7U!Uw#3T12$#ih9*V}F`3 zW`34Pwm^>;ALxu!n$lkr{c?7H%;3KzO#ah^DSVdrcCz-LtT{Q(nv*|w7OtP%ypPYX zpDzX!icHNxJd|mnC_BgOOxl-i{M<{b+}NWUwEY<$>krNUiuLfnRT}sj@Z7MZ~BH zfjoPM9p&py>v6}b1@z^|MzBm&a4j2^HBjOPJ4c@zm0?>?@J4&q@>a;TnDiSpL^Iak zItllPWh%MvRU2hD3Be4j62i2yMU7^Y%VsSp^;!9Cw$90A56O*XA|ZKNg+9DA_7nFH zz^(t2uzVdTt@08Zoj2U$YPMuT2QhCxlrVoyw2DNQw)gR$qNx{2*+q^*Mbxf&`4Al4W zc`4a2qiE22!?uuTs0H64r2m{j5qJ1@{#E;V8$x6>!E<6o9I>QF_D;0wJOR>E;d89B zDU^FNTzi3G+mo#JKo{kU$iVnS3}zLC%hwy+<``(x$$5u;7tFsChqPHqsw|nIP^Lhf z>9*MCPjTT5{FIyuZyv4Woa8 z$OPPFf+lyYwUt;NH^b%En~=}fr&#;HNRxozli(>!+4<8`0>V;%ax(kE<(xARd8L=rEp4l^EKiAOO)IykSDCY4SZPD$VZVw5pPBHHja^LW_9Q22?6N7_3 zfDF8)`Jipdqyt4<4*Ir=P`T^ocZ=2RgE`%PhJ6eHt+|GAS%*MGm=KX1+xml*f6zb=3 z>d}P0Uz2~|2-0BIyZ&f=uU2M*=g;!e{rDA7YdWpfM3xbw_XI7&U7@SIaY{yud8!@Q~#DTVxk?h6BTbpixYr$S$t zt1Z3@x>D5=&8$8_GsmX2rQ_PPr8TBzhL>t)?J_MyzVP&VV>4ksf+uPr;Wz$_xU4Gc zJ=+V?EXc%*x?7{xtT*_Nt`5q#lf)dm zLd!@GO$teW_w+`l%}iL&L*g{K*L!v)_1axJ6YlM!dV^EWn4G&8em^24K3l4GpntT% z_XcBYS_u1=5ne_|fZqz)lYaR!xkQ%N**@(QXo*XSS-VmjXq!QN#F*dNNdf-Y;t3Tbq)Y@lsnaeNXww9NQBX+!dReIY53-yDn@Na&*}cW=${P8i|!}G z#r^EjOzyh_{EQ3Z$Ro`(tFl_M>XdwJxKlKvs!u~pA#xp|5~ITn<(GYVep#ru;{J^h zIZeyytvQ=;32)S&PUHDCQ+*6z(Y&$35Pzy=$d!5w^VYLyG-6n?{J_K_@$mfOG|l8s z*N$Xg&@K9VaxS;cfLypa8n!h@fA^gOlIoSZ`YA?IEGMyMFG)Rcwq`tXmS#M9re-|0 zK?}&I2w)u zeyXLOJXed=;`rA)?!*7H)tmG#DpHTJ$AO1e)t@q z^zU}P@I-DeK6jG+{EE-T@UqTs2|(ub_>RepK7WtR;3U%lwGvWc`^@lP{OO1 zL?>xm*y+l+0sGtoV;~|A4%trj8-38@Q_j_l>_#j8VS>g#+)xnzus`R>Mwp#VTAOfg zj(14I5r#*KH`B5@L>0LO|4f$YO!(q6~NiXlW3%pM1y4@!?{Rm z_hnk@*2}F(MWS7PAiQ*l*YmAV=B`{BC=nTOSIn;PnGwHEYlGkPZQDVgFYNMS#tf+GMPEt=H=gtHh45wejI7_Nyh7`ZEbQ`%6xuP(-X>f= zY>w_L2IS~2f|*BHYNmDV_86Z3%i5QK zM^R*tS0B?o_w@8+l3{>kGU4ci!#PNph(H)1-Es+&9&nhfhH$Bbm_$U~)fF#TZ@_b1 z4^%wy0Pkym9_xDFD=yy0t~V;K_p#*vURBRz5eZ`mOB?8@ z=92YacUQAzv2@Jd>^FKz)XOv=y=37|7;m>-)*N-N#Chmu`A+!*@o~gsk>tHy%{k$y z=5{x`De@7g+npRj*IIYBJadFQ>Sa)Q&ckek_MPEfk8N3hBx}q1Dsm*W<(xg*at>|F zkJ45jV3NoIGi;R+$ni zfYY)%vy(+m%blQZ)X?ae`+tW`UFs4vxi2T}bwyx$0{!k9j$z8=3Z@@wBa6h72Wz$H zYsMKYlhuqLnMHntU)lOi&FYtE`Q+r_^`Z!TI0ih9`S+4qVvpUSaXnV=SK9F+g91 z!T7-9oaPQXrvcho4HWN`+nddk?rbj6HW|CG`3=N!wD`=E?rLrc>==t@5FGS0>a8<4 zQf|}8{q^z&u_X_=EreWiCqp@ncmm=iM`6~38u=|3>=+xDZNmQY&R*0l*>f-T7@%i& z0X;jM-h+MTUg_9f&HeX`2d+`v1F*ce2+Mov8pW)Ree3=d=7*~-Se{_P@|b@5v4t{5 z6kr*Dta*?1+lsxf-{umJHJjreZ^m6tT>UOxw-rn3Lv?-m6GEo)IKW`l3SQ{n_pJSo zH}~I5-dB50w%W7CYR@SvO83kQ_i4rp?V0yt^B#NV``8&X=fB+CviQ}pQHhP~1~Hd; zvDuvWQnQ))2i1nGp5K4hd~bL6t%3ROKVXEv+-xRZf;sP+6??xg?Ijpl|A3M8@;>MJ zO22lWWwrYhtKDbQb%{OiDMLG7s%k24Hn;Nk<7}3&J-i6PbpDckxxT(RC4}+2VrT55 zZ{FNz-}JBJMOGcxT6MhmSL*m4)bYOGSjV*?jNcWzU>|jS?^p1rKwGY`>Ug?U$4y22 zah1sHXB6;f!^h3$#!pc*Sj4k#=0%@3quicY1Q<21L|1jd&3xvDPl^=CY3aM+O?{s< z%U7a*)OkV($HMPL)I~{e&O`j%g&))NRU3rDoqX(;reV{ZfN$67=EXak6NfoLPF@r0 zGS{qFdmT-?B!51nz2M{KcIQ)LyJK@Zu5^^9Z*+pR9kzMETmV{Iiq6T54fk@^3y}+QJ*!Nt3C&r{nKW%XQw5%UqbJA3e!H$;zwLRS?0=ho`+c&zo8`?_;sa{b39Y$^ z*HycD0nyD1IbFUQTOyF$#{V{(8+xICVl{p6-4{&G0+?{Rxr*1#?p}Zi(HTrOQ<&`D zD@=L;CPdE*oSqkXy>vda@A0Thh%V^(`Eu-fzZukfECd+KcM zlmArd1NqMo-JCa6H#3#`Z{Q{6w3v_db z)$WU}cE7sEIUDRpt=Ny__Uy-f?gQ8Bct=DoF-~vi7!B*wpTN5J)rsAMadF6^86Zv7 z>;7LHBkx-E{)<)b_kLxJjMslV-~3Am<9Eg0-Um*N-zQG>uj5Bn9WS@)`0=mQvGIQx z$CrmNepl>+eblk>H`eiUtBzM%b^PL2>e%!@)bYv?#_x*l+(#Xoe&g8u&Z^^PtB&9Q z3ax4WA81W8&>HI-*W6aSZ?xL&>G)+_Tkt>N z+KnNM-xYIq?7eRm{KoMRvg&xVRmVZUQpZF72fA`|2;+Cf%J)&nLw*H+3N%}@>bTXa zV{H+CO7&2VDB#bc&H?x%Bh8lk@CP+On7_IFNFDE1&9!$HX?BI=mXk7-JLMyM^tQ4^ zUAmf31#`(NJtc=Ni+54mjUj~pbOE(Y;w@C#>?uf_=JIZOqkIMG-N`qH5DGerd6c=l z2l5FJbJ0<{>0d!DA+-1bi>;NI0KGqYJZekD{Pb+3Y{3Q3CPn3~A@fv7dD<%7JgG}J zPwv*uQ+jl{OTKosJfZ_2d)$#at|Q45p12l5=iXcw;BPnJZx6_3N9lRns)ByE^vm!c zXTkq=3;y**_~ZSQGK?s^pEA+!e#(<|Q#e&u$Eh|`I!!m_<8{-%RyQ3d=%aWq#2k1d zrFG|{3T@5U%N(SZe9D>pi8|iGVoHD1tE6KD(|L+szX z&!KHJHe2#gX%8j6jka#{chg#ixAWKOi4k}j?Sc?WMD4FK|CAkfSs$M2?X$M;)TEHJ zm;FtS^2{zjPoi#+IrhUo|Jjy@w&bB*d4O^r+PV!tN|T~(b9Qe1=QdL8kYB2tu84|ot1N+thc+b(-De3;&$5H$C+yH_dA9s- zc{d$7U&)6e1#ptQ2(1)Y->TW1jrHoOhhyDm5z2WRX^$K$_v_gPZ zB%u|>J1emj3rH&9B?#NXPUSEGZ-vFMG*NlPYTB1r?&6%ldeKSTLNY*m5$1Syp^V^s zEY8~nm8j#e#WkvR<1vSnj?go?-SD6$;Z%6`Bh3C0^5G<5d)BMy+XnrLc9R`sC%h|( zmu#l%s{!&bhkAP)%FC^*fUPi{r1B7*}4wv-Z1V|X!~gZ`?Wx0*8zqd zuji!`3UpTfWjW~pi_YF<(bcVyCV6HCxHq>TkqMZt4{OIb9M8s^}2cY23-zd8wHZP?JONv3Wm6V z8n~$p<%V8zlfCeyyMQNc0G_lFc+xq*lOVTK)>}Mjf69~2-YZW!2jF!sz-v9gYXiV* zV?id62A;)X>&Ji5GwP+qGbNYe*-_xxQI4%2J1w~d_nMF*N7nzoxYzXiP=>pAkG-aQ z>0Z^Up(!oNzC-3}VM~nu7$iF6wCWnH$-e zFur)&%u7#%wHHsDp)5hqn0;mbxp>PuUq4)-@p9H_uI#ke#!@>WPty}!U$XInGFL(O z4%c5)h0P1Z z^xSO0<`xQ@Fu+D3S?5j7rfW;H>AtaaJ_cVGI5bK^HqB`mw?5>PUp&!`F z@bGD9^S#j(B<7h{j&1qtjbl5N2dCPJOX^;5@|4#)Et^a>v{*Y5n@F@iIcr~_)%6p5ceq@f_GeYb z*vDJ8>;%$x=8o-!ofc9#w0p2|MT9$?T&MTnH>A8ky$xv99YtDohiniDNTG7EP zefwSg^)+rUo`DO}eRGlGjTa?dyj2^pDZ)R24TxQv1$|?`( zcW+IROQBx(hS4DIen{s$av9`FRDu#m zX3oP<;z={`j?yxp^Pe>bjP-hb6THBY6&R(%XxUoSyQ`urf7ju2Jo!g&(en@8s^=fs zs^^~Frstl9{&=3%zz216P64^k*AqL^@r4^LuK`vFc(#BiW4#_nqxZ>P?d8lUR;CNE zb*#hXpf=2gM;)J+2V737xm4@QKLX`EdMosE{vjyoDJbQkLOZb(lsB-H^=`n`7?vVW z#c~9)aOD5#`QZ=hts@@Nan|Vv*vsis-;q{7G&OZ9w}UkA<_rDNV97*tE%^fVwCVwS z9;UJr>i10`t>g!;^gaQ$1{tbAn~bStcwfLHdg*<~1-p!F=78sldLkp1;Z4Q)n!oCU z0IL^9{tqzg5j|h?pw7-(71C8vUX(Nipt6y9kA+mek%Mo(%Jx{uocD}wPJM>jl?YJn z1PsYcc~;M4pVbrd(B-q*Q#j*^>ojKM8IaEpoPb#I8j$Tw^|Sg`#Yb&-lx?^JqNL+;NWA9CG?ioGDKl_Vqd%UD= zk3-v@gSI`lN86r&d);p%JZO{Kg+rID@+V)(rZ8c({ZO{M4wmk=Jdwzfo z6Bj9*PmGc~{9VeCKt1!y3wzi|!L`Rs>_t5je@P!jhR~WVcZKCAu49{!}Lhgmr1fiBd;?5ksre^JkIFX>(jUK}kuNa6LeZgL;#LphUtp{JmKDmff4 znv5f)OUcf_dju*uyi34Ftb5}KY7=v`y>}fqnV?M!bIo?$B>&P?t}}A&9EH&zeW!=nX3M{EZ7c^9V9D!rBkU(P|?0$K>Zpes7hWN z3^f{Il27%F5N*iVY8sL)5bNti3-p~hyrD|mFl3r23R?piZdk*e@f;Uz(BAinQSv6V zVaI{khCKJBK2peYU&C)DKN5U!Z?2iPCq|e~9!KW|r(k=w?!7(7KuG`g9B#Fz{eNlC zG>=<5$P{+!nR;kX1GHx;ZO_t1VvZ}e$F?tl<>JwX{ly`~dxe&PxPAZ&uM%&%*m_VBVBp- z7rOQUK*-G?gfpB05OQOmBaDu;U{rdC@-S-*;rNLVRZUjgVeH&(XJbcG)o8NX20rEi z+IM08o)r4y>3%02WB2gd&Q4{}OhRX6d!FI`2aLvzu}D#uWpCl<7sI8J_2ogN?_BUd z^eA}_X{2bVd2yPjSCzTPN9iskRp++={~(;>_aPvLdN&h2QE^KI|xt&88+ z!_p;L%m=NlUl!vC%O%&s>Mm2-#?!Hg=a$X3?U3X79ry*1QZ~f!t1!-6c)(JTBlo8l z!k5W^qPGcTY*hHd9T2^wD>kPQb>g3iCt%dG^q0kO&f}p}z(>~zIC|cXQIb*A%4Pxn zwOD=(#tsK#hsUu~O|3G(*x`mky)Wp%KF^iCrmJGE>~%dCd_!MY@s^$|e_Jc#6g7`s)nIPCF-q@pQ&T|Wt81!Ht)Ghb7F3_o-4dR8SUY^3+#Rva)&SS?5Z65R zXh^f=e@L?h()2)@>wiNUj;29~-I2hO)x<4zM=F*84U^u})e40CYR)YoppB--spa9?V9VSq*u_E{VmdZZX>j_uJxle>+h?FkiE@YUe%G3M5rw?+!GL~{?VC;^P66^YLVG?Ulgr$9!%6gB0hqs zHHr98g5v>C_hs(CFWRmA7o=;q3+39|NoQ>HoNB@8qW5#PcPiJ+0g45#Z+f-7>B3f? z;B*l!Yu_*5zfh0VQ5}>3qeYNyl%sLLAsR-JJ`9KCQA;)^-a9baF#`zI%)sPMBvVd z&L%V9chx>+G{37$IWvYb+MAY*8B&y!hR}7w5A>nXx35FysQ2q4QGimHvH>xf_z{O4 zoyz;jk2!=N`c=aCp*8_&PD($UG(O5duLH^OrCDh2^aJ2kqQ7AM^h2HDW*=@;(D?Is zybI}Qr((?|@-^@1`C;$s`N+Sq=OO)7a|H1HSBad-WV8guZ5XXEi!ozGYzFD(C6FS` z7{heHu{aCkEKIMa`mdh=heJ#!i0Q<_bPh3{qx(;Y=^V6{;diBl-!-IQtB0fG&(#OV z$jh@7y2k9GP-1HWGKG_!wz^>VwU+kLX))}h0(|nyM|xiUSda3D2fCC&S+x1_X+PIa za531T>$85Y&x^3ZG7vWG>=4RFtank%yHk11>PwK7;=6P+4zi~jZOExL4Q702$v4Vj zJ7yt#cFZEAur7@~UC{Ssd^gX3saFDoJUsAGUa;sCM@KkoF~+C1H7LzAl}~YBI2!{> z38_#b6BwKvG@X;C#B?aL;5@<{2kAsJwhMYWK(LnTdzeEtd_(I1<{Y)RxJ%ark4^KK zv7NMpxx}phjD{~Il^_FDiX&|T#WyUc+`>byxUO&3KskaLf&Aaa^ngDRmVXmb#r&{c zdZhq07Au93qCjab<`b~6nd`GN0{u7?dgN=JVge7C&<`$!xgyf$m4xnFG<8NE$l9na z#=Dhn<O^pq-{8mB+K#n>mQb zXoZc2qYUOQnVWvE=lLJ>yzrx*7k|>dd$GB^Wl)#m=t8RVv)=z~)2QM+d6b*YlT{9H zr;^Jw!JM{RN148fSaQ7B6`M9AEwqUsZ$O`n6Wt^-&g)8vco&`*q~x_g+udBg`oGrr zV-MO#U}vGrT>)Uj0saL(ARIutny!f{2|p>U%cD&R$%coM(xYsh&FqW9_@C2F?t~e` z8Oyq3+d53iEvhza&qPuy>X!!TYIg=DW#zUGiAu~5bu?4EqA)&(S+?OnRLhd9G!nL* zx1clf>WmhGl1l`5?1zW2kl@m!Ev3UeYYisHz0N@ zH{hF#^3OQCBOj)Lwuu|*eFYz;fd<(&LLObQ-|v^UWrqDRni+m#bP(C~;C{SBkix;^n z%)mdQRl>JQr_x4mPcZ#2N2@sI#xqi3@qz{B_T%ahDtMYHY`bVdK(Z5cr1?azo)XJR zSY$9em0IPOfXV~}I{|qL{7$2O0B26E$v$c`8bz4|#5$6gO3QwfGcbjD;LXuShe&E1 z91 zRm&{u0o9^ytypP{HLfanoB2SoJBNZG^Bh-a3cWg( zR|C8f_vRXTA328euMFbM*78sBbTy5K)~k4fna>7u)(%Bv_nG-@S>9%ZrJ1p?{MaPZ zzFSv+FrAzca0LPH&*w7gq`Haxxm>2IsqO$D-p+73*XAZ;)v;ku?ZM+7c#mZKQ|j!h zL{1MjI-MlUP0nJ?f%A#Ab??a zrhVo-389EfQX5TepJyc8f>-CB9cJ61jW+TtL z+oUB%^1`D@SUPWk>h6w|t$Yk9EmD4o;LSZSh9r&dO`?C5^hzitEhOeLpePbhlx09s zfWFr}Rz9>EZ;^G@A3K3Gdn9}2&0C_0*`rBfVjUUnIUH%?f3*=oPlVTMf}ZuzhB6On znoqPLK~I!ugCGRPbkI{qv;c%CUYJ9{+m!HbLk~e)`ZB!F;-Fsx98%QYMgQ8_`5~UyXa@8)obev=*(9FBg^=@OHPsyCK1D#BLOa653BfW)?y+ zK{A0!bqGP$7a73wChAs;y}+Od5NwCMY*6Z*KaxzjQJ1)|mNYsY(8uRx3XtB3@-&VF zpc6O}HfFT1IwM!aR#3{}XZX#ZpTV-LY0oVpMI3%B!Tn%~djYr~DsdkK?uSdN#4eUQMu5UNWNyE$|(rS5tf>u3sV zwAj%dS&+^UuA#oX%)*CvrZ9ZiTi>f_`GWUTnGkiGBZRH3tRdEhVK%gj`E)3Y545sGK}ccK3-;2rNCSJxeRFU?u^o&_K` zoH=D*v>7R`jbz?U*Jb{bu1i#lc;O8I7-N^YpxifyP3feA0-SnvEm5}OHm6WTIv~eKq@c}ZfItlI7CwE4! zj*X)29Yq3sIccaKPFR2S#0#*%TUf)qH{Msf0QBE+)O`}|FW{cs?~86aOAyp@yq_rm zvPueMqc$EWq-uwJKAB%Av(XoTFdu32L0FZGgnjR3FzhGd^rd_>4;k{PkYA8bk~hj% z%Xe^pUu}N^<_CU{ooe7S{l{ujn7^}?xIDKTX7Rl+izh~2(x0TNS_VnLI{r8-w-eAo; z`Qlo|P^1IVk0-GmkZv-11htYB{cuuue-q=H47;3i#8Q_pAWcR zw{kMIjDz{SSm1hZB!cSQ{$9NiE{mLe6O{6kG<>*B5{hp$c8G zzon~%Jm-c~Lx_#e^|{k0lU_WJ0P}?GrmUe3zI!X~f&#Q}T4>;^8r4Pfq{t{@K5{}s z=IVMQ^Y?G{md8$PXxY?cv^?>R-kJNU!+Da^Zr%_uuzwsln-lG%f~<1B*}<$~xJb)G z5HlvO#M|O8hg@N{;mK}lG0;**>z1s6u8D?u<-rEV25F;X2(|Bqb!okMqLJM+*}zr2 zLY?roHJ@u0_eDnqgikhBal1RP4HFDp17vv@+p=ja)NIX4#8X^XvwoZ2>TtdYbCKH< zi9>nyZ;6DDs4pa8-mLoZF2{v@sg8u2#`V8y>(=ttEiH!jS@x<02F_&zVlPo`Vd=T1 z6hDKQSE+`zQ+HLsFr&!1uG8CT%5e~ieyKWZjRL4uU7sIFt1sa#(frv%0M^flP{uoE8Ybaha<0c+7v)EJyCUNz^{_JG>5K_0>ujwzFM!xj zL2J=3#XrjRug?QqkZ0?wtYr=wFR%Wgp)>MbN0_u+3w<0qvEhNW74|hLj>LJ%egJG_O_Y7s%8VCp55{v9EV#qGqWX!tZxyq9wd->l$U0?M~t{%QvP~Ex9g47%b@8 ziJZ9GK?>h$WAY*gDL_OXUS&Ibh^ex?FdXxTw_}6XA;0iNFS-4o9g1)8dPVVOmTXKX zPxTYj@~bv?h~f~Cx5WL(4!<~hz2aAR7f4_t{;Hz6aznaPd1EGy-ul0ye%rrh;=WqD z$CK=g{5c%7N(N4c>t=js$`nu`4c^6^hFh zQvEx=+(Ay-5diwXS+RS{VR*(pirVM_*>EWE3Qt&w&h2jUA3yQpQ%^Y?O6;9E0dSw6 zm51JaA8R6XDj&exX|K-ha5#pjp6;fd>5C@<*S5o0h}mYHDO9)Y5QHI}k=>A1vtxC#*pF1O8fQ0C@Sr8P|(D+jTo51&EfCAR4JMz{awiB1VLRoV^ zA(z?hN`=yt_L0ls>(o;+OV3MhtZZ%hY*gtpn{2Obvys$J%@+OK-*{~H8} zx0j5Y1XST0Y+s(d@HyA3NoT*$T&frEbJTY7LOH1)@22(W!P?PKdgI48g_>d;LAF&s z1BhhW0fTCiiRuERcnea()~NuG(U`_XTlp@&~4nNF(fK^4btp9+=)r zDOxFQ+e}P1719L+2J;C#Ej_R`k%M=hVg^zavmL+QW4jBHCvj&6FxFfQz7cK~)*MG7 zKv=e@7`vt2-*Odf+sd~&WG<7C!ZWgh%{G7M6>z;^^oX;UM)h;C>OHHL58!RS;z1rCRM9X`ri1j<{k2Df=-*kF=QW=p-H zy49ikyPzF|p=_7xZFI%C?3R&6$~A~&x6FihkeFLqjh@Ig9ot~OsRfW~ztQ1@&@6;v z%iaN(&s`d8g3BQ4=gCjU0WX+sm|IwhE}$m2bl`Z-+!QrZ?g|oizrCO{@@DL5;&cbR z5t7^qvY`7Lqu`g^3AFv@F^1;N-c$=IWC(p@N@why*wdc;mLW##%|nq>ZP^cM;)NOk zL|rnpYr3J1Nxp8gYU*=mH;n;E*-7h7W1x=LK^=V_b5pC4;jfK0@@|qLS4ZCjQ3*Bj z3Tbixou0@|5Ep39mhlV{n1*bQBIX0-0biEO=4ggo8{G<6_S4K!P!G)r@dfFi9E2!( z=ODnR<*sX@aUzLmGc~idP^KH``auTx^H_e%weyUH5U&uw<@zQg?vm^iioMjjrO{}) zejfPR`4srVTQaxg4fB4tG1Mi$lez7OF%v-=H*foKOclRzNaptM$4s~L!ll41;&xt~ zfch;GU}PHlf@mLCx~j-1ZzIeUvs-)yo>DLYwka1#a8|CJ%99w^g||A6@*+OxHw6IS zvRj5iJm4BzfSb9>=$rMlxoHUHdG`U#hZ?On`3z0;xGP;F-3+_xEbJNq9B#aUatyXN zbH~+DY;*SdMx#W23Cf!+*~O&|+b910Px+*v%@o30uZc1_h^D(A`o!fDQ+*?1S8h|i zk-ud;U>3?T1?*t<~wfC{gFYZvx6v_MXVKC{IHl zApdm)Q6m-@3hH2DIITV+2+7nIhaGmT6jX{ggxu^cAx$4XluWo}5)$Zt8JAvb8c z;j?FzQ4qU|w1!3jHZz%l0H^XB$f;t4rnd#e5oFICT8AD8<1eF3HIgr&hNl@AOkph$ zGs)x#oYB_DDrgAx0|`Q)R^LE=*vv{3DUTgTc7On^y`390wWJ@a>*ls*51`;$Vq@}D$9qqF6+ z4(?<($gtS};u`?=uL%gQs_^tiAd|<^8^L96OZ*ZHy_`S5(bk-N~sWbTA4Y0 zRRh}htJ%I`NFKh;=HnXjOK*&#|1`;F-zv?7->gyt_0Ez;p@r-LUz;ka@(zc@)#s9w z=eH53cl+lcM^8?ES4EOU>*c$2y+a~C3(YR{nLM)s@)VRMDnP>s=Y?THOpWdYQ97%>&EVQGul8f^g_ z@s=j;Yax@k4Kv6je4qtQkEPodXm(Qpx@CoEU$ur77%hVjGP;{K&UkvY%e4@`3wYBA z4+u;Vgs-!JM-aYn@H{H1JBu0*&H^U~N&HHZ5 z)LuMA1h-115gXAwxY9E_7UqxgcE=7*S5w+;BR-JvzQQ+GaHIYdm4UdY>l!RNTUeXK zd3wv-w1IcF#6`lRjzmFkqg01wBDSq5XyDqM+*C!<6($!eNIw1#_D^vL#jlsmB~EU; zN?^7%h?soLnnz`#AMCHzBoc$jc0Umtxgg2Rn^A{W9W(Q0*3tbOmr2&8tH|UE=nKq+ ztuY6oCN>|vW6DBy1{giMAj^vpEk1drx{dFfLCAe zk(RC#8(K1xjQb-C@e9I{rmR+662^s*aCh=ppjXS+8ddTrFPnXbh-J^<#Fm}|>f$0# zQleU1Eohkwx$z5os_UYJtr>KYeA`;!Va^g8GpJi>u2HRe%O_QFfXye*F--ruba&IY z%lJWVpeOnFI>Gl5Zo`?EVnWUe%+2RnH|F&ll8Boiw7B@LMzuSTpTi@Hm2_hvx22wquu5) z@=Nmu&bVO??mwZSn|P34+i(SE9$?ed3Z@6#ZhLxEKDZ&BQ_f50RG7IhQj8$C=E2;e zN+Z`6g=eavewka8G;)jTjfIQj@Bn9C4D+MKzk^Vq8g04}B~ycz{#{$n@D|tM7d^r5 znY1j32uz<9^>ynEHISjn>!%2vaO7)XqceRMt9}pDP>Fg)?hh@xB352^)CA2xyUV zV+TqM|L)-E=@0fb(!wP>P2~oh6qw#F%;i6ja4s|dg#povWz=B<}JgCY6l;#qa(g`WQ zS?1uKuIiiA%H&RsYb;S)LjW~Zfw{) z^Mz2c3-XDxUw-eky7Tio{jP4}0UU+&sEL}o#?|_i7_tJQyG#E>qQt)e( z0#s9HC;bLlMLMGxMtOjsN~j0adf^%A%!PkSM|~qZ3j7EA41Gg$JI5gRiMOs z=?>#PG%jGBJuw;2us|K;u>5=zJNHscqV`&Emoj>io#fXIt;?NVSC>0=RGq!dP1ISr zvqslN-HgwjMa+vqezG(9=?TbH9i4o_1^KqkRax8IntNakyPMih5Q#hzYoEX9taMaZH^>33ea|yO{yT;B`oEGwB?6EKYnWu$fHTO@*_|&w*#e~<=SdTXY2@VtuG+` z4sRrbc$y8b5UVAXh9o-ibb3}7pO1hn7 zmanbN9R8=;%!+ljnT|7SGt17XReKZP+DPJO)G|tZcO^;ubOlNLa2W~v&Y(5?ol~O4O>vcQAJLOMC|{l_#atUd!}!mf!a%@KCJ71gA$>oKn;gk4Xh zx|J^{q6CIJ=k31oWYotn)JHMrMEZLx{e7_H`wH3*KA=YG51JU3ABbr`CoZfYiA#f2 z3d9^76h?>B_&3n+CkyhP1Z7M2$4X=RW*%3J>BCf3Oa^Tj`v8;7h$(eJ87P@7$tfAI zQs#@jFK*b*h69Loakv43$~QnGq|X)NA^eYL#)-tYWD=^SNSj(Z{OUciEzko%t+F z7kw1w^WoH@PlWk+rWJjfn9u)BVLsarUqhJBu57`FSoIm%=VR69w5dfOt3Idp`B?Qa zrWJjx`aC_q=wsFAheE1lq=`ZEpYsdQ{8HR2G#zRfp?R&N6q<-tcEGB388BUj*^2!R zFVdNHw4X6Irhl=Vx);!2ou&c`B8DY4OKFA?U7#6=mwBby$OS5mygJxG?Ub-^d^{iy zA`R(L#L`FynPE6cEWmZ;GpP2`YRa7|0b5TiahHR8ZHe0p?mrdWOzsc^QV6Aw5n8Ig zy#Z=`8kJ+_Q#l1OcWu$lq$ZG(>#il5r=;N%CYU)o})mnWMAE zk>EbF#9c*_?So0X10d#HMo?qu};U?{i~6 z-&7Kg{oFRQ&yD?j!0bNU>Z_Gj($5Vi`$=Y*UZ++hS7SR)>feqEl&xATYK?|8$jIU~ zaXY{UV=N&~u~Ez;A%D|OP1!idtmY*fx@#WG-!u{0)j4HCs zl_F>pb6$m9gEGr%dHiyLp81c^nI4lNM^gKLL+Cv3T@TLpaP<)PjNZd}VprH`ByW>! z7wXfz4sI3RxL33ta{94Drf2k0BuPU$l`p`Dt}j|TiB!+3{Gw*lzU!I7n%Gx_i5f!x~YweY}2mr%0=I~6_ zwA=us~I$4;hve%x=~wf^sA=l1Szt2VL7`D%I!QvhK0;RKMI_)A^0i zJSo@d=~)QbERU}q#%y~T@L|L#?F3aV+vKW_iGA%M&5ylAA7!5 zK#qOB_8tB8C1g-N>s>z~AkAB5^(i~*cPHZCr=|^>@FSl5*T(7GPz-C*{e0djKPn*+=)R;FGfKE^E7Uc*_Rc>rui{v%`z_j)`L>zX*bTr`u!v7af zvH(6;c9Jwyngi>Uj&Ar+b(KxBpd1|dYQIS?h1+UIM~@VGsBMjca#al0x=Y% zv|LhTByNisv;0Rl?m0*Bntd2&Gy*qCdpq$wZUM@12KD~fNb~g$j=+{h9aJ`@O-js- zOa~hqBn7pn#4op7p46b$_APDq|nGI^0HJpMba2d@XFBNb4GSkisJ#!p% z5om6-)ez2VsvUH;DNzPnPHwzf+y}Sgjfvm1gWXFn+;iZg0=a*2WjEk0JW^72#I>S1 z=OFgf#5pW4etlTO8+-`;!h&-)qs#apgFI-Nm&eh>`jxB1<%!{M*pgy!0K$QBv)*})QRx@+uA zfL47GE||wz)}DZDQ$(@gImD5G5h$j{!JdtbTa?Vrt~)GW^A9uE4DIN~7kuy(Swv@1 zVoTqhwn;0=DZ%<}Dk?z+FB4++Jt@8NGe2_eeleX0?pd2XBdq&7kY>rH}{Cuk2V@Z$S#zL=FUn>K%K4U6Mn$~LQAEbv)- zcd-k*4EIm7eR}NKc1Ohbrxl zCt=CZ9|IY(KO-V~!CB}6a)`*Ha7Ckw8qkJ!v6`>VGv}@Bc{}LfvvRFeCq?fQoel^jB6F`rzCSiqm`NFs|Dy&lQ93S8!&EF!j+8F5FjU0A69w&_xB^$A9_O*&^QJ#BFE*R= z46zM~R+WQm_}GdN&Q=2b3=GWFf)w05IE{d`4NG=gwGmIXkx9htQ)bYDYw0Y`Mv;bl zMY8Uk`PasRIROg7o1Up*T~v%|@bc|FJkE#oXrmXVy+U=O#rXBxiR)9HuzpXZN*u4bfWDg7eMyacu(cLSFR+wL$dVlccVO?G^dF-@}O0 zm-}ouNQLVKsukoLLHVm*QrF92M?3GC31wF5)4!ZR5AAbjl20!t?N{Q``Rh-I0Z)f12UrAN)$gHHWPyWyK|2E#gP9 zx8C*+!&(aDEP~rw%|lRW3M9|&+Y1#jYW=+G@mipUfx@MUeh#j|Ks6s}@mL05SN|Z_vMI_>{|6T?jha-L;HnguGnm>93 zPGpmLvbx+-!nC;$3Sk|lLpqC77GCdJcZUE4ic>df{fHzogQiliTJLg}#6eT;vIQXS zoZ-r=S>}VS9kg0*8}eXyy~Mp){a3tvpf;q=GT05eduqQIx?mIwlr44_^_~w%H~CY=xQ zD=U{Y>Gv&o+3y%omuh4w+->1KU6`A{w>6<|cwG>G6%R@N3Y~ZbhkB;5{qjW!Rcx1L zW${nW5HdFp+M@<7bX4!t6K`Vjjw8(oyve70xE$y~%D4QA|L7XrOi6Y@gT*l)y*m7Cd5;h4my zr9=7KVccFvS&?>-w7=;^j^V%l?|UGU!9-+38W6g*4QB8aSo1{;eW{BMWUv*`U=1@< zupC!_Bmo)tg@_*9iZI~$^)+aXs20lX1G&LVc*(uH$syE3Y;e~LGQbzgfVO=jye6an zQ@2Vqg>d61v=$9)FuUM%-Fzqs$!#yN7KC^l^zwyh3JbXbZlLGB18eZ^Usp*qHQ1KF z#zP3(mjA~=*x}uuVK+2z7;e}CWWXN>8l4?g7i3qH_$qt`*nn&y_LLHeT8g`%yO%!E zRiymC?GU;?zdrd@c=~sb3;^lm>BVFrmZSB5o}l*+C5sac;Jc@UEx|Nv)Daz83lc&6 zvh^3iCh#9w#A6|VUm(NHTo2@Jk>myzBIXS$VT&u_YXrb69;CJ#?=S$n2k9^Xya)R* z;JzFA(4*k1Fj~A581R6|Ucifj7_n90(xqnQpsDwd1Er={*}y?n8$z2iZY3B+|Bzwm zV5H}y$&C0{xIYB z<*p&yp8@RCoLgPS`ot)vA6xu*q@Oh4N=2Y}UQQ>;7E%^ReC|@+5GMery7yn# zrN;)oDzfB0-bxUIJDTF2l0NQwvmdDpuoddEs~XE`9y4{DwMr~*fV_sx3sw9*1{peV z^EO>ED{2=&8}dQ~_gw@u!WcSK*Kk?SiwLW<^f55HbocY-QA?+_w5ymqUjTtlYJh&C zkb%5X{LTR8y?KaK&>yewCy#L8`h-yEI*f4OYJ*Vds*+IR08o<`4ES182T-WV`v`cQ z>o=8d*LzwvEh}SRm0$h%nWXp5p+5kffDM1|`wFI{gLex8!Iz~(z7Ll@_%QG^?nw>? zUFfxu_c?2Uca#s*{@8vx|&UYE~DtV>| z2K?!BQE#f`7>JCr@1|^yovOxEQ4vU*bF{r!{R- zMr^$wXhtj6pzHjo1S5?T{pEGe`MjwZO)~eW2g8Q^WK@bh0lqY<2ze3^n&J?Q;5Y<6 zn}6Fh=p+m$USxpl(AS8WV{+^5Zq51znqx7lih`Geb*lq4YwBJTWOf&g-2j^tw)=*| z6W7n|Yzi0ArwlTSTQ;WRu5=r{H&^kiFJf>D#C5A*T_O8r?~Q^-e!z*Jhkeiqj0a~| z5a+v%KHvkbUH`I>A!K>)mZtF?^$LuR@N$M_eSklx?qd~rB;$v8uM!x8F#EGsW`NX)AAMx7!z%DC<;#A$@D2C0lFeTUY$t`4A{WNv0kY2b+ zcMYD$h+)=pG~iYy%q$WtZlPt@(-x0NWwiBAE5z)3sPx3W_R+tz&#bY=r|$Y+v6>NG zHo|FbV=>74aZx-Zd+7ur;hVqbrO95~bwYDLcyFDU_EWQKLXq!ZV8|0!IdtT=(SgX=USqKqY0tV+c={Eo3zg!R=q2~5LJH*}3gFdQq&5|Gz9=2S`h8p@ zw8374+I!(eNmojB{jK7F!&Q5YNrSUA3fvTin~2)x6X)%awhn~21!{5UW*U9IEhm+n z)3}Giu;Gu$IH^e6jmc`B=5SBu)1)Q2Avo_hN}e?1e8eMg zSTStr9SV;JUe8jBiKU(PB*gVOEa{w++Z3JhJBMO2V0g)Fm$c%S`Pj7<)){6Tm8CiP z%-1pfmrIZ};9CE<1Q#Nx#WS}S48^D&a!GBP``DTE>jrB>dee_B(ZA^`GI!SQ#M1tD za8*>!EY6v+>|>U_LK0n*p>`m#ULdm#o}L~5*23E`eOf(lQ#^MfvG%2kh^t%Iwb!PF zl)f-4=q?B~K#|bk;NC7}Pa*~TisuM9qzr`{2rkzs8t(PWU0vrPdG?#~(sn{U;0VvZ(sT z)TF4jHY=bTuv}y>XGMusI@WhVFw!{Cg^=f>j-o|1(AbhD4NFE1_EbE_)$a8Be<%76kc1=A#MDXPZ_?waMx3c)n#%_5=Yk0GQW-m#hRn$~vZubJ40-Eid&~dA zpkb(7x8&p2RTrjpH1Il`Sq7rk0nW>S+K$2vmNxWoeceyw0c3I60UwU)gZ5J0oWOY9 zxaYun=#@HBH=Ai~6*)d-rLsH_uVQ(?)yJQgzP;h$j#}vFo2XUEGGEE}(cZ<8eZf4T z)9dYG4DNRn*pXNkM`lVJ{!0`IVOjB!_3_9@UpWG~_iTnT;^iP*K?5=D7BkvnCS3VP z+WdkuEHBU(;hR*xP;mb~boXr42CFZW`+I9kPUFkOZ)t>G$!4gAZ;3m}sU8}>=tgtW z-wI(DsJivUf6|r{ZgoV`H-5SfhGp;8jNy60$dfKVi+)>?d3%K45gE7!tuwp4rPAYg zVYXtqP;;Hu;aItPWi29IPT(eH8*4*sD=wetW%7<(+D&n+k?zXzwH_%7o&#b2cylT{ z&L*_j6I_p+%3%_nY|n9}**qXgvt?UFzf=HYQHZN<@-&%4i`W-SqN`1Q*Zm1hrM6WqfcXg}~yc4lg2cy_}{xI}7 zsPkz6PzD|$R{ocIHI(u^DtZylBm&Xz_GAF9$d~o0nSA`rsa_yPJxYZ;4_!;p{bQ-u=$m706$fArf%9);KHiES&E}sJ0#ri?_r~0Q#+r*uMXoXXs>$5m1@$#7+aA06!|RRh1C5ZyC<12?5d!l zOUSsZJ`Hpnaq^fa{QQt`6Xm$4%r_-0_u=kD72cO^ceVYoi%R}C?83`IIS&UlTd)^9 zOH$OmU1*2l!UVooXWiOqbXAV7@D;_*jksiW!b6mbQX|+n$0FPVWz2Py6sg4aC z(`Qb`CBQ&?uY^Gx^!Yp2vJ=J~c*$65BWZ=%qtqCwjJPz-sq_3Y@RYh{JFeJBm|#SX zBbTjf4D6M^S&?<2BaiseyK6@(f7On!>+Vne3;C{%%If}Wwk$J1oMf`)P?W?&8970s zA$v?ype2z(YCnF=sEpAjh=?e^nJPU#xR?x{yXo>nZKdVW1*#ZS%N&Q&N*kY68Ybxq zxY*ic$71{@%gc;(UDChj<-_;q=Y=<6HiOgb+Vi^mB**Kf{Y2rPETx;I557-wUxwjQ znY*91JUn9)J3L7k_N7eL8aVG4z+k0nN=ElN2wd*$5dC46v|>b z@A26Zath8iw{GU7?jJ$9>s^)YjwHQ8g{|5g;a1a3mOvsnAi|R!zrAa)BdZ! z?-BNDFZ(S4={2&CyM9kutu6=N2wtbrWan+{6>KF7p_6>B)ydTCk+SQIcT!l^L40H1 zW4QK&()e#xhMCEe4TiXF_5+?n=mgl~404BnBdXi93vc8@moY}QnhPEE!5SB`)go(v ziH_~7ukssr<+|~X_f*&#c43~LLQA>+6#?REr>SF%V${Xo!*t1Hv*-89n@;hnr|k4F z=LRz}aaD}@@1^p0$j%E$=X3F^s)uqN<^=w!f8_A1NBM=XxrqkkXoO{`29ToS+(a4V zu4b!qs~ECh0j;yKPI{a(2C5F$x=1=ufN#SUOxH_WG+yPbC_St($iom56TaUF%;bxc ziY2S-DHIIHHyAEM_IPD?rVcUvvi2vD{3ktOdfwLE2&T$NN66=ycbkRBeNT z@{%GDh2i>cdLG@#zI28BUJ83b9^D9Di*dw@40~PAzr)SnLd1H(!*S5z*~Qvwv9$8i zF3lG?362P+a=|93Zv_6{tK-|6|E8@0Gm9?;j`iHGW_SC{0=QwVW}Zw_KsoS~4=#QV z%8JE>8JKCTVc`=Dxx*M{)n{V9;hABRJy~7YujC?*HqLuY0;cfHl7-nch;YK&53GeR zw(!1jCH5$y>T&=T<2#wBFHY1u2-{DcYPelrJRnZCyYs|1yH_WvL=*xT8VbInq9dS! z)Jc$?MsIi+I7lt|M zX+qF|IGLi$cOA)#!sH7lw2&b5=#zz@R(;)?FV;t^GTe79=vA${w=ftup7s$|)p$En z!TbQwVMr(`gAQW&2^Z3X@%Yc~k14wHioak1Zl#p!PWd532XIM z3ZxNNzR;HE)zcfuFJ03offaF0{XTtmL5mJ_uZYe;yr)kP&&#{cs{@M5{J36FMz))l zI06$H$f}_?eq0-w&HjmK2R(m|oi!V};d7m&zz&CU2(4sA93wsm#?>pf9^E;I<5 zgiO^keNG}*IphjG=O)^?ywJ}b_DjlhYeTs>vakOFzGc<{crHW^v#hm#c*mfd(_i2Z z(6Tm4g{*(07w=JU2cH3ifS$nGU2E>~5Xsjk{fsUu$T?Z700x|sWtR201>@UZVU*Z~ z;0FnZZ-@Yg=FElSvfefxxCNz^0_69MbuYE>o+$GJW$e`xkZ3Q4T7j`4YUSVPX+n%G z2r@n$e|=~&989!{WxL9Sx5n*$@%Ak$08Cik;UxABK*l-|@Cj80C^46aBdx>iz}FGJ zZkgWFx0oxaKfJWO=ojVj;C;9H+KFk)OnPgK#B|(y^hk!SH#Fi2pwI>M40ebI6224Y zs%07#K3(Ix<*|12Q9lsse2T69G(kRk_1BqzPx-;#TM@SK3(#^_`Qp8Q(!1o;B&G(N zN?{uZUi8Ow( z`r(m=F&c^VE!phoQOLlP{7DOB9Eii}as1xtX*E1ZFI2m&Cr>LiVNbP-*jXNux@!4k zUccaiGu3dSZi4qySEkv<+wkZ6$++d4SG>*aeLsp{;mr92)GvY}*x@5o(`;f3X!1yS zEWzfkyDUA1vq-EmMwOee&__s^VwLbAg31QgV+(zNBee(AEVC^%0}>)lK)xpbNf0)E z#GkQ*1|8Yyy+98crr_cl8_U|ikLAlQKImSQA`obCZ(VZ1?jrV00zb=&Px_LCiIk3l znQrVMVnSHON}@ctm*v{4F9OlqJ7Zj;E^(qy_V_6h(~vG2Ss?kyf=8@F?+tSjIn6&k z>>s*_Mxm)+<<3DA7VPNH+1;Q-)J}0LzPv0RxP>;UFm^sndfxWp@!#@C6Kt@4pVac- zgng>xZL+t2|Db;<{RqE1bf)aU{pP58k|;#;D-7(ca2eu(-JeACLm5(6B9cvL9fO!W znOL=T_Wm@9Z#7Ao8UL~6vhk7|MW{qMe3(aWd1M-Q7V5*brp-G|7m2&B`LF} zP^zz<+nZdmBuFM<<;?f{(4#7~q`k`$zwxAIp{Tu*#pJr-*hvqC$=jpGP%nq)z!O2h zwx)<6EQ5KVrqN3vjZ3}Wg>#0iT=MC5-ZNU5_u2vD@nn%}tA4FFWeW=G)>WfwQvEN6 z>EfqjAg(uE{sY3qR+%nzaTDh|ZQuNCK5nMFy0YD zrtVy7+;D|Z=a=YH7azBCbzxc03J2%W`5Wk9ovtl6Z2pz5%|mYUp53pio`dmTcv26P z0Wpumy$y(krrP>1xJPzxs(e0(51kbs6@4tvVC#G}MjsJv-8uT}!M8o+chQS(#gOLi zIoc}nV~_aU)BDUQ{T$6Py%o1SwYk|-E82q~WKTtoW`vi=>4$ptwogD-ps(u=w#KSE zR1V9U0g_dMNXM^@yS&c@?=a3s4af~=#=E{O6f%>~@3@eC#}Op;W6sF&T2>!PnsciR zxzL=qmq+Av9t5F?2fVjo`LMZzZ3aHD0BIc)yW;UYShOw8!pEDs{$Thujb_1Kt1c?m*H2bO$;Jih}ruG zO|LlkN#+7t?MzKrpZ3v1Y^_X=L_1qNwEgOAi}(+gG^aPD^7iKR3j@BNG2}*>wnmKs=>f$v>%7O@-ueVm6`!MY-!5kSr^}hB+&HN^CG97;!ONde#f8)wSmfi}soBhK z(Lr1)rAsO*MZy(%@(mJkkIAK81C3T<$n9B1qq>oUIlDhXRAn1wu`6uNj(TQ09|red zJ{Hp{}EO0FXqj)BuxRFL49-E+b_`n%|p-fKq&6t!~g|kXRsKSn_4k&U; z&I(fD<6Bk{2<+Ti&k3HGW<@EKg3c~Z&8W9Ke1X@5XyxmxSq^gyQ2J>NTJ{Iiv)b}7 z&a`GN`M;pH;(N-ksy*Q|_B-jin>k$czZ4-4tn_V_x6M@@Zphh=jmq0l9{Vi<2%sTb zyf33G#Va0N=~jqTiF+&5JfW-}vhfM*QGfjDZ=Q&)45H2h47R&Hcs z9{b)!(UGwlUsB1h-6} zxVX=b=sZd@({-yACP$99iU|oRgeNGm)yZ8xLz3}+p*0QdFlUx}RkR>nOz2q#JCAX= z8Tz0%5Bv+ZTrkO^_P)BoTc~_n1D5Y7a)3rX1%^kxO10_{w72-}^&NDsG=f|anozIF z;wmFpTg(Vt8>jInIexAgZ7&-S)N;=b(=G`#ra`7dxE7LABqe(*zm4}3zV3-W!AXd9 zuFm!{B}snV)J43F>d2b(7t0Qg9{oX%w~MSSau4@bAH@4O#_1RT#GD+F?C-)ktiNbEgzIbmhsBt+0D)SGvn@Hb^=7(`Xk(k^p@S> zM>I57&7Rd`sRj|6*kKI&#<;n+OOep)^`yg`*0_Kak3qXDlC>}B)tY)5@2zqNr#3>) zsFSfqo>^LC5no&Op#yiiJ300qBww?A7ye~nj*=1jhR)$Y*0{&yQN8TqUI#PYF|!1H zu3&2x;>~6Jn0Lm-B{ATS0lU;cA1@F12Hp0gHhxVk$7sa+T!5VJfjvaKBwR^aSR=36 zLtZ5nLr-`blUh_FCv$T-tyuz#yk%=kj-7%NA>wt%9@6krgyYa}gFaGR zhgY>F96a|C#OWAlIH4ZZSqq{^^$iP82|c^1blPc7=Itcv@>L65Ng6Rb0i^4K?Sh^k zCA539SB_S}KTO(!+4U>(v*I4{gFWJ3la{fX1*duFh2s&pFg_X54BX zHWQ;^?8-!a#+Bml6U&95dx-ffOIP^PYU{Nj@7ZI{WluBk#X4Ceu<$6E3nQ7Bil?Hp zvLwbFUMI{GU+1#Ya&V3UxJGBkEaa-eY5U!tAtZdI#p!yRdCl&%DRId%0i zUMI{HEkW3gY~Z$3|0E&%qYRU&VOY57hiC@w4q*jqmihvS>>bcfF;#V__O=9x*{QaH z6uq01GUy80EXT$yA~wf{nl^7!o;PpD@!I!LOb=1>L&r*pLm=Ivi7Sm04-l+wRjL}n z>@>y%t%Wg;E@}Q@+*0rABer=xX>P?{@htsQ_oJ+-_V@sB3k@p?)vn5b`>R*%fE+t# zr#5g)O_ZirSAwGrrd=&0h(@HX#@8^hlVZ!QLYAWdGM^_*{S_`L4iu=z2;GeiV9&*s4dk4Ou_4`T1>GLnQ^;)jQaf-%N`u@!v#jLxesk3gbeiyM*^}RQJxNxQy3}$fpa{u89KK-d0aVP zAt662kcx`IgSo;rq*qRWK%g#jqE`{T%7|Yw9OzPq|Kl}c=J}4 zVxI;v&}HNq1X&C6bzAo2MS>682x4n6X_s0a*)BA17`Zm22o?^BNM1?`-HivWJSN44 zOje&fzb*NtBlM70!$t_} zQA@XeTYPMei|#Sra#nH|xDe2HM6E0HobZnR8O})BaSPfCFW?f-6T0`n_x+nbT}whG zNQv}intfJ)#D+wiqc}xNo_%cs+KDmq8z1zMROT{_6N9@qdl_)p z7w3>Ul*$nsxRLga!QuWJROM_aJ-KK|Zq+WFFm7ch}=BO*#8L`OMi~I9vTjb~z@Y3Pp z&09u}KZfRUOblli8df7?koBZ_tDf!e2WpfyqczIcp7qv1PvW7?2M!-z!u>{)u0U=l zzvD=eCzC3aD2N%AfUVf$%lR(M)F@|jm^~aA(+v?e!(EJSGcLBiRWUfUmDemrRX{Fr zB1>67!{7@?ecB(fqBKcBHz8z~B~-i$3eVPl7V|-$tPbr|d;4y@+>%PXh|b^XPCWC{ zc}=4}?^Os?i*%H7`a@MIne>syEc`O@@0Nkt{G9(L;cua=bOkr&8gN$#=;DMcvFyD> zs$KH%eLKN9;y4K10|6DlxnYa&__spU?XqU0IfiHES>O(xUOvVV;ngA^!EN0HS4RsT zZ?xWx(lI?wTt;OSK)ha|pS05i*1uvIX|M0t#|pZFPP8I61F-||z4ahbu+T+fL=?$( z2^o>A`a31K>JNT1-Fkw#ccYlXtlF_5YyEsgcyq73=!?|EQL$THX1lcvWI&Ei2(JD( z9#OjW_n12j27TQQZ)j$ps+OC z^xiKtFj4N0hyoW64jz*bcUl#DmxTSQq`W(Ab*&ZQ69VyEMfg!+Lm`EiBposDXmjjZ zW#wOQkStNRKiH+dn~OfUS=JQS=u|ATpx~j}(BK zIvt<}18Ox7Gk2rTlp7*|1efXpt!NpKEjgz8O)pwiTK?M+)Y6mV_;mL5fb{x-Wo(v` zr{rI{Zy}ngvBVY>Ed+AVeyAn@q_N43zJTQe@+MP~?cHuY+-zXl_%KGFs;%{;$vI2m z*#qMxs%7lT-BFz8?UrC@6B_et6a;(giem_7zX0Rt+738*v`f_G58qs@{sHSo;1$W1 zzAb;*Mcs2C08*pzw#kcQIQ!ekeT;|~iUg>{30VwO zW|cG=H0@dv^Hq3fhRZ6A)Y}uxUrg?=yWokoCjPG4_(bb8@CT5od9GnzPOw z>TS%i-X@croNcYU_HEq4}etx@Rcn~dYWh-IA zu;+t&+oyH*(ToFlR;Vuda4z?#p4)vhaU=XZ`eJe3Nh2I1v(3-ZWK0b|=thVBcGwQ1qwb5sH0PPfb>}-j9Kzb# zbGUZ`A*guax=k) zYX`T%bF)}J+G*R^8Y61Si*0mfZ2D-xzpwEp8{VG|Nww$sG6z)hKPtWypI!RGHA!7C z&wJx4S@pN+w#|-Mb#cDZl2B#MzqV066d!uEH)$xu$>vp+f?=e%5jy+~PZ5}jyv3ni zbh-< zPy)}&X}m*n^Liw|n|s$Mdom%dYloe-%usV^gsA5#H_3CAx|g44?H7AGEt?Kr?(iIC z5$|{<{UzX;kSN7;Zu(2W1(2vUEJa&3Lt7e+?D1I86yvPZ}yh^ zn_-l#T*Q_-`~*QpbvKCpRKzo< z{j{l(2KNLeJicxVr`aMIR|H+H+We7f-X!Rpi6KUZHJFq&t+L^LJKQqV3Ps7BA$75U z%NNPfyM9k!&CihSd9RC)N$8742$-7z(2ig`#eW!&g3V zm+Gp_XCQ_zH)zRZh|8VQ6>fh+j5pdyv0BQFGR%27X9;5mragu1z*BsUBS#~KQ-Ixj z2xqcyrp2;b;zottO@ta`iN5RKYB#mmvr4YyNc#=cu4$l!5~bghzd4Kc`F&iqM0r;s zs29oY$XuSdIeD7HZx60vb6m#1IrC=mIsCjJ)PwBW4JNfzRA#UT>uOy|nzL?FbjjF|16LlU!Q(Fi zSLO4F)-70;@Pw4aHz>ctX#Ea#p#n_yz*_pI&Wp>>dKn~NprI%wm0CQ+H-!5X#Fl7t zOSaZ!KbIz!JVsz^0i-t8h^E#eRJ)1feDz0ApQIfn+}fpX467>ixx?ENQhd>aNo`c?*!TzI`rzYrjt(d%66Qj#qD5Eb6S z1*a2mW)C_EKtc0~KnbuimX!Xi8bP`$qWXe9&W;KxTe&WSf6zv|F-CtHbaZX=Qc)gO z`=V`HIo>?H?V;+iy;v{UG7ZpziyLUO;SpGr8n?n$#pg7KWKic;cv&9VUE>=y=ui2_ znCpk=2Ba)reqg(Y?TZ+R@J5^?s9jg@avCJA(HQcNwmZ>AJJSnh-a6R!a>-JgawAAL z7Ze-1D0$d5x|k=dNpF2C%4G~+hK@7|-JAKiclH}xZ5Z;IHxl+bQZ9iQ1>EI@Sz@*Z zX1TWtqf8MotKfQ9)!UIBqmxAVw_^@SF7ItWqc-YapCxL9mv^8)ZtC-vOXdEudr4k8 zm;)iR0UMGpY#{$G^qpv%6kc=t<0Eqx{KBx{Zim|TZEAZ}54@kk=2Uq%zSUBpHm9D{ zfI)K=*WQl8k~rwt{ss0G+Jjk7#C!{okyRK1!kWeRw3dyES>3L9EkZf5xG7A54dW|z z)WztQnR;I}J;u?`)m+F;?ul6&$$LrFc~?wwpug_S-X`pByRj~trl@;&`%vnVAG@85 z7$@0*eT5nS_{e!u?rMpTOGG_EuJao@Iu^U4Z71bxoo77IfCuc+F)4N|(E|U3&`S+7 zHR^;B856I{lCURmy-g%?I9}{1cfp=5$9wNSrK1GMN2R*+)pqkGULfkvSlLZASz$c3 zOT0u8zMW$L$NXU<7aW$nU=d^uXP8QiB-Y;Z*)kI#@Lm6&Svc*1yh2ujW@U!X7F6y@ zzVK$0z|_sVnXgM+X!mmD(#0qqUsCxOHA&39z(_z1jOMDMlKIegv96bE*|1dN^y(X& zB-r^Hnex5APuZBIJU*oQ2EGY>kxT5qNPz6pasU11NFX;%_4GGggQg$P{Hp{l30Zir z!%TQX6^F~^@1041v5RLH4Jw~^FY(kNU3gKGXs~ruP+wC@U4!E=JRF^`aY5TJMex;0 z%rliMv#Le4JYQACSvEU=cov$@H7sD&&qQ$4NgQH)g_IGDt%5u+!e13y09yYfZp@i# zULqHwr#mR<6EedW{|#aXsc5SRdJ1Tbobd9+L~4ZC_l7eA-ww8m1B+azO)!luk`Kv} z3tGE-?{eMSpW(w8`WIo6kxLMgaw3M^khi-#FnW#cWpVyuoa+F3C$iUM5&j@OUM$5? z^iwy!O(#G|L&z~iZEz8PHL^X~W#-4K+ujPA{dOlja=YjCO)vViT{ysy=)-t1BYEr9 z<^R)jI~ef!z>hih^TiK7h2h6S*xNnd{0#}Y*Lst`ZlxPFiE>;GYl{7ZN+P!=<3CqE zLU|V=wzNpgOHg!UbE5v?j%(46IlF4rT~=8GA^xZg?Axt(5IMd$lCT->iyZ{Q=G|fP zg1zYZqvskMY!P8>e0PS3Ue;;(>@RDu)FMn(dG?p41Qr!n3O-FZI+7aLD}%A&5OuPq zftHyjkLmn(;)4(uIScX2fJWhuQngQKDrnD!SgV@ocB$G)%m*ITG$HE~*` z7+1|A-Ft52Da{|#EM{}u^?O$y{yss zMUo$UXSB+bB%W;LnjlUx$&)0vk?fvpg z+0gHoGLgm$FK|cnc>n<_r_S^xvvd(f8rRlaWxYJ}TQJJYJ7P=qpM^!KIFsBE>T;5c zx?!qLzXG3==*m#8vXFYrD-f8nYOpN;HAliI(~atH<|_GXGL&D}<|S6B24GVQRYL+e zNYYhN_z~5v7~-UXY;m^O123$n{A%C9*UtEoI*uY9@u8eZq{-nAeDA(|4xA)4n$&k+ zT>Flqo4v)anc83c5jzm7d*I->@;>YVX0?<(!U1vBUF_iXSlSR_ z$REo**j3`s3uv9NTR-^ZJnRDNbEm+^ZN&2`{KrMaYjcnf@6LB5Hrhg44rnxl($5{SMi@E6kV|K9 zTMe=y_Vz?uL|f^>1Ks{MOl}w!QUSud2Raa;mA=J!2GzTqwEk7``4P+JgN4M|5Fl%YeU1tOc zw_&gQ4RN5^)%N4I8FF=f$LozN_`;?wu2!7GdT>v6^R|P*fp&i|JZ|k(f_z_OG2GvZ zuz$EI$)rqYB2)$>*iyio1d1*{e?oy%#i#^Hh?Te}0`#T$e{JOwC?Qs&o^((+>{o5gW_k9eWJD8l;-Y^Qa$q3O2lv1~VCCj^^aqoCX z!FUrJx^Q$;66AwGatBEyh=af|rP#5yUGNDcEDW9iN0AY**+SgE4*gcY#f^1tPm)NO z=-ere!lPmMWH^Zr0%w)~JDU5yZjB(^`Tam$<+eW;sB~*wAuug+dx6#eU(L?FzmLo!dDox;6t0y0-jCn4CJ8IBo-I3?92w#1q-Qz*Vh( zPlk@swYVRMpsjQJ_FLx`FA8Qw#i76Ew~j*A09XK(R$T~5?ljaeuf321GzDtu|1mFp zP{Xss|9AbJ_3uQeVaY6oPXhaasEI6vO*jhF$t;D&*Ih369=W$&7-A1cH*fo64DVYQ zzE?1U&p?E4`jeo=p4}k*+kX1j-G2^0G=eI=(V2PXT+v(u?l=e0h|k`}R1Bh)?k@b@ zuH<{)

&wUA>c}d#-6^O^@v0bspz?d^4RtM=r>z;YU}cM=na;U1v>Qi`KIt#MCz| zo)qNFFz>m+n?N_~qj+{J;>IPv+xr^^c^yw%WA<2g80&1q;)h6Fx3Us1sX0rRs-sqH z_+RzcTeAlb+P|TZ_qaM(;4Vt{@F@EXz6|?_!1G@I;2DwL%`frlJpIsnwee(D+t)hI zdbQ#HOV?6sTb+bJb!*W*tzbXhfD1&^MzoL%BssNv z7!sb=U*d=}D!bspCn~#Q!CqAMCMhjwtt0lQcS4*>h7htZ=1{5_bOWVs4JI9`c zp>Q(~Z?-8cpT@JSdGUS5H2Qr;E`5JgqRR#+?7_Ey%zvi&7~;|G-iV9;Q-XB0?ybMY zz|}MPdg&z%e}!ska3WN!VF$v!1o4o!D2?pfT05&tH;(Tka-1Nx8da=;p8<13b416^ z;Qs+#K%&1~Wy}vPjJu5a4~n4>Ka%|s`;In1EzFNCjIWIO3B_o<4gZwE8iVP3-2S$W zeM{T$4GiwH;h$A<=jfM%tKLiOeI$Eh`Cf;u_fBn=Wo?dZ_Wr;?eJk!$w7`g^eO1u_ z!~3X~zLiuBcSuaX!$IeaHtO#Sb&651C^aSD8>;d}Tg>@6T3e6I^3PlO=jDGt|Hg9u z)2zE!EPu3_VXiFaziL}`z2zzOmbH$FL$Flo4WC&8$D|TCn#%c4|J3^b`2RuuWlM`5 z^PfK@{~wj}N1N`bhYxgcRMVkpUfQ9x+kIlxD%0qHqffM#%hWlkP3BB#lk2O>^tE+( zLv7*^t(LaKp->WeN=ZJOI#b#vRxZaZ;+)zyR+r0h@Qqb%GqC~l@9Wk&dK8xbxRw97 z@|pR|lk%6V`v%_q{GSxeqc&nm!ro2^ePMl$wN1QQL@2qsDkw5-S>kgV( zI?FJRKZ}M*RqW}N&Iat+yI{`&>^Zw&&jswcQ?P?aoM#N4c%G5s1Sw--&Iio-lQ0(m z=7K7WS-KF?x^PNb`O-yD;*0ECbES&`y4ZpSkGKTVxMWhQmjdR}Ntnw3bJ--!<$$@o z3Nuu?!WcUKigF&`g*?7nhOPwY$})5nKv$LXzZz1yx+3W(F&Tq9fA(i`YgDcNBY`bHY?{R7uPOI-#t9T2=d<~rQ~euo*~*PLzx5hn9=_o`rXh1ovK36uf;-Qx9Z>> zmja!>H|BvAMgFdfjfjJJxL8B-cVB4?-gC84@7&4$9hY*;&Wu|n8PP|293Vw4t0Pz5 z>Ls`GrR>r5C#T(VqAvpy80Ii|_a%nb+PT<4CdlQ$uM^6Nhu)x;^h?pg7&*mJN4ER` zR=?R}>o=-yaw)KxM9big^NfsGM+Waa-{^6OkZyv%wQq0-j9Qt98CfC7`EL_%Z549~ zk2o#isug$cOgVUwmPWYL33Aqjs*HV}ujiuIwO$c%v32T?;0;%TPtW@?ynRG(x%~v*{z$+6 z6yENmZ`TpF0+d#M58f{8!?*9l8>8F~T3q_TdXk&b%@K%-YE zUHizBz*aOZgO*Iu@{-hs7zJ(GG;$Al3ThpCROaNmgn$-8;F}r|p7NlU_9(Y z5KgM=Mr@X1&~lC-h367jJZ~Z7CTc56YM|j7dPs=lD302D6?kqw2?;#8iFt+)czyxE zB88z8O|)E13jwE6oQu>8_PCRxG^gm^@Kv{C#Au9I7I0Z|QxexfK|*#0<76k`GtaDSMLE8uV~zCyRZ148FC%w|MzmFzOYTmH zqry^m;-5o8k1GS=tkQCHPoev1~+>d>l?CdbuZ@te34wHlBHP2U2S>0RhDxrECU zX1j)zc`nmA(`CB4U8Z}E%k(t6Ofui41lS!vq=%xxiW02>`ZcmqJq6fSKt(^2suK*?6POmRP#DXoNBu5!g|f5j_~TDqT#)^!vpof3q0 zt0A?<(I+@8-N$j~dZhV`}`HcP9?UU@oZ~y<;x5;EX4Y$xbcQj%@1gbQSt80%%TeJzG zmh9ZAl8WDtp8J?>U}huUF~$CSiR_17Q1}sTyHR<+x$4gH-uG4e?T8cR=Yo(CzG-@# zXFe?OHt}|&;xlB)ebxRzM!4<92!AuoX}46RJ8&PnzhmDp+-}7A*8&fc;}>0uer z%8Ojp_st#9TS>rQQrGk{Z*w-Li41a|%&gpNO-Y=Pk(^{u`q#``SBbR=#p_KB6x0X$ zfJ$8AgXVHt1@(`JBPre?Wcc~;Bm%up(QV!VZ4NaYY*{cpB@sxk7TRad-gx8UKs`1+ zPFU@AGO}a4VcvcV-q~qHZyp@IujwT&r?~^L1hC2V$DHLg?}v7KBr4T3YHqDwb8VIn zJ4S+9Hj@r7(t`O1Xr6Q*3ia?txSI|1cp^}bCj!Z*UJhx4=(UF1PGO`ikZ3ZeR?Tr})X8?0Eq@qk~j4G{- zh2+4o7r8u2>{KnHc{{IH$Pz{IjzIWnvWO90)%z?+&xa} zL&=5VTr^yV@~LS)3Nr1VANBdT#I{O$i%8sgBo}vsyzE($LV5Z3WVMIPihG#fQxDO6 zu`|0rX&_7diVyFP`-unoMua_e|FVCQ*qJx{wEGj8MEsh-Ff^CH;XNh~@hFHpokWx! zJbOdD8}ORDcwpzkQ~%oGw5dI=?|3!feBveFB)^4?7GH^yA9-+>x}cUaC;|M)W5zJQdp*TuF{2725XNkQdI)RX1^xb% zP`>XZmG3*5No=3j0%)%S-niES1@*WUY~F-5UkXP`TcDXF;$AV)#p=@nJZ$N)C^IJB z@rrTI6^QUTZ!!7nr7^LCv(wSEfrMt<;@_8v*^t%f;t>n`2} zs^@qkk)MS--tf$J=}rJH5C*OqbV_Tm5W3 znU7)W+Um;Py$Ba5-|NGif|I^oEZTkvZv7O$1ol6ygYBoH+V)SH()TF?S4DVw&_P#O zwq=}Q?H9&y@R!C&&8-IYs0(9PBqi0mnpu?hFM~B2|H=XEt)%)^3uV0JPZ#F5+bln# zc01vnzDDvveM#SEsY*x92lWANvORAn-8;D*`0&8D2({#QMN@#zvz0K^-n-rcUq-p# z7#a_vB0tLQFfE+FPf2!|&pUJ~@q=Zjx{cFerd@0@(HiaURpX8^ZfRVswz8 z<4RK8|KYI*e@oLA?#ZKFNc4<}*o7>8&%JrHi5LVq8nM59kf!aqFOOa?QHl);J7{_C zo*DOG`oGI7wU~C0VxJhLsd#@6;bE0h=OIDQGo*OX!($J%vl{&&kJem+LWp9=(k%V^ z^XL~-31iNL!}8zVLem%iGp|H2{W@B!1*7XdzcH|8L17CQ@jj4O8ZeJ~n)`!yujh9d zSc0I#$w$0@%qxvp!!WJOLwn&{OZ&4)}QLZ*9QIQ)@E=ex6E$0}4LfWI)BIhYSSp=_LaiK7C{WX$zcdpa!2R83^Gs zKn7~@sgZ#?dWuK}>hW1a2EzCZk%0(4Yso+ZKI_N;)&OMC0a*F2=WjPA-+iX`a+33x zs{B`lUm3&Vuc?e!8B-|#Xvr4xT^Lh$mdDgx)|eXQ?l!deTN`2J`Q z#ozR_;By@xiP^2m>1oZdTE2ETOT)+*kT`xdMyIY37+cZEVsD&gB2$EyHbdNFl{=1`0k1q?qg>O!4O^$2lE%3}J z8=#!`8EDN2%Zb*EaMssgl^&t?jBwtUgHZwIm@eetpL`Wpf}I;)-I?!1u8oeMT|(#a z&+km|axBWdU*E&!Xb%C7z82Grp*>l#yT(Tr0c*w-U|r+r+=%PqM@5lKysb$YsfB2V zVGNmgdd1 zM;({5VGsaVTUwIXmZswS*Q*yb*UU1qtB${p(4G zQxg*}j_aKeI_@OlV)E}}!(6~AT5WKf<##4dKB;GGz4hb|FdDXM5#Cs)1&i5tSH_YN z@*jN~Ur36pIDS2MzfrOIf;2)oCMuC|gtRPT_WmMdGu=;>tQzc>1Nw?`Z9=x+qIym2^~UpTQQ&Dquk@h5)LGBttGy&2{|&_+~2iKf1+hVUuKfkUYV-)a?udj zUM}KsVVWojXrdO<92u#Jwwa5#WbK3W$u*=0#=#N?CywX4a;`(s-tMgdtv2y$+{N1N zXwu=*q{Q>sb}kZkIiT&{A3K~6xOQzjE^O1}k5=2|s@iT_Z>8=2WZ8g`ESjO;tf<3L zZab;mb`GmH`{g9!kyvejM!dQ9F+(1V3O}zY?7#d#LBlqbEE%vuuYkq#aSXiJY4Lm> zMniA_Iy>X{yB`w|Q5yT{z5%JSzrbkhqal#SKH~9d0gcDKWla(@;_32%Ky5iA%%qg| z;f~t7X|t7N#0HYC(TLX8X*yw?WO6>q?S4v@#l*{TAEWjP(&57q$jNk+@F`%P(w{-x+g|fUmkO;qdB`RB4pt{ z_S-A{cKbYJ_~^REZl4+0KC)PDA4j=;WQ!8}YhcWly9>$zduG7PGK9kFHe=QqxvR3LuFC=u#9oYJaG1C5Lvg^4=fs!X{qx^$LF?|l{@ zc#M|iPkZ14)ja!2cs7iGhlh+xPa5N^x^m7zlxTcm z;N7oI;oZ;MyxR}sKUCN~@0QE$^H;0SEvp*;d-qqy{}WTje~gZQ{~pHw6IJ8?Nkh&@ zdFW$;x%Nc^$37pdjQw5d^jAu!-SOHNJ{PZj>N9!mQ&qh7h5xI()(5m!3%lpF&N8i^ zv}nD&iq_k66ObOc zM)A{0hZ{Mpn|BM8!#<-q5>Fxh-6ZbzhKob)!ZG~;cQyT+DE-}K`af;ae_)x`V$=VX z{tAD6%CKAF8OkH7`Dz>GtKL2E)n|6YSD&r$)lJVazB>MCy!2^GOJ~(yQjApV-FU+l zy&G?M@c3tq!6TnFQk*2%dM(cx<|)t79i$1MYL8;ud~#InA=$o<23I|6TqkhkYQhO8 zuzjPI&y}@0cD4Jg6ML`dA2QQf1?!Y zh1tGGWEA47=z}tZss0W1Q79#Bn_0GAL2a214IbMD*53@<7V@rj-rYRqD$i5TTl3V@ zyP2n6_?+|9-zYtv`dswzSJA@{^mq~I@#3e_!%67@;mGHqiPUY=u_&BqT3a&>LV?r1C7(=5UGVP*%5SIxbjRPzP2}{X;pdkS*e=@@7r8>=wypV`LOUx^&`IQQ3 zQp}07mfHSDHSOkDtpoKYB+{&iqlu2e)6ZUd>!m5qEmAL!?;W)Dw528oHPTnCn1C?m z#0g6=C61KTGuCm0ep8oQyY|oQG|71Y>jgp*kEuMAQ0cJfc#}4+zP^e8#cV$d-zS9j z1DoHV4{o$ZeguVOvXy>=*^PT3R!hD_uIEU34+MQOU_Tq?{$Y&puNi28GF(V<)xM+i z_t`SnunM8H*9;7kqP$eL_!RCBpg&G?^;?ie2Kv?zdD%dZX9pepj$y8T8+z~u%hCS- z4Jc*3)7?6q6!bTj>+}pk4G%4X&>(kNI3X&i;ZgAuV^k!$QK`AJp#NosNl(~i5)psY zTS`8kJp?%4yAWCnKFaeu6Myy#cn-(-*rK6*$YpdsTtd$dJjC4biqW|Z_f&ewNo3^r zuNdaG*I{hEZ?Jx8^*eGYPrT;Op}hKA%kLyENkbX%$R;v)@2f`2rSJ<}HDuHaCG$eb ze5_>uATDpl3nlYjz7Lk{Hm~1-Wi!cvcf4whN)TFt&tefP(GA20EEao^_&(&3pp zN1EyzmdsMwZwXWSF15~PY%8`EPx7xDBf&Q&`6Pea@+;5mecF6^lzh@}>aQEn`f9Ae z+virX*P#t&7h;53))Si9$t}nB@!gb92B@zT(m_qO#5Z zBaWX9A!Rv7LO`9vl0KuLk&N)4J53(K$60vZ4$t4#XN?&?BHX_SM^X!Fi(?9W;zqBd z62pwY3$)v?Vk_xzczN_xY6_5IC;KkgDLQUjf+=oe9mI50Q7hx%_1c15fw~@Prkm>^V!H_{8l? zsXos_^yizsVCg3(yXC}V=o1XqSE77<;vra%Ip>g3;gkMaVdu^R&wbS}&trcq~|TetofMU8SH`;vX=}6KQwv-^y)|JMQ+}ff%cD(WAkS4Uxqy@8SRrK z;2csvG|-#;VE7~Bwp@zH&iMpy_S~>E0Mt0B;X~ur4F}eIWYqE5K0mnvJ;~_DEH%mH zJTG3x%Y2H6o(0egA*N>`(>~%8juZ4kcKgy^De=)k+K0w8vV13Cl?~jiLIACKzUL*0 z5AaI|x!hU{{LJD>x6!9U_~Sl^-NxO{k=r>-4zKX4CLy2vz<3k}*l_9tqgjY^S~$YL zm&P4+n72qV8HJfKz`=|ybXc;MgV;VMNO`X8r?S^I#Fo82G2$c?j&s3qoM-2(JhX$b z2<5jli3q0>_J)!iPy0CIwrLU{lt|uhN)9-{!5wGH2r6GCE7M$Po7q ztmY5m@ppuW{yq9J?ejcAX;!OANeZ8l+`!qK5cW-@2jsni*-|K8WXf;T@hlUUeDl5; z8Myvo|DhB~m*l`CCSPgjU#`~3kCKVXQh2fA^M>sq^wT*sXU(CMO3Am39$15# z$+vBeMQ<^fv46toMf<)TGKS_L-Pf0=sNWhVz3-hu?LMGhiVU@UXqdV!X=MbIMs5H; zm+(de;0`gy9a6xD8FvWocAajjFYO|O1jz2}=f7ke6nxphHak#z)si`w&k&4L?K6bS zjqrSq>E_rzE3hw(w1~NUiz62zWXpD87~Vi?g;`h174nM;sU-Sf7OKjDbK?jn<?S|Qm}P3s)Yh3dV7@c(To*en{%=xeic-YWFu2<{K4DCJBtX(*B zJp0zFHR z*pthTdUJA7K5?UCF0^t$cF>blLZ1H;(@PuSJh@@sn;Q{)xe?Ky(_+Qs42LS&bE+*j zD|CF=e&R>Du6%&2zAxjXvOpwkkKy%1&Dnf;GEWKsPYRZKQV@8OscSh{ZR8gh)Zp%U zl2+zP=x5PED*k^)4y(!K536PA$;0rbaT;%~4k51-&HPSb^UwNl-GjHO!5BO_%V83P`vQXZ+*74)SRZ>+pm_z<%V&pgpTe-`s&H!Q_+ z!(1GAVhglOE3`}7B;M$%x?A}mq4wtY$xp;`=GL~Hd30y~>SvvSIU#hXSPLj{9^W5Dt48OiTmjTkYpQtZlUU+LSj1rAL;b(%CCXVl5kaT1r4 z)w$BfiwWD8m#h2j=IOco<{7MiDZ}uF{!cXY%PeY=ywMuzNXDqie@pL4#=;b?)*G!ahhQEc%~)Mk7(c8h9CVDKe)%6PnOY|Lj>d2Xc!Rtn zN*cp?4#qN1wwy0;JnlQ(5E}-J>`2IQ_*zWvQz&{8ADUmU$&C`2bq|K|u4Q07+8KlO zpn9F=ff@EZOIBqwEXt_t3$`G%k4NKXc|2T?2l}cLaW23yjGF}IMp8=NyXJb?Bg@5U zMh?Q+iJiF)em z@_%@&7t{AZ`c~fDOvq=R#|0%!5Y1CeUPbN^XfY`Du?h9lz9-)3#F{&zp4zZ^51&hX zr|=@oL=4nC4-jk}?JJgj|wPdeNTZ~mkq7w5xa%_+Ca*Kv2tf01v& zc}pZC5O-K`KCN-Yk>MKEMyf^30Ub8b-NDMzL1apOziwfpOkJ4FBORoU^Pvmk@iE$2z?$geaBnRqlC%oo~ zJe9)mgtjV-BQCN2u!aOALTkcVby2I<1a&Zb)Whr%hS?(mr9G%+glou6_6LLK!xdfg zSmkU-iiOQpd*#gjy>gT9<(s`TbLP;@+*B=dwr;ig1v{rQQ+ws`P9>fRQr{xH#`r{f zW-f#NkAXAryXciqJ}Ycc?DL?#a`w4klVIzN&&=&vXM9g`g!fiyHb z=i6o7Hl(I<{@twShSX$^oo7|(>Y(eqbPoHYKE>}ePif=d1CE`AJXfXXUfo`aN$u5E z)n0Ak{Ho4ezP~d!ixa4~MYFdnXAXAdrdTQH?at+gx^uQaA3tBs=RDTkm`i?and$>qcQbH}fWDd0TdP>r2FMrnWIN2YRIYJHh4yg1b8arL&&{Qi^o|joEA4i(<;qUA zV*6lff61$JbJgdcxM#AAwtqf07h3Bp1(zu;TRj=~eNRG&kc%^cDQf^n6>aCzF;uC;-sSfHu*)8^ znH-+-O_llVKCz*E_oL@i!@XvO8;Z??zN7A8yxaE(u@6+=Bg{Y_=*b-<%%fwPtygd# z`}cHSSd)uzGyEm}i~{Dqo|_Nw1E~tU0N_7W!3zQYsH+0+4e-ZR@IC-9>#o3AfR|Un zy#TMMg8Km8uL|x5_>d}i5x~E8Rp7+{|5dHPO8`DRU4i!nIPb2&2Eb=j!8uI7D*RG_ zzwNES%doyx`7HJ z5BY+RaLyhl*W%YP{y8xwJRwp)f9?s<5Mn^Vm`scHp>KYSe?r`$N5<__Q8_sY_32mk z=jc7Sz~>3>_9Qr18T|Y7zUVkX3fN6FaSh!M@1|G`;}=n4$dR^ve8+5s)v42aySxNf z3;HObEF;yd!7*nI;?6s8rXvcbhUYSz4_48h#cUNxaah{`fWjIWhY%nxS3Ssb-`i^t zB3ICRk@1dY_In}S>&c4jj%9YQGP`40r1D9o3GY%yt7~UfFZ*_dW3O{s!ExuX2QMK! zu$O2#Fl&R?@wbW-jUQggp0F$jwCE1%E5^AnBCd_3JBI-mKG0+4+u&b9zM`D#k6gX= z(l*&%e{~-a?cw#+ApZbB-2Uy7(djw!EE%loKUQr?=4Pk6pu=qs3+I?69OEW!OBmT+xD z(2mXZPp@5Td1c7lpIRuj@D~M3`mwl63#;OPrQAB1O)aVL1cX%+h4G9ggz;v2`n1ZV z>8P77vUJ={505*0dUYk!H-@;Oar-s3auS|Rm6Q`p?4ImKcvgn-6sZvHtfy8sAT?xJ zjK|rSud17pPvkj}iwt3eoHsE_#_Q&qQy)+3i+x3Xs2l$T>#NjKE0=_+9D5kxyC3F$ zwOJqqGfS#6OzplI_P>h@5SxQ?QKW?)GQxd#Fv^vbZ6)IPbXQN;O8Q9vDR`@&QPQ0~ zbZ?FS3EKA*az~gbd5n0V9#4X>Z!wD7;btj$LaB~qJx9RX^G&;ZHBkEr8 znMevM^p>CCp4jrQ@;sLXN}u5WTBi<{lOGq;o>KDolFbJ_c%m}^HJxDEs%_%h&eQXx zwEMO2svvM#VLwucLap31y5{rH8pwd4>qzx2o}E#Q5-_HmdLq-zB2j~v>a!jNT6}wg z+FDLteH3f4j>qrNRz>l+^X9H+)V&HijynQvZ*}HRqH{^-2_PROwthIst}`|ehnpCJ ztsiQ}IGK#;mkuiqofB*7W%saeE8$JUc4{@$KbbIZ?gW|MR94nO?Fg}99=N2s9DbLZ zHgB7D6ydSEUxg8$UP8VVUmc_0iHXBq3cC z%-d_stXCp+Uh>G52kuyFc;M;VoyQrUsSV}iFJ>?BmIsb2rN@S+9bp!yj+n^HJYN`x zof|P354CfLn}zPfO!QdukrAN?SdiF|1kMDoZ|xFf$Q!QYq2E}PAJY%n5Tg+KDjoSy z82w?OBOeYr@@g}m`d8}^x5i}t5H3GpXTR^wMhm|D>bLv{0Z*`x{F7hh=JQ^T(iUac zY@T9K6R}%?9*T?}GRu%4DGVNFVqemf%e}X_jm8T(p)^%Od%h0tmA&qH^Ef?^;EDkZ z{lvI^H}=mWhTrahRoS=P>=He6<*gwv62cj8hN+FU zyXJ7u!`_bT97>XvPFwzQZS{X?TV3M81lzFt7{^8WjU1Q#UI=Nl3Y$)41SS_S83D%O zZSgW00auNEH6s#dy!YJ_ZZJ2M&8awatFc+ z?WR1A%ySYQ%UaXs{?ckk7j)&-uKHJaUdDa;EMFv9ZiwX7EX~XE7LinGUY4Iv^l8!h zEO2OPim@<14c>dba@N}k`9a7}5oubBH&|~UxvNW+)W)oLD#;%OrF=d)>zhRFF*E1D z*CR%Kmj~#b=Y2jVE2Q<@4Nm(d#A*fpkX8wNP= z#!k1tS>8kJD3tgip5}|BMU2+Bh(52~J*z&!vvtRlgxKCx&L3B*6M#E@rCrlnvuXp2 zwgS5eo-hA*aX!A@+@HGoNbu3@=^g!Oh3&!%^)yw7wJ(_p@VolmTAJa!H2zoW? zojy%IjHbsH1|?1Ivozm43)9<7q_4lUH2*G|zSs)-H2?FoITlf@_zY`@P;6zCXI#Cir{~tw3pne^fnj_?R$1ddmum4BLfuulc7v=%{Qk&`dNQ9eJZ4%t4W^*=?f#( z^j1h86Rf7ULHg9zYWj3Y{~%mVp8@G&w36 z_VjG{@`jq0&w=#7+-mw<_~z^I%}})Z%{L(LYmm3HCht7R+X#8PGu6EFonDln7mYQv z^#Uk63T3sLeteUb)wum;Gx~ZI`IeKjD(dE32z~pk1}Yap+L&EUUkvHnm1=quq+4oc z;TTA7t0})3(udW|g{tW-P7i*kxIH+oX0O}zHD`O>&6V>hcekrHYLScg$ltsa zPmeTlR^p@@zhm)@Zv2jKgLE~_f2Zbb>WPcSpIv?1Eb^B*?_K;yoOajGSIL9lbQTMYrPB4A<(2SV z&=>WEd5Z#AK@Pacm_8+x1t?B`+Q z`iam*tFbZtwI0>k#f}m!^msuF-_)lGBc>*vzg+ViwnFp1P|&2#UQIr@SM%Lj(EK|J zTEJeR1@G(8BBcRMIjwtYc;#f=omIW6qzUJSV9sRKhxOyE@l?ml&E#l&(-6Su8eEA~ zFV%_hNr*_i;X%AWzZBfbVb6va-oRWOyhsJ<>L9}WGi>78R4t-*0u0|JI>y;lZ@#*O zd$?=NDay*pjM9G}Fg3_y6inW+vc(pFoAOaU#2by+J0AMAo$iRRcNmpA3$&f33{Qy1 zp6H|vpvbUKr}q!zn(#xvn4PJI%6_<#G%9<0s0@y2gZ@f1mLA=k1AJ{HQ)w*GMzoP2 z%(m)WLa5DV3^)kh`+;$QR377UqQ@80f7Dh?L#p3CxLK`mx=SN z#CV_ktRg4HZ*}6YlP1ay0@)J$St&rGTrGUAap0qJ&IlYBs0jx~yyFQ1FyRp=RX1Pr z9MoIVU$Ums{Q@rmewCA^8k*+un$>)u75vw7#@{v1DFr8&M?G2N56>BY(fFHI7;mX* zw@!pEkMOoIXFEnw%p*MEoe$xuO45S}QM{jyK@_Aafk8A$0>Y|RfT+MAnk0TBmJ5HG(iNK-~pQ81)3lMO^|^m_<$z(fhGii zh6I6zgh~TbBP%B}p8LIu?&b1|Pz|rR93(g~>e!%jSD3DUB(5jyUm1DF>MP92q;SNQ zW|s3(f3Of|thJ9|90SiTG$8w`FqZsaL5lZtYC0Xah`koyzq5dz5h>P85i}d1(z(Ab z=$NV|GI88fy{;r;G)EcgYp?DhYy4}0lD>2%#_4;^$DTGRx8m*;hr3RUng!{u6Gv^9 zXE&9SHIT!) zCt&&zrF#N7k`Tvl%y-%q^@pPKjzjyniv1{~eYV2JO#MZmNA%VVzLshUPF=_|LsVB4 zDzUphL0Dh3-L%PzCPri&A)c8DZp>d+wzNatm%y9EvnFzgQu37c6wh*=hnz@%ZO(I` zEtFHtB z#;}X6xN}3Aa92SUOZH(i<4M3XpiB(UI0vUEQ#`w(KJMVR+g{RXPyAwg`SI<64$-$y zAG*i)K^01aU)BCpr~T=~jg3*gyGJ9(x?`?jIK9^tTEo3}Y%T7!m$TL|2V1LR?}&I6 zmB4%HS+n5c6+y`Zqr{a~95!i!3s1OpEpU1a@G@dN=q+|ZF9Je)r zu|*~V%|Q7TdFc@Pl5kA`7Y+C)MwYQX&zZLOdBCFo^sIwbX*Yb|v?p9`sV1T0Uy--;D* z#J*~8TQ)#X2vMf(7D(2wgS7Es$o@9G5haq4-w&1bm*!qhqzmu{ghthkm8}NUkR5r+ zl)APA-hwt{Ji8U-IvFtN?=UN=a9Qs^c#tIO{~BrxxnI>Od-tBUSC;FE_>%ZCA5q8_ z-)nPaGSYB^p{X!_jB6hQSwq@0H%iL6k4yaeC{RnZ)cT0V`m2 zSYgr+S|U@U*~m{xBFrEV-UkAe@dsWovw=Dqmp?%K!LA^b4Fa#x|FZZ#;6bbVgCrP` zqXCe59oPkoPZ`vFRj3JS03bIJAr~O%znZ86$kDgsAqS8mFPQ)_xe7noS4X5b{DfKnVeFi@(>kYd@qOPV+;>y= zeW$W_N0A@UeJIpoIV$gm9XTI8y9Ms8cntpH@aOtAyEdP$JqXG?SDQ>uE%M(t+5S@X zys*}m?1$zs|0A;~{MZbSv-`m_akO{6#Y8_wc7E1CeHfWd+w3Mg3LGr@ER}7$9i247 zPPG24{yie13@A{!8tp-7Jd_}O_0)EAj7&r?YLDu-Uk0x7%(dp=3)h>{F76HPQ@56i`WUY?FXd}Mz2Js zlOGsnIyutOs-~@xi-KcGyC*5CP?q_s(m3SY6Y+_J#bd6Gy`v`6f<)9@T5#yWWkG3MuOkrO*rVX0sUkiCL`ssadT5nK{&OyE!!B z4s*EiHnTP+!!3}y15%^?nA!pJGlgI+b@V>hAB#v^6VOsC$@4!?;4O!0pV|pJ@^Px6 z4yk^1;{N=}BB8cgWu*YK-3GGT4w%nV9IK)Q{WXzOE7B(OkUJ2dxT|ytfGPo~ zDmP-(6JH2;*hN82*c3+CrJ+v5k-wsCgK{%Gy#muUIkB0$%}S8w1oF)0M4MBJMH=bc zuZ3dLcDhPuH|6^(V$>jQeBg36Q!SY*q5YjixQ$WZJ>)WhRDSeL zRu(-@aUD;}5rQEB#~t^(I&5CQ#!PShI!Rv?Ael0aOIw30h}%J0CR0}6_XaAjs{-IX z!2ixtTwpyjcGx;l0s$$(?WGiGnRXqn&VMZKAU5DR!n;L4{JEO?JTqwrSFYv(`A%Xx zDO8)tEuJ|j86lwA0+VO(>{BBnK)VNfAeUsD@UCU#YQ3bq{Fah_psoH4X7kb1>C}7u z-4vcoZrJ-OrK`9$6JDS>2W&UH@SY$Ad0b4vSQd0nV>GuBZx4z!g7%>UHJSp{X#eX$ z3Wk|2d7_{r)&~gQNG~@LI=e8dur}@0+ZiUon9<4@$IFw-S^*4RP4A3xvA3V~USz$W zLdt`;lvZ0`)_dPx#Cn8WBEYCYfS~3)56Va#l)h29*43hM|4H6<2b`$&I|erC z-Sip#p>W>`BlF^Z81VlOLPYYg{V>oT73UZC!bIGGnn&6^8ktKWj`!x$xnvP)Je>n7 zUAN2%0#*jlz03STPbvAY#iEB&{=cX+o=u>pbl{7np&vHm6YnL+0Px*S{xTWU59=2R z!;_mz?7p2UjiEb>0Jj_g?#g;2bf%jCPqIze#uTRw#EC(_UC*F;mVmoA@1_Jo${ypIwZ|# z08v1$zX|4=^5pJ>{ou1EtPxymLXdZGP0jKbl6)(yxJ!d1J?JMGf6VYAzIgy64Z)+R zBz-BY#A9&u)K;y<5Y-5*x6=~9KdYX0nw>r`i?w^l}aEX_fSGF2PaZgcXDqbME%Kec1Gm{?xY zt2|t-o3i5KN!I1SeR(!YejGL7y+P=EM^jn99NySEo~q25N$BlbJ8YyaIZ9hp`VQ#} zap((R*EC zm7kfmit@|JxT8b4(8HSCV1gu z3}muqsy8$P90`qjV(_SkH zLpXmHWM}&I2>aT2-M*;GQMZ4IOh~yZ&#(tQjmyh!DQ$1Hul$**#u1M+67(Z}_yIrW zJ9CTjJM`_p}sT~mNmuO>yXZIhY-XTG| zvg!k!s9cehxz47yD22Mnk(BL|c9=Hj>Rns#iy~0ViB!f8 zlEMQ!&AXpM{NYGp>^8HD^OOA8t?=uG-`mX&Z5=^4OXsq_7>8zq!?b^QKgqDp$zPTY z2EQzSUf~$1Rp=)9W1v>yAo#u0%x{L8k6h$oH2=&F+Eu`rd`gM zLizHYCXFsN1~NKO04O2RTIym}@ z*HIlju?ThWd(0w#FX-SuH;2WY=8)$;v*^9wY~c3pUB&G($NMs%UW(^MDqmFZHw)@7 zfUCs-V~63%R_+CDelM)eJ=FHRq`zOn2u?E=aTMojyo z-VQq|blT)UW(y~VnT@s0os^+g_mWLEXK>dYZSgnh*+G>UhX7^Is090}3WYPFH{vW} zpLs99_mk3@#5f=%7S4iP&nJ8Bvwm(47M?Owl84JmA`zFV!iye(%b$IpIcuFlp3b}@ z#6Y(j(=W5o&Ujm9OrN!=mvDo|vu$E=>n}~?m^@;*HF7spp;A&en%yR-rt*Pf%$+8=YDTSzQq6K0&45{y-~Evc!KWL zphq*>NMJmZW3dcy>9T%R=~|F?XEi1KQmm|Wg9KT;`SXtAPxf?_lRqw97s4GK8ODER zyANny@w^92bT(sy}2oQUn#{KAG+~@T{}h^ zyDRg6m2Z92O!wB4p(&4=`PN^XFA4%T1iu)mYhNJMSZ}O-g(IVuo7Rbz)*ho5hF%sjitt{wBns7x=Nxz~!O=af(fTNMX zTXs%f(wC*uK+}G0CCG(M_Ob^|JO2>H0cE5(z;J+IR1|zp{<`GxR(;8lzEOKNWk_ic zjlY*K>g-wauwot&5Xlm1FnlH`k!_ac;2 z`YTaMlAsy&yj1gT2=YKv>iYvNm#c|NQtPwi`n9=n2aq21(KP`5b)t|zO&$>J6rO%= zOjZ5Y5r>`!zRe;NpmdBf)s8reO@MmfĐL#21ir=Y)zPH*sa%e>^oFL>37UqExA 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

mG_EZJW`g%!TOm|I9Vy7NUT_zm zEF3UG1JdYBexX{RBZ)@DgH=HYDC5lKgd+ofDWGQSnL3E%cieme`4_|kk|*d8#uZFf z;M?s3p4Hueksr{;UL@Oq_(<=P=#N~zZ|BOKs3;W%=_M_j%#2G|I>~BeKu|4^7EX3l zl?9lMU%PhT$_6*^F}<@>ldpiMfmZ#RumRT;20U#fUOk^y(;CNKJtxf&z#u1&x?A%o z)aBj@+}uT)=#91U~1-lTMYxot^vRCO_{M?w%_nP8Q>(F@}O)AT#)PN#;vVt(Ua5ROMr^DQ!S^=0rYW_ma?!$gz&P}CCJUgc15Qx z8Q#Fjp;jF=G}s%NBB>3$T`F4M$oL#p6*(tc^{m`#3pI9gN3a@ophgimkRmET_Md*N zpZCAwS{bYak&D{5(`_Spz=dLlRjUD2p#Z+8Q@%62Rti}zJV)SC6MLI0|Pa?w&^xe zELla;Eifsg{=m(1&pcvH7fAnQDm6`JZ4$DWFn(pFOvk$5E+pb1BDsAW(-oG0o$Fligfm2*sPSR z7Ipjp3Pk4p58SKlfM{N1kx-Gf6j_qkz_$?{Pa7xw#aD~}<3I3UHw^rTmY}qGw`@(z z`jI6=s4K2kxEeuiM*Wr*i15_k9@(MK35L*q2a#H_JuQ<#nyD<(=v16gJ(nTMfofO!Q1WSkuk z4B`$UJuA%L+>uP_c5BtW5;_g|(MdGrrd!P}BWpoa?>Mjr2 z&P^MyRbOZGprgf8MQ5e>@A@#m0S%&8@EdNrZB#6q)uB~$0Ol<)d<9(gM#kp`N9SkF zYWI$^eAyH*Mr1<9~eDZyY&S7{T2j0rP*R0LQyT(HMm*pM*l z5=o;zkvwK>NgNzXZ@(vXPs>2Y|%M=HfLp%>Fq{iVrqIOX_{316UQ@yuOAuw1;{XX&6cg(t{vFEBmLTwc&zvhkYVS~ zNH^OVRU=n}_G2=nb z3F**X_vG&1odPL)=nA3Zue~RCV!IKzB4AJIIuFp4$XkmbCUzwpv7<_+6u zaI^LWWmuR_8zbxBX%jbd0AYaq@u_s-C>N~C3W`;`2nl!Juy5bKJ-e?@OXc;^2d0*p zB|Q17HAe@A&0SbMU)+c4J!=yLbqj9yc$hj*}`m>F_2tuFqVMM*n0!? z6g+qHZ_=1aVz1!2U)o)VHNx{af@AC%>C4{pG9n1kb+O?W`CY^)5GxU1L_FqRCqo_F zPDZm#6bX>wZ>8Pn@nS9^K?{Q|Nwaijr)y=6bkb+3QuG!PEGJ{~>WWgzo#ez6@NaX{ zTw}NBH-y7AHi3Qe>Uq>GyJ}s=+R3}VpmnBq{KbSnBWWhk9zh#&%Xtic{RfKchcj{A zt{ZPm8m7u4x}=&sm<1`0H#^y)dBEi}tqG$msfd=(2HZ}HvFf^`RW|RYrNvlXpF?=!x4b&KoGByj&6J%pt0qp9l(Ik} z3ljy8B=M}fQ_d_|z-df6D=HzCOpyWilBGm@Ht189NEs8UT;8HBb0eJe*!p?WCl23_ zXGTH*MsFrWJjoryHGl>wEY@cI1gE)tW*NS<8)klr&X7-w^;%srZHy(gQ=dwCRUG;# zLo;@XAf^>L+T8>EUb~_J)00FqV>Fb^tf0oM3UiF-muOHm5YHZK^O-|Q&y1vOArQZQ zi{oJPoif!!sb!ZOCk^18^69}v%gWL2d`GhO0CZh)2>#y;|BnHJ-Aml2cyghI!d$e= zZUqPUeq+OSqi#FMFWYx+HyXAd*q<~u>@ezf3>x)21|i3e-A3b%`*5>yL(1q+wY9e5 zx^0Q33dRk%5IL4-bfwzRTpv$L&05qXU@xvowcT!6rK81)o!1^T+`~YoT(poMG>x`Y z+Z>QF3&ZUYUItorN+slx7D2cUaIgVLVA5ztLWrwJQ_9?(hV?X*GDl~Q!Z>F|88K`c zn^SZeqU_|^>dCy{GvOlab|KF-DPlN4_%T6B@|`g*9;j9V=~3vZ76cd2w@fpJ zFeidg6+TR*u~M8rf?;?ksDeP3OAc9z;kVRD-eDuAr1Q1Hs1ymy1Gck8!ox;Ks^)|} zeXN*WcFMy>cS>RNT<+8{~ z#)NG-;_{p2>>N(pu`{*NRc@I?@2ZL2JxqOCrbQFmJ%?v{ic8#8a*MqJ}vO@vAsqu+NacX={aiV$HJasxntdpKj+EbO==sQ3GA^ELn$? zZ4qGZ0(}Ij2CpZ(*TnZw-{?4fV*wBIa;cpu($1oB+}yH_Qc0W7cnOQj!@DH#%Db=z z=Z?@R0xTHCWF)b}NG^1=l5tO=ngTm&0kyCYZ04Z6S1r$Ga&{G!KoE7DQ>+FZsc<^! z!qJ46`g(!PI=DU*gz14rZc_0{5~#f7S>)WfacmGmiwe8|ow$Gwx-31v5^F)Dyzk<< zhhcq&OBlyF5#w4gQgxTP{$%2U>SKJeCkUjyW;V`gdHpu&arWDN*zw8k&v)>$7uHeu0&X#9X28rYh0;#$G)jHq!U-XFic|3Mmw+KvJFuM<5UF<%rFsb=NLDB6Gm327mq+=mL(@d z@3gE_I(D~}VPq2fr5T`=RA-5kihr1BS`J10%BtjM3oF%Os6nn0A)@7|ogjJpl;x@j zap)={)TTeBRh$Lf2~}JgpJ2c`qTxC1_)wEU0^`p^An#;y^s$XP&g@#QoRMV&?Wkrl zxg1S{jU1n=tRlW)apeLqa|jk*XNU;7ig6G6*r1S(&hbel!X5=e^;JdzgKExJcCOfk@tU7lD!tKi&c%OXd%bkxUWDMqbs z#t16Wno{h3Vq?nhBd=Y@s4)=1lWyv?0Rf0pS1_R|!eX_N9nvO6Rk8ub^MKS&ycCQd8L2pF@Nx6X_zV%~~z;82E$rzPLA zKyO$oAOIbQE_2s<02q7K*NZU!4`&K?ewApHj?Rh+39S$Wwy259*pr4F;Xo!msS^(ylR9K#9i-i}g5fT2e)FR2!;ykAsGiwxbuVV*G9kVC+4G7Z7ltulo}{-|bf*sc}O40$7~ z3{z$pcaV~l-yvU+S{lG2(F=h!NpFQY%347p!;1dqoh2MVDz>)fnF;3j~x%8s;rvPd|SWn}E2u*SXi6j^aGo7sYqGeX!QB-zh! zCnKD)vts~x_Y8AA*w6yXk2w(IS$l$pxuP&E;6X&h(Jl~G*&r#X z1ra|1n96OZ#GhaIACtgEnE3Tm}PdBk7MYi%aojBT2!FSI!D~gfrb*V^!`-lw7o<% zJyfk!oTARLS#ro}93YUBatcQ02}_WL)mM$-v3$eL844bS3Bz;f*@bA5y^)rPL+#XBbEYB_bVN3gS^T z#&`y@_~F>hL^#C}QIrQUGU_vP;i8K(WeZ3KdHN-tCqZT%;9Kx?5U`n?#JvOf=#;GD z+}tG3Ev$Q)_ztR7c_~vA-H)r*XyuY-h?W=?qe6ApVLr6pLCXWK7sf=5!t)NfjYXg& zG;|mN7Ro}jgW=97ZG?6wiL+B5TA`X!)C*c7N|)H86DC(EMTdp?@R&3h_`%Y$Q*q>o zBafSM<$hE?iW!(2?LxEMOx8lC3eh|(x(6SSMFj$|wj8zg9R#t9ljIDB>jk5PG=Wxa z6`3el(;`uE{W^7;tO({>NRd2c`-I|6lw*}An)()9G)GvXA_}v(`oP(airPrt&x<-g zuA?&gEMc7r5(lZ!Cs;mJU=|~2o&f^nr1c(Zbm_=+kbx0l;?aK%CZTOAp)8rm6)O$O zm`z7BdBp=+5E(CCd`%n$3I}3YYd6)$aBr@qfg&A`{4Ubb1SXqC|2oQYaM15R|# zwa}@Xo)rW_g&)XOAXep>NpP9xN1j7776E0Wj2JEC%xARR=ZhWkcJl;tLcT=RS@a#W zEnL4J!SE~WN5Igy%QWCvE?`HAml_|C*E*N*mOo5EJ`c_2)dVZ?2+?^-rC@UT*e`Ln z@~%^^_~ih~q^xxg4DaGh)y2iUZ^I7wEj({W2<|HF+DLv0_<+hXbINRP!kSkJuX!KU z#BC|KA&c}e%yDWMuplOQun)^*tvTYy4V zZp=Pyy9$v?PAyr&m&;kTtI$R<=1gFEqD2mnZ)F!i20C6sMU=roiTd=zT>`>AU`KHc z8wKd;2`M(Oqzt#>&BcmUlKy5KrM%E(EU|Z{#I6+GCeUUFRS4LiN|9E>4vv;AX<|3V z-PbF3o`MKeJaIR$?6}nhltvbSZc*PezIJ&DCC#7)7^u}K?F8`6f6oh&a!kdmxCb8> zB|Iz6luPmXygPoT!se2aaymPY>aKDoKgryb+Fhb!$m2OtYP+kjs4~OCK_5@($~}D4 zZ9se`_#$u{=|K}hmM9xMMYh;Pkz-8F2M{wWwA0rrf%|D<@sU8rG2gucyd6_fLO%v* z$BU2zV`F&STFVjy(n^wmf~a*r#(-Nar+|*Tv-8RcC5<^I38RGs6r*h4HA^d%lJ~v5 zN1U1u^Ii?v2mvmD^dP8IS+>hL5N#`L!&1>o=`LSv8b~Uzql8@^P}BRU4?2hRa?~jo zEzyJeuS(^f74~x@2W2r*G2}Y9j*Me~-<7e#6NwXa2p(d}E98x|o!zzbie4S7&%{yaihpI}O!o=rN5^KKbJ1R1w zjd21R>S=@&K#f_o#0rvt3Mz&jI=YH^fHg#OK+oTz*a4<#cY;m7Cs0S7Mxp^ZeFq|i zH;ynIPsz;q4#{wXV3{9TQrcsTX`={?6_vCN5qEAc_1)<`GDA=ARe|fooa{7rFuaUs z$+NWE)uSV$j<7$YU|tr6c?7XBj=lrcB&E#>ZaLnV#VYa$hs)h;gNY&1@4TDC*ApA4x26w^#-4NSz{S8L<;A{5m*}He&o?Uxy zxbgby_U*g=#$7iWje`g8$?Y&&2PcYr9@1zTR1UG~2A3grA4o;TOdet`l;kcKAhZIZ z6@ax2vMK7Iu_0}|cSE|ZwG|I~$w?l^yEB!YC=9xpMY(0lDXL3HEbqj4?dfnVYu-WK ztW7sl(itF>y^yD&QvqyojO1iMES~V&`cR zqCNusXLaeedCx&5SBmzBlvm~;WUq48OUc|&ACI*QyyI(y2g@+4dUHNe09G%o4sJ67$|Nce`aM+ zlF8XH7U-!ro2`~sfzNly9;fCS3}_$P@bT&*?l!&Rc$f*>b7><y zHvzlOww)EHc5Ldf_VzFDG(TT?Ozpzl`bZ#oXryCaH69T7M0oxp#(?(qyxWu&Si99e}OBkhNo|cK3N0n8SG>H#|s=FC#bJU&>Wp8Y91CE!6 z94wHl0U37Vq&@{8nqBhxhZ|MLY`QTdC&$$IjvWG0CtbnkJC=+qgXgz>^`Nm)pPq#V z=F{e(Rb~5>q7&pqLM(Gp4p6f?QeDup#`}ZM7cSnspqwWoZ^S3e#T5i=`HjEY@c-xM z$Ri4R(Ns4&)0HP4x?w2=@v2Ctkv&J4uYQbNonrP5COdQ!FIs)3%~5n{qJ3)^?P)y! zD1tjgreH9DiGs`#bbL>af7$oCa`|lR;M*(kJh65(NvG1~cw!F9lmmFiRypo*{I2VF zy=J~#MgL+&;JwNxYMjyg&UOGXy?xBd64hi=i^ISg`YuRK@)1YAvHvuDuP1$!FPCpC>Oykna*huAQ3dzCh> zW*|8}*5uG5XH=Y*ffshuCKvhLm{4`ujf(e?ZD~^&Z*OOj&TFH!!_G5lJILm73$Mg0rD;8sZxvi)BhiPZx-W5(yfVwcB#5st)=%hTfG#k|0>p|wWL!2 zStP5(7K>z)EG?~jO=Xc;CALT=eA5b#se4z#u&fN*e`~G3)l|>!+thk&x>Ig z@S|bC*Dwsf8!#|$hGD?xJ0~JClVp`j{V$k1ZgsOVGvY*KWGpAnIdK*|1PHg9e&)9t z)KPZFROi#IE+hUpQ!@neQ_tU}Vn6lpx7|QvJ4-#Pv~v}=ttP?H-xg9hv$xED@zEVA z+o7@_q_r>ivF|yN4t5DP=nX@<;7E>&^bpZ9-Rrl4{)7U(kQ%Ke)zru{Y0<-{av^oe ziFAk#2w$e@@1TRWa^DZBt!L6Nmec-TK#wm51N!^YLwC?$9~XbSBbOdQ(nVnQI&F1q zUY(rhsWm^ZPS3+9Vo3LYMfYqKq^9HwIi5Nr_n~@=ZY*OMs<-DgLs@6rmU;EYyw_{Z zi)b39*cb+>e8Y8})eoUMH?PUZdG+Bu6b$BxJZa1m#)ST3I8R+Lzo0%kFl%0YFe#4+ z%z3KYsN2%p`CuRo{VsZ7{So=xbMxj9k3K9q1f)hz*++acEFS2i+B@?*O?5u;h&T1M z!5V$A{_?Z)S`tjX$; zwQA;oTzPLj91@BRSv;sNCP2IFXg850r=lZ?`U8$Fs8b7XO}#ax-db={axy=I0NiI5 z($~`qbC1;Vg#~qXf&T5#KYChJ7Zw(mmaksBe&gmXcP*36t;bWm?FLa01h+)LW%^xJ z&cfBDNQTfoJ?9y zFQ#vdCSIlFrAdj)>Rp@2ucOlR-{R!trOC<5)aLQzYw7}}E-WoATwkCrUry6!Q}dUp z|0$FHyMeZjCoQQHi|On5U@C?C8@Rtg_jI{Qm*a~I>P`BDIc-4TQ_3R!mIz?!=H?pR z62@D+cI_IK-dIz|sKzBKcW#N^utbf!7Tw;6Zg1J!WOPq{?xTa)OGUuRr>4PXx>b$~ba|ZVzoCw;sN+O>WLBIz&_uioDRvYk z!XthfhXm8$2l}n;;Xs=KJJYfPV;Ntl%>yfeu7q~#W$S_4HdamtFs(!hG4DABR^6oP z2G+)Qq|#|NUT;o2-#F8Q05`VgP*o2r`D>eVekEzXagLq?P_V1&(u(m@pe?Ld9p$Xp zn1tGaZ*xwLDaCVxqdt!yxRZ5R_G-ZZpGE)(x~xr}+ot>*D=`&LdWe+VPOr!|es;yt zBBZxgV)5x5_1=o51%*u3j;F7z#7_J7i6ZO=M*T=1{yXY}74|bXp|rCSkENh(srKSc zriQWXm-_C7mPDUeq22xjW6%}M#ow!`6*=>OFW6Hn>=yaVim1lY^Co>IeV8^+p_;1N zfi0C2>r<9ot#pV}?(eTqQDH==C=)(sR=^@r9dyHlw>oxPeRO+jET&&W2b})$_LLP+ zX<3f=9TZ1&0(AT~v0}FoUJ-p9^wT(+gP;XdVfMD8{X}R|*BtX|{{?aH1)(}|n@Ic5 zZadvUWPOIUt1;Ns98<|c_V-Z@sw~Y(WOss};x9y^#_lkptrlfP+Qo6lD zw|mcsLDxrwd;3X;Fsz$*TZb2ieEhapcSN6~jXfYIy{&Bus6S~5(W3DBR`0?JtffNu zCEzG$pWa3|D9WK}wI1}{_&CUiwOB@8wF(QcrMT_<6l|}mi?>;qH~!7kqK>yWhh@5e ze0o4}8|3tp+fYHZij^YPBxd{$Al1jW4+-$~QR03 zHpfhcC|&xf$Ck!4lFX)$_^MIoZ);5t{XJ)IYolCLBq)vhkUEAjSaKc^^njUKv||ti zh^ir6E{coOITqhj&p^nOhc5x$&^KZ?Ki=1S_xzjNiU zzn!@Pw^nCv!vy>~?ee$(u&R#TQD^SVXWg26R~^4|N1eZO$H|n6#TMYus*lW_acr@7XWrypxC0qXWJi2gow!q5QS)~mFn-$*GnbJK3cY}V&`Qd8 zoduOXQUOt%2K@VXyl&9l?*zjzrop*zSG{+K8DJe7n2oAwCE#;tozoU}S6#eA)cc%Z z=esF{ZBdy!X8Rf4giX4fRmHbc7HJ|E?r0Fm=ky(^e@?Ec!cX1{Zyp=ie2HUx-5yVw zd7zv-%pGY#Df`l6@uV>WzpK8w!>RF*GU7fc@!@Cg5VbP*-Cb%2&dvDxtQFp+7rfxE z9r?6pQRk;7LrfT^>BAwT@%el*;7bc|Y*ig!y+Xffbz*h)Hr;%uPO@m~qfD`| zTI_#QGmiSF$50y;Bub;fW+fTeds#WObqK*;!q_)lpU@L+L0W+;?PS=eQD}BmU_Qc$ zXaHPt^!gCHOniq(ZC{#*0q{0`)0K#XII7?_;tNwVFc@tOD@?0%$m>DnTzyTqtclr(Ic4%hR8QEuHGo7Qt-f=uSvyfI)_WrsOqJDN zT-p^oi1h(60FE3+UU|VahU+Z}@u|`-t+hUMSvApWP#n`lW*&G=-3E2hWjEt?i}MFa zvQeLOgzzcX1V&3K$Bn%4;ut6f4Cy@l)Wsm!S8sG4LaW0ideS8x(k153U0!f&n8E0&+fqs|p<>m*}#gIof9O^g(VWD~>DF??nQ!aWDV<{laFkRQ{n-t!+Jc_~`MEB8k|2*81sr zyVDJNf9QvU;ft4h`#(q0ir>xuu{F%q>60^=T)Cz`$F*9`ujLE*+T(hrkk8zA*9y6M zwd@w_`K&tWQa-?Q)y#%E;b!jBoRpx-$)f9}%vM#UOkQPUYcp4b)VG!^X6w~lL2yxh ztyC)H+~PRoX6ZqWZ#F7!ajW1~P;0(eQ(ufiMwOvzfP8r{NVVoxY7F%CI8d!#qXyP9 z_uNV~_rq4Mn8~S28Z6_|Q=$H_RJpHA9O(=-y)yB`FC`!(?Y%^rZ4%8slTN*@-ZoFA zLcuLpbGCm8fmdr4mzrKh3yT}Mta>NPla_N8Z`joGW14FEVXH>#bu|99X=k?LZs<>p zppcfWl*+UuV=3H&wpF=DIjULSwplLZYSgN?Y#z;;to=Ueg-`5LB}4P7Rw~ykG@0(@ zvRj3mx~y~W<+HhZjpjxzU$za(Z{}!-Yq^STP@z=Z&>wBS1oNi;Fkj4;9@=?OMBliR z=al*&4s@@!S*X*<0Lp$xu~f^iKeo*%yBoPWRbNb|6msh|+b~Y4Rt0holvb)ch&Ee3RyKBB|pfQwyFoV{*zI_#21+6#Cq6F8IvG0`aPRkp?Ozd zqlNv@tz>Pl>U93{hV>8uZviM3L_T&m`|jtj{w z>Pa&`vXr6x^~?rT%?3~dYCT;MmoYt8=1|KBveDGC82gV2hs_$hhfnWJ-x zrOGCiJugqCGS8G8D#5eNr!#J$e2?~aRic|>L_9T#{Of@^y;rN1=a)cKHnsL_+R4M? zWUo879R$|7FW(EV0jBsn8n!}(y8p4BRfP7^Zh>0r)UaVXIJI$T%!uwTY;6{kmb(s> zEU2$W;p>q1RB}akGw0MwoOD~Q#i5?MINN#}ulQ-)N!U||wujsX!4o~;ZWU@AJV)Jq zRUI+;aqJX!wEtIAu8!bzpSdsS(xtb0K7Gsz10Nba@!;MJ9|>6VTC)|~Vyzdu?f z+V*Zz4Y^m=pba|?Z^+tFt2v}8ul|@<4NS5I(Vib^g)vn)(#$m9JTkc2x!k00SWT42 zibBy87NNsr|+ey4cJVPyvmyCKeR>~%-a=Zl8VOU;}*v5u~ zdazSRlpL?#G#XM}jEUJe` zuDj#y+4_%A@o{%kopv{gjR)sfB!)4ct#58s^BJNDi+NCo#m#l1N{dw5Wx}@hxD4vG z2$e6lSj|7Wb$yBXN098fEHmIsle5Yd;sS{pEIzK(h>@sO==~*i15rb?ZG{AM4_-q2 z*VP)F9BxJ{L5WOAyO%gg1v5l`QndxD=?D5%h|DGmyMC4a>D!z1kG@gp(&KKGsPSrs z2+b<-TaOkNZ`Q9;i}3K{!U9p`$K4u1*Gijt0P&TXH_F(ejIE6=s^*-#MLExba}OfN zCCdCQzRVLp&OFh1c`THw)dHSRyY(EP>AGHUA@QnjmUA2Pg{A0rS)HZZ>b#r5XcM(f zto#MHUM3b|y-;#%^Z8sZhZiA*rpx?Vek1-^$k$Lqt+JK7m&M(KQe`b)B?8@RYzm01ZA$xpVKO0L!YD+_c2oTf3$9-A2o`N7Ye)uPz zu~OQD(#I3>SRImmm?bh1iwTws#309$@B27U{5p{a*)T9)8m8Z|lQf#bjaHKeivBv^ zdq4lIZ_C5(b2LAo4r(>j=Pr8$2M{c8 z!+2B-ICtczRK$P-NP00eMS`uvz9 zHUcAi(<5RrnV?-^_XE+B=hdn8>!ZTVy;0#0M-rqBtfn5zVu?yD>!QsX60Ol~Qbpg4 zB{>ox&3O5gQzNB=TviAP(H0k}@zPj#yq{@-opHre2-VnytJMB}(g&A5B#d+&ZWCOD z_;hv)V~GxfBq(nljDtt(2T7G)S$KPXarx%;g{#-DF0MEZtw)DeQLBykYF6gNk$EJB zcj5IaJh(m#*q^R8Rxke8?b--=J1xI0A%(|mdU(i%XAgh@3x`z%8II93Nz%Q_t)owVQ8SjgT~ z7ULbIsK0{9-0108UZo?Nh zR$okj8S!-WwgzdMsP~sl!h@EfDrloI=4i6hrf5}GnEhPE2%3NwycKF&=WlGXe4yD- zjVDXbDSE}UgNc-YTg+ zX@cN*ja6PB?7=4r5CoHN9f+tcd+oG=7gMJG3;4`=1 zs0FFW^m)Xp{fyfulB~XLZm!d`jSS?!T;sqM$+Qgn%BB{^(sINky&q42J5b-1;8Guq zWvoefwFyPwldHW?n^`;q+hFp2wV+3z9ZLvNxXE5T{AP+~D7+ES4CT(spMO7L>l@dpih z@rb4R%G8|G+BxW>&=6*nIR5gpmQN((w2ZqBpoWpAo{>NiaM%KK$~HT_jm23rLA~sU z3a#fk#D>vI(jBFPtu-W;lpsNgyG{sQ=NT(UHqMr&HsP1`xrAz*@D&nc(f0{i(YMMu zBS$@>8QRf`V#bcxwr@5O^L+=biPjtg7~C7Qm`0!QzBG|}(QJt~MEFPa#jtDIZa&?# zgceBHZZ?QuX-gaoVa?xgAt@8b#{=pjZmvd znV^L+%Yd0Q^){6dLMf!)Mo_2*k*Yp%TdXXo1N(Tyq3y6+#DNJT_zztju?K;kc~f;> zwE8Rz&=$wjCP-Znrgi)s8@G<=tMt0|)^RTg2PR^2dePE6IID*Bx@g+2oXeUw^3_BgLiUHG+*?uRj z){_NcH|JDpn`Q0!i{FDe-}HNeXU+LG1Np{}7LlYzVOL~Pr`Tb;`mc}i)kF`{@o!^+ zYGT3_9Rkh1()JV@W>qxVD4tuuevuq&31f*e?i%e>7;rG^r{)tw;fXOxS9E)WzDD5# zNVPmm?ii*xO?$XB9-)9V8}W%GiAU(hMr)3^M!TTl5!X-Z ze@jxR-5w19QTBMucs-BF@0K4v=~(Qc{rJ2uFl^b7io5rg=C4D3rj775tcawZgt0(u z(h_Y-%-BjmSx&_^Nk-M1=(s3@-Q?&T7+-J}4%hJ^Y(gU{z(l1C2e4snYa?~_KOMIz zy`V?@U@L^)DIpPJBaL4L&wz~T@TRAxvc%)TD+L^AP;mqL9bBbs1eh~M6UDi!)l=!F zpzWN(Z`gL4QrzYXOq(WdZ5zeOIUJ;vTTq>4Uyn$!ucgh26@wc*rGNEX@d`HaFzYHb z#Sxvs!C9i&@WxuVoMzS>@!Cy0h@?#RD#-L_t!C5jLcTqo$Nilq7R_Yo57hyt_0rT7 zURqUM<48sL7Dfm=;;%p?wJcqQB}t@jjlFfN3T?K{TsH4A87j{k?q)7cNMFbD(?^1d zV1B7dF2BEW503tq(nnFNv>Q+#4|Y8w4b)}##rRJBru(9m+hY_;OOHTW`tT$=H+hE= zWmQNPJFKOZ_0nq%;@*_iu{CvkZGnD^^mFNl=ZreNmifL~&Cz|9emQk&E%zW-pxbr& zZP4!?{qkyREx!S6)Vy1yBKe|Qd5mjq(=DsF1_4QnZUUPD7t5%~5A6&n=umIiX(`yfI!LIb2T#(l$lxBx4pTXL<4y(4m8_-%SUoE`T)^(j2L z*$8Ga)>k~donLD;Ta{rqrQL*{U2E++YqYB5ZW}L5ueC&RKBk4wk&(kNXtX?$S_2iy zKCdnle8=kNjIYK#q|IMzbaY;$hfDecg}iA@F3%H7aO7K>1c#9owe-0;XJ zG1XYV-+CU>&61$NDL=iNHV3gBx$HSdHx`@B8L(6>M22Rg2ON%|aj?u4V^?{J%%wC9 z5I3vrvHUH?nX5DwtwC7!`(l<#Qw%CR&ZbY@O|uyfKr!kIy6ryK$3$#CH0ljVeY|F3 zdS;@)fGHg=(Ba@i8}V>NMhvqpVTryNhcL!52ITCTj(ntUnmaKS0V?OO>JK@Bd2`5A zlji6evCsnQZ;#ue_JEr`sYPCboT)q)iaZsykatX=YLJW*fmNUt*{0Y>gUns1+w4IW^&}qQvfubOLWJ#P3ZB3n&yD z?Ld*yNtn);R;HdleL590$4MpgXPjTA9QxPUkG(97PDss6{R0%n&<}lDjI`KK;g*<- zH5k0{u_56Px-Vw8W5l%{%bt>0{fgG%E?KZ6no71?;+ zr_O|#6J0rE0Sh&( z4@)x}%vBrBYid&yq=ZKWO7k+tNYP}UUt>kVlnFj@S)MU;DLu7TxmDvqZP`zyCb0+7S$plL_Tm~M=yC`NBXj>~O+x7=#Lv7W zo9bPiCoccAGy{V-DLJiXb-IXHA}&87StQyn3yP^N8d{%)(dO&uq!E6|iuxQ{E-?su zigrn-LO+K+eLE={cut!Rbu%Swq2&)mY;WoljCc&%hUTh~h87mJa3!G35;wrg?ZzlgQ%q8}HXZ98)~@%zlV50OpxP zz0do5J?!c+IJiJp|NgPHAp{KCG}cGxIBP%0hlUC9-4*K?H}qckO$JL>d^wu!Uy+Y8 zXEE$E0teHOmJt`Sz0b7)NnO$B*7ZS9*Dt+-K15SkBj+R>kQ3HnH{|L{GFs3?I{tkG z3%1>iO{~$z@iGlPWym;aW;aDspVIWx6aEUGIh2S%Q~p4^%fk@9jZ`QaNX`>=ETfKR zh&s;@Et^@q2Hz>TT*KwMJYA=!)0w5k1(&Gw%=POFOLAG3%XPjiUZ*;UT-KIP=j6(o zY#G*9t82r!Ga0vI!gk8#mT)kAu<|^t$W({r1&`pNut> zrPVW)oLehZsHQxs*^!P_=MLv%|CHjzjIc9D6HXb)C#WjNy`GxzCNp#Cbjn`ORKtGK{yk1rLK<_l{CLsMedHOERq$gy1oPh|<(tUf*n z9w$Wa+RQm74|JIm8L&qgut%r3$7tB3<1Wgz?yiaAT;Z{LQzzv%%eBYq9e%1)cV`RK zqq^9;$<%!DK?y9^@eDCq8RDHXC7KZ03NK6VEETA`r}$D|+o}}R8*-m5WjAuvveM?J zx}>e(pv9*RM5s%nv`Vf-e(86{&>gPYH2^Kf-m-#GYozT?Fpx4H>$ zh$-S$2J;UEs#}``^(L$k^TjRJ@kD==AFIomQl+#-skwS}t6HZ0g#pW3w6K2I%2&9* zv3e>QuWa&$8GOhP3q_At6YwiDvQZt>#mwRCJz3 z`A?nH(@~Ha_2ji)0b;ri;r{{kC-P@h?$wnuvs{1osJ z)!E&hsV<&_T21DRs=j8m@kWl;YTNqwh?Vj=A2(Lc0OR$VJZ`SZK6*FUs>d1}uh_Qu z2$O6?oxR?RS>l+=6RPku(;|=~cS`&fqir9l-nRbXtE+~-JNzK zmEWv;gYnl)2AfgO{^(a7^-V`uYN)2>?H(|xC}+Z)dP`R;CI{-jI+1wJ?Xj($-_M#@ z^G>SO6ssaA`MZ_J&i&kDYjQ9PFJ^US*8wvNx8n?K0fa5A6Kxxgs3+CMU zjbbv3#sSiGBG#+g+$r@G3j@n$tDHrnizV$!0%_SC+$T7i)0mo3|My|vW(|h**R>A# zGL|V!&Kfh0)agy5H$IvXkH3@1(D9Y6p^$-3M#34lBbv~$=pp*{e}34v8zbV>gs(o} zizhbTd5Y*A_CdS^#`|NuX*23y|4CXlJHhDs*EaI02`3j-GiJCudw`Mj?3nTP#E<@W z5C3RwN;vteyG(K%X*gPkx8gtkleFTXm%mP@O=#TzeEhJ+9l|+`HFb=&839PVJWrpu7}w>CR0TYu z#JhR&elXGMJw7-ZolVO8Gi(F&{r~Bq6HAmoVqC)5_rO#sKBbL2SUd4q?SA0LVI~`^ zQwHd6eO}Q_q>osp&mOQ{{+asde?4@L7?bsb`zXHukL>-EoEZFtzwSRj^y|v49+bgZ zH|$p}1h3b^0lCG6iN%03obhB6DQzTYM*YJ>TWb9~{EAji-bRwnA!gL>q3^dkXlMbE zz2o)4M{AuAT@D&-6eD#19~?R+Kd`M9>*Yb=`B!~#Cn}xfQV0p@Fm1NR8TE(5np0(0 z`9B~u*sp5JAEe~SSpT<&BBld`Mq@p0qpiU;=OfAq?pd`-rFyyGT{Fb?Xc(M~x^heVyh{@e`7`#S!jCi0N~;_$vnc*c1Z z7kM-nNKEab+Inju9z2xSjJ@K|%x2E0|LstED}J;wnNU2mvl3s)5Et}KXD;SOwu|lv(zUKJ*%MB**f+JfaBD*1YjIb z*IH@^IZ0xOf!}`tkl{f~5zJ@X-#Z)vZlpZ1?5VS1z(gq6D+N0{2YRlGfpC)#f9HfV zxI^4Pv0S0s>I^&ezK{KYsy)2^1CGZI`1)5k(V9J?^DZn7Io3O%8xxrE$SCwr<|FR# zx{m19ZuWKD$f19=6<}Q}5c4V9gIvfJwJ9u6fDGwX<$c{t#_Uq7XI&t60MWHNB+i^ zzYbgeUmUH6Uzcx+3*L^*N4@e4FTr^J(fn0(o^arq#DppN@16Lq!(OAq{?r1_YEBax zGwPrGd8Y0k$MPpT{2=GXzj`btOvwN12;Gq6?pc0f{vE#cCqa)&BPL57Dg;P?zJ^2~ zQSR3gABjrv?`YJ>fB5DrdpyQ;j=kg{30|_(4&X}1Az#U*PH4cGkEmnHMygVXnJ-JI? z#cEHSN=IP5$IBg=6(28pL@YPq3y;X`9$4~F=J$|Nhcm;66nr&vd`RI}Gt1+JUz2%0 zxPqfF)8nO&!d#D)8b4_mg&?Z%P!Z(lmhhV#@;5o;Z*s`rP=W_e?O{e;NxZd^-vD6pv(!rsvsKLhuyv?`eB2199vRfsBSRS& z%a5As#4K-SV@5SI>cNp;95d~xYcmb@B9XNCkenG+)Ac^c=N{su8-C1i{+92?Vy{*m ziD~S7>#SEwn@$qIVTVV~+GEF@#oN}7)|xo-pIB`SVnV%oSIO#|QUy09_Kb5bQ!R+s zQFSs?E5Y~DmO6nT_s262=m#H6kLdT9em_z%Z`&hGrru&Nd~vqFnulV#4+S8c? zvfy}#3^4|UChv$?0YMltwvu$ zJ7Z>yBx#>;sj-YQp?&IDIhr<#Hd~>(WFP|$pzH)<7r1+Auwl)@a|x!-M7<4BGz3qK-wXwxPSFH)A10{%?Y|y4^ft+hd3k< z`bLV;7R)i89QCzH3VSrhG#=Z*o^j&d-gg!q_Moa(GaUJZQgqlc_HsAuvxigh!@-3% zhm7uP2np4)v52_6G#x#Th2w0qH>(xxZY&t?KBI~3(>y{D7P$9AwF1seFDWn z3x@qR9J+A=y89jtRLAQgkfZv@B==;Fo5&z=2>S7O9(zRP%U0pq4qR%)#!X`t8F{2D_cPjgFLi9f;rKb7K`>ML7LI{$ME8!r*OJ(d9tTzA z$(DMl`Ko+#R=ZlwH)os_Pfb%$)8y66xDe(L8qpeQ1ccKEsNJ~#ZFQgdh(n;ANP8w&Ajh--8jvZS zR;`2Ifc4&i15E7;Icx!`!w;&rPxJ+|G#N3cn&Op9pRBU}UwCnZ4XYioSNVC0mY$T9R&(vPxQus}z`kMPrO zO0*D(^i%WHClt|uM^#IWV~%4(mwb-;;YC9x9tt_GN?#&Vu}|)_li!i>3_xuCeI3>W zF-Zww@qVp+huf-V;quU_5dV;FbvHRLtFyF6QT00$7#dyfci}6!DuFGDsCY@e$06b1 zUY-`){`QcT$FPrZ zSfToB11}>|rTzhCgTK}i{0sX{bbj0gIFGdU;LPD##^OLi>v$e$f512?Ry`t`343W5 z5TaGcOciILCPUpFDLNbkbJ$feh3vHB6^~goH!_RTc9Jx8bP3&UHcT2XK_7nbX)BvO z9M~jl=ot&m%h=;o=?vreSl6zuCP5Q`QSAc!h2wzCMleECsugl?^?j@f#-_wr4>;u7QP+syk!tBOS# z``FQ#zGZHjYGQg7(@?WqcGO4Ub;v0Wu{mMJe`!l`EN%(QI*O{yvIw@>KQs?+BMAC5 zip=dfdD-2JPx>^R(%bp?9T=Q=c_!F)7&kTc8ytb1ecRI{G#_CYitr`z__7akyFrY` zqDC-r6WX=W3wo)USxbO$D4hYvF0zpe&DMk9$Bz0zKk;^-;Q?TFp+G~^PSj&QP0wsu zahmgJM=Lwc)Sa!eL#qr8O*83ilj9-8W!7rk-$Fz|cq#EwNK~y^d_B znTTN$!g0>BrSa|5#_qKvFB`-GBmb=hGF@XqV*3HTmp1C3Ev%92IzI*5VLGv%5ZKQ| z5sz^sME`gu{8o2RmQZm0FN1D|F|llA^uk#9&{$@gNq_xre;`tX=p)`YnY;>%UQs$d zt(Hv2u$%0pfdp=`6T7*sosxfN#}~UgFYcFKzZu%ym6H)fveis-r_#SEi!9L2(8PYv zb#-KoE>M2!h2C{zn{fi136BE`+%yHAw|bg`H9J^xh{wk7t9Z!+p$u9Q#>Y-a?sCsW zo0%{{6 zdPiF(hKT1-WE|q1W1m|DnvUhm03nh)2L(3KyqJ||G)&`jB{LRCK+7)8Ag00j^}rl9 z)#;2ks9s%EXEMIW{`F61d}?$9SC-Sf5szr}N$de0^+C=D0W&8nptEDS+O23SWQgt7 zE^Urcc5bi75gy}dCgf5wP2v#8)3ziGIPJet+5_T@cJ`H%*&T#GZY=IsyFa#mcsQtT z@3%I88g5kAcE4WE(*NqM%rg(cQydP3p)O=Nv_pm?P=aBl<;N+A*ANd<@{x`S!10Z? zA&_WT&NyxIfO|CRX>gDY4(REH?B(1&85tEhyZ9nm%oCUL>dt?h}}7B z?hx0xX#$PBp+SiqenP`Z4Crdi5Zj^I#n)-VqI^S0tAY4ROstvU zEt;)|ISu>e(-@hfK}YmS*g+>)AoXxkjTpjCE0h4EO#C}0WGMH? zjc`iL5LXPTp@~BhMxm&yh4ri7v$z0a>a_ksLJ)828yU89`pIk4L}DbYWynGUqn~^a zvTa-vVa|Z7MH(+r$or_7fbRSIjCSAUry57{*`|py7_w|)pOaYtb+1+{gKpR%jAvxx zoz{RuX%UC(JR1yp;mZ7c6Jg%K`J_!0Sz0jjyF;QE<_AHq)d=UAtDmP1C44*IFmITn zO6P2)7;KJk@vdAgW2Z6G+d5hAn<<)roRE^h7)6ep{f4C7qqP^%yy6G?;@qA@)KMoX zsRt;kvKS12!Y}hfg_UztqNBTtm+_{kgSez^f(guu0YgH{+&n?u!)?Mm^mp!FKtn|- zoqa4lL|V-^F+65c(LTnZ^m5$+vD+FK(qa$VZQ6x>+S^6)z#F%jJTwc<`4k5mvJtLv z>VQotP1rCh7h%%#Q7X*psOO?*NJ^1*ile&`Rga6XCXiuQGy*|tz}p?p75n?8i}FF?s&HfceZX69}{)4v-PM?|TP4?2;?>7q&P8xcxW z8eEu9TXTb!orN2Ai7WN{FMOF9l$6(>rq*==hl&sEL9`BL51}LW^dc`UIrr__bk zj%@UNwEBfAzFs}18XT22`KYqOTVsD;*Y}Z?O>}pw?00u}->krYb}S~iz|yijitupK zDWGg27uT6g+K3*HNbFJmxMZK5N%inM6P@Cn}p5LauB|-}r->zntH@)8XFFI%#(0q4?nEnB=H~Nmnu|$H% z;^UCmX`&$HV44qKn&81j{EaO`Ys(Re-)j&PK(pqHI5c3H_!73qdBVZ3r!vt=_l4*l zYzR@(pNyn5BC0IJ&T4ai0aEFPj12h`r5~B?l(QGiLlaxE+z|N{CvpAyQ?@YjxsVGyMKHbOC|zl(;rxx z#ffG8ViW?4q7NvM9N!ZNJtkYd=Ahy?Ui5i5L1O4Zk=vClONoR2K9|FE3;MJrJC?Hm zk`@)AFZGRtm)1u&TG;?tcZZfOPiF>VX{jdKcUmmTU2-@+$1Kk2hhBRH`V#`3@(u~3 zy=vc_>Tsk=AuA;d>JKBOm>R0SZ~YtvV#E7h+{bATtMngjHF@5$GooDCgj_ zqTCB6fOSrbq_DdsQxJ*Tq=}ae?Ar2NVY2(pcob|~B`~Gi-VGdEWj2Zh!6*c2^cDen zH%j2w^2yqGGKX@Fsx11n*S3VHFwH3S3xj^_sWNEWfzff4O#s@SJg%zW>HIK-od;SA zpc3P8OT(zsmL~$U1n40s_ac#WV}-u9g$CaCHWVZ=a${g=9apYP@8a4j zP>=M&0dGA}RARz8CbgBQ&!F{#=Pe%vdi$W(m#5apbe3dB;6sUO3)-X&rTK&eb?e&>XjiqCAqJ=}W2{>cUVUZ%gW|dc{ z)-VC5oC2!S&%9t#Rskhrx;u+vV+fxUj~QT2=x}U~vwCpILk?h1Q^hzmCAxRF8z7V|bdfZj19dqgwFDW`4PK_5 zv3TWtENxUt>~R%pO0-SXO+=f{qh$jfA$^RV_=>ze@S@NC{m9pP+#u$b8ys0T(yb%X z0Qz;z)0u-vqIlOvY9M0iS39Q->MXtp7U5xkXBct!t_#e01u6UhkU4=CtNZJ(9XK|vF- z{lbrhPVNLRnETO3NNO<-Ol#VI@ye#9Ur}VVPrjM}kI#|b-0?cCHp}>pXjv~SP$N1; z&!Hv@3}h&PiIch5oiSr2`-{SI!e9x-`heA-!$7J8i{NIF2#6U1DoP!pz@FkVX!}9GfV2;Ar9u=Ms`U zBd5Ymf|nadoMgGsf3&M#-ALvpFazXO=BOdcCIs4QK-j1Y+K}2<5^1QXq$3GkdbiO@ zZ!}^rT;_62Z8&0Z1r|snA?_EWl_~oNjYNu;r!7Q?!8jd*CMkyrVOgm|!_fl^!C}9_ zE{YBT?W_GD4AEceWQNEhn)UiH+Uy=i5}}2rtgG3AP6?lEXke&M@m_(`EYEpH8@1mT z&Dqufo08Rn72>oIrkof9~nlbIR{HUq6X7nuN2vJ1* zTHPo?W2dqB@;*EBA9nbrSdte;-#VEt9X8mnlE1 zPGsrN$*lfcC{SWfoyz7iZb6-;OKx*5S5arQ{g1k!Z|b#NmHxOJR2h2^Qx~--F*Z@* z;8Nd5SdPC`Ocq+joR^mvm^9u| zWizZ9HFsdkUb1>wyt38r)ZNztcidvuiJS&d`48gdkfFVU0lMl8~bYQySVhN~IF~VF?eZsOF2YYR2C5c^rgKH!x@d#2x%U96JQU zL`8K{OS8`MtaELK8)9ZlrnFV8rM{h6U69gE8|qG%$G?%laH}*KPzU}cCJqeT=uPII zd54*YuWZ@OjPifQr;M4%JHK-dwt$^+?l{SD#%qYiny{{@bIoKIaw<0aCQtVF1iX%l z>je&-UUMsqvpBt&dsM4u?zxp@%EMA6Yg5XV+=C6y5{`Am)w?>hbR%E{*4jbf=< z%V+52CA_GfuhwJH?WeN&b?x_&@OM5>RpjYk0oMv%bBeCD$MoKO6;`2WRK9v2<*Ma^ z`&e-Q_w>6@zXH`!$kWZHdN;et+o>zNsgTY4>T;G*a+R%BOyX3wxS<2sQrQx{qEyV$ zE9q~&l6gR%TB>Zi#TqiU)~IRpm%5Ce9%47DtZh&yR5s-lhIS9S4fWZWB%R7uN@a)I zgo`zvH5R7R6O+e-Bdbp)0&1_U>eB;q#WOUah>6*;pp*yIFX0srs$T~mJSbaxQ&nG1 z&Q4%k!cmif44yscBVs|_)HjnsMx(LOjy@4Cj;s%AbRw*o`sxrM8@cPCW{qNeA|eii zJGeb@x3LFxq79F7P%Vl0B8Sz&E*#Wn2Lr%?{Q>!Gw!~-d7vlMpa66HL@4cPq45Z)y z))klUw+UlKnPv@KPNeCXAD`Ca^C13?rz3XISj)-Gr|QE*QljVM>pRv{?@MxIUTzlt z?>K`krV~Rw$#z=zCj(Ei+13L#k{_#q@Hhd~3ogiA{ZJ|Zcgt7StM}Y&u2RpqnR~#+ zRTqD1ga(N^c7fOC7BTQfIgt${gb1++ zAzoJ1yyvysgh##pb5zoYuJl=4UwQ<3lFbfp;;)h7293tBw;$7~TU=PWx*(@0A`7<4 zNlhAGQ7vz+r-5-e0w~a)EcwHvXo`h z9wQTQOkDO(D`cgcH0?^FU$EjV&N{mRw6L;1G_=mprPZMudNb76a=h_fkcYljIb6XW zs8b++i;~})nEZq&2uWvg094I>nPOYmrikCdRrOBRn#NL7*ToE7y-BG!qLpTRsGl@| z->eh)k*hp_TY;?Tw&6{p{cyscA+Gw)Sdn@=b3urrMj zC0R4OD5>AkTc7&^9qCjK4)~yt>k(weFqqigx?zUmw%SxjnxzG|GqJvms;|FS}`{2I(-p7&kL<>qqPQ38vXlwtauSworbf75WE-3G!~q6t!Dvd8mvf}$qm#z zsTI`p#xQBw#Fz>;TCH}76~NzoZ!qY^=7~uzct7vo_xDq5n7m4eM<){nXk1pD*J(zF z+jK4~7gUXs-sLE@8^Zhs`oPz9qPC*!26NVI%SjbWUN@k% z|2{v9T{I?;U8-|gqtc*1CwcxS?f{HsY#Lu@tn*&#qm6%dOsDCdvdXIkZ=a@!k=w&G zDzp|1Y+Mo*6Qpc9lBMorg<&M*w|A`7U%MT=^l1gf-VQJv-5`lJk9ONA$IYk(NvqOw zgP4+_?R}@H8?`v9~J5!0^kkpQkTPHRXO4 zvw-hdX-*#@_M_~ni19$1%zbKt7#3D~?Q{e)lb(w9p(!;_IfG}K=J8=S-DK@2!A-Q6 z54%ZA&83k7+GOg`GBiVIt;Gy1(nLo4EGw96TCuMlL~HY#Mu+uVMh(p9cunDyS)0b( z&L$2sMArNCInD~Z>0&T=#$Kwdfh?a&X+_u&`%lO!PTKwhn^;IFf|o>0P9EEPKFPAF zC_6+L_IEr@6tIR>nsY^e(8DHYRISk{nt`)6SFb8QCy0oH4f;|s6kc(zsJw;dwIf>r zYS#Aifi-pK&MAo&Uw_4#Mc24QzPYMC$g(Fc?bsxtD3NV>yMzk{#AH^W&J#~yrK)!* z0WPDSv1N$1&!laiQ&;GVThW1tm1SZiT1|(@&Q{a-tuS6igv@LX`3SNZCqB}SQNP3( zYl{XZbFFm)VZRoXQBsU~R*9wn$>+6y41!Jtc$H=h4F{htr?+UnQ@bES7kwnNP2wxH zN}n<1&@cK>B$Ci^KL-SsZf_WVV^s}ou#aOw3uav!K>N~(Ds-CmJs>{_qR%Ehv#~R56oaOz-)~1o<%D=l z6N{`6$!A`+dBAL88q+X@;MgfIV^#2dhNjbSAZp6L$e4(-sQ5FH&G?CQBz1A*-{h-o z;229rTCdbIqI8^eKJf7*D3dv>GsP$u%!}zpID#tYouyl-k!c0Y@SsuSgRsl`u0o4a zi|rgj5e7w?)34CqWy69mImasX^V+s1dfg%Pjzi+k;LGJJQP7?^R>zYaSu?bNo;Z+JQQer7F(QA9oP+=%Yd+G}URk zl!lUyF(jzrHa)=-%kRbqB@;(Gnrgfoye`F@MlwfO@9iGc8V8zpx?Dusv%EU#$Rc5 z0bmInbUc?)Cv%zXJ#`9ybLvyR%+cSfJLl%Ai%U1>HZq%Y)qC#Jwd-TqlxDJ*Z(da& zOLk>q*<|KO$r;XEadMH-4#ZSO?6VECDYnUPsy7(4&TUZhv4$P?2lbm`#m&-Yuo10G4xp!}+(^(<%Z=e3D52Fk`N4Y<%50FKa zJaUscA0=`omYSoyxrwE84(H8vI&%l**>Y&&?Bs@gp3I78PH$}1rfGZ+1o-)9dF`yc zckHzvM|tDzos^mAg4qMRVD^AgpX8EtCR=(uw?RX@S*|@+Z{;?t8!Jx8h=j4_(F}S(636r8nvPZc^B*O(N=LXS0lRhZ0

STAL>)YeCCrbg57 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�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

l1Sd>P_yXg)Ufr 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
7+h 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

6Io_COXLmN1f7k;LfGX+99Tg+ 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

WmV?#XJ2k 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

t4vSn1K2cTyY_W1!btYZ!W3#?&%@@BGMfoOa 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%0AY8*=y{|DlKaA z5um=l&a4+ZIbCcL*kd|l=RxwpJO4P1or~0OB&o-@CFe03JEy~nYJ?DfpLN?hzp|D` zO=KD^!GT~@3m7B;kAtZ%(Oueg%rHhkMb$L;Dx@#_h;3NV#;dSLhl6(^t@n74WVIYp zQ<7f^D8OpCScghZ*CxWtT(dgtS+JKg);?|~)Nrxplx(j(7`)5>#5#=*NMGcyJx!9m zdx!1SHAX$l?@)~dT78Nb?l7^Egn3?K%-X9nZX^qH>R>aGmj!KiZ>j=2?qdSFXfA+> z1_ZdlG&{x`5*FPFdL3JIEhJB!X#s>GxqTdOmTLS4;r$kLuma!OUwThr!T+~RkJ4@8sk^N);GWHgmJRC9m ze3zvmJO=Ir+3IEpT09Vc^?vDUc!`;e?kCpa*lu7?@eF=PeFI#L+SdZd_RDr=t)##s z>Z|<{db)u=j4_*`4K%T?N;B)y z^;O^qJD%j&l#+WqG%|+|vA+||-T$HUl;eee4lSg6(K^8zYea%>Gxs@FhCHt+?>Ns( z6y9~N&E0h_c3xB7#!NWw8zf6dVjaQ0*#}~t8v*uvJ?tYKtAB~t1L0n+vGsNAO?-

O#HAZfHSk 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
vf@s(_T}0=sWXI08W%OTwFs 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¨~iPQ6G^l@C~ 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%0DY1w+#$Lznc*sQHU#X^6; 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%0DV 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%0Aq$E#vprMMD2E9g=lcPe!cp{sy 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
)kUpGjJ^A?@PmD4E(6hPM+^Pyt@p2Y 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 ^vS0&Ea*IFcoVb5GLID9JP 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 LTUL@@=lK5s&@lB8 literal 0 HcmV?d00001 diff --git a/app/X/baselineProfiles/0/app-X.dm b/app/X/baselineProfiles/0/app-X.dm new file mode 100644 index 0000000000000000000000000000000000000000..0e9c9f06a8a6bd2707ffb102339e3eb55f56b86b GIT binary patch literal 6270 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 AjsO4v literal 0 HcmV?d00001 diff --git a/app/X/baselineProfiles/1/app-X.dm b/app/X/baselineProfiles/1/app-X.dm new file mode 100644 index 0000000000000000000000000000000000000000..775e2d337f0575f48df06874667328f95784ac8b GIT binary patch literal 6216 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 { static <1>$Companion Companion; @@ -9,6 +10,7 @@ static **$* *; } -keepclassmembers class <2>$<3> { + #noinspection ShrinkerUnresolvedReference kotlinx.serialization.KSerializer serializer(...); } @@ -17,6 +19,7 @@ } -keepclassmembers class <1> { public static <1> INSTANCE; + #noinspection ShrinkerUnresolvedReference kotlinx.serialization.KSerializer serializer(...); } @@ -32,5 +35,4 @@ -dontwarn org.openjsse.javax.net.ssl.SSLSocket -dontwarn org.openjsse.net.ssl.OpenJSSE -dontwarn org.slf4j.impl.StaticLoggerBinder - -keep class com.yandex** { *; } \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/23.json b/app/schemas/it.hamy.muza.DatabaseInitializer/23.json index 7cc0ae4..f264666 100644 --- a/app/schemas/it.hamy.muza.DatabaseInitializer/23.json +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/23.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 23, - "identityHash": "205c24811149a247279bcbfdc2d6c396", + "identityHash": "7f599a26d50b2917fe68a176f414b0f2", "entities": [ { "tableName": "Song", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", "fields": [ { "fieldPath": "id", @@ -49,6 +49,12 @@ "columnName": "totalPlayTimeMs", "affinity": "INTEGER", "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false } ], "primaryKey": { @@ -666,7 +672,7 @@ ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '205c24811149a247279bcbfdc2d6c396')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7f599a26d50b2917fe68a176f414b0f2')" ] } } \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/24.json b/app/schemas/it.hamy.muza.DatabaseInitializer/24.json new file mode 100644 index 0000000..a021728 --- /dev/null +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/24.json @@ -0,0 +1,678 @@ +{ + "formatVersion": 1, + "database": { + "version": 24, + "identityHash": "7f599a26d50b2917fe68a176f414b0f2", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7f599a26d50b2917fe68a176f414b0f2')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/25.json b/app/schemas/it.hamy.muza.DatabaseInitializer/25.json new file mode 100644 index 0000000..cf20268 --- /dev/null +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/25.json @@ -0,0 +1,684 @@ +{ + "formatVersion": 1, + "database": { + "version": 25, + "identityHash": "35bed92752541c2739a932832debd361", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '35bed92752541c2739a932832debd361')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/26.json b/app/schemas/it.hamy.muza.DatabaseInitializer/26.json new file mode 100644 index 0000000..3e6a59b --- /dev/null +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/26.json @@ -0,0 +1,733 @@ +{ + "formatVersion": 1, + "database": { + "version": 26, + "identityHash": "722e6d30eeb0cd89a3ad80e3eb83d0f1", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '722e6d30eeb0cd89a3ad80e3eb83d0f1')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/27.json b/app/schemas/it.hamy.muza.DatabaseInitializer/27.json new file mode 100644 index 0000000..c9ee1e2 --- /dev/null +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/27.json @@ -0,0 +1,740 @@ +{ + "formatVersion": 1, + "database": { + "version": 27, + "identityHash": "ed8f47508639d4245327fdcde0cfa553", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, `blacklisted` INTEGER NOT NULL DEFAULT false, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "blacklisted", + "columnName": "blacklisted", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "false" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ed8f47508639d4245327fdcde0cfa553')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.hamy.muza.DatabaseInitializer/28.json b/app/schemas/it.hamy.muza.DatabaseInitializer/28.json new file mode 100644 index 0000000..221890c --- /dev/null +++ b/app/schemas/it.hamy.muza.DatabaseInitializer/28.json @@ -0,0 +1,752 @@ +{ + "formatVersion": 1, + "database": { + "version": 28, + "identityHash": "0423cc07b12ce198d7fe19d7f2f1ad08", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, `blacklisted` INTEGER NOT NULL DEFAULT false, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "blacklisted", + "columnName": "blacklisted", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "false" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `description` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, `otherInfo` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "otherInfo", + "columnName": "otherInfo", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0423cc07b12ce198d7fe19d7f2f1ad08')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json new file mode 100644 index 0000000..2ccea01 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/1.json @@ -0,0 +1,304 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "b93575bd08c10513f0bfc997b832c280", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b93575bd08c10513f0bfc997b832c280')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json new file mode 100644 index 0000000..4bb176e --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/10.json @@ -0,0 +1,536 @@ +{ + "formatVersion": 1, + "database": { + "version": 10, + "identityHash": "b4ab81f091f9f0d359631c1426b04c49", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumId` TEXT, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`), FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Album", + "onDelete": "SET NULL", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b4ab81f091f9f0d359631c1426b04c49')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json new file mode 100644 index 0000000..14a249f --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/11.json @@ -0,0 +1,518 @@ +{ + "formatVersion": 1, + "database": { + "version": 11, + "identityHash": "b621c39ef38afe8991277568a67d5f3d", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b621c39ef38afe8991277568a67d5f3d')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json new file mode 100644 index 0000000..18d7ff5 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/12.json @@ -0,0 +1,518 @@ +{ + "formatVersion": 1, + "database": { + "version": 12, + "identityHash": "fe9703c1e23ef700d9698e0440e4ad7f", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'fe9703c1e23ef700d9698e0440e4ad7f')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json new file mode 100644 index 0000000..d4644bf --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/13.json @@ -0,0 +1,530 @@ +{ + "formatVersion": 1, + "database": { + "version": 13, + "identityHash": "61cd3db93beeafd3ca398be54544c752", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '61cd3db93beeafd3ca398be54544c752')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json new file mode 100644 index 0000000..c83eeb4 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/14.json @@ -0,0 +1,598 @@ +{ + "formatVersion": 1, + "database": { + "version": 14, + "identityHash": "6bc345258fdae98dcae16e60ab7a7f2f", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6bc345258fdae98dcae16e60ab7a7f2f')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json new file mode 100644 index 0000000..b6258b8 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/15.json @@ -0,0 +1,586 @@ +{ + "formatVersion": 1, + "database": { + "version": 15, + "identityHash": "19f6f6ce7ce279de7853df4b8bd77180", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '19f6f6ce7ce279de7853df4b8bd77180')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json new file mode 100644 index 0000000..9d1e8f2 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/16.json @@ -0,0 +1,592 @@ +{ + "formatVersion": 1, + "database": { + "version": 16, + "identityHash": "0cbca5b4016755ebf227461349581201", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0cbca5b4016755ebf227461349581201')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json new file mode 100644 index 0000000..5e40c0a --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/17.json @@ -0,0 +1,598 @@ +{ + "formatVersion": 1, + "database": { + "version": 17, + "identityHash": "8f32fc7dcf9836d05d1ba4acbee7f57e", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '8f32fc7dcf9836d05d1ba4acbee7f57e')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json new file mode 100644 index 0000000..e0c912d --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/18.json @@ -0,0 +1,610 @@ +{ + "formatVersion": 1, + "database": { + "version": 18, + "identityHash": "c8f776e899b181081f0230bffec99ac5", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c8f776e899b181081f0230bffec99ac5')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json new file mode 100644 index 0000000..8196898 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/19.json @@ -0,0 +1,670 @@ +{ + "formatVersion": 1, + "database": { + "version": 19, + "identityHash": "b9a9bb1674c7c50be2fab48de5afed43", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b9a9bb1674c7c50be2fab48de5afed43')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json new file mode 100644 index 0000000..e01fdb5 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/2.json @@ -0,0 +1,336 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "a595020ea35da1c5de6c6ee75ec234fe", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'a595020ea35da1c5de6c6ee75ec234fe')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json new file mode 100644 index 0000000..a683d90 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/20.json @@ -0,0 +1,670 @@ +{ + "formatVersion": 1, + "database": { + "version": 20, + "identityHash": "251e713953aacd84fd33b471ed4af391", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, `shuffleVideoId` TEXT, `shufflePlaylistId` TEXT, `radioVideoId` TEXT, `radioPlaylistId` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shuffleVideoId", + "columnName": "shuffleVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shufflePlaylistId", + "columnName": "shufflePlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioVideoId", + "columnName": "radioVideoId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "radioPlaylistId", + "columnName": "radioPlaylistId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '251e713953aacd84fd33b471ed4af391')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json new file mode 100644 index 0000000..a1e0a3d --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/21.json @@ -0,0 +1,646 @@ +{ + "formatVersion": 1, + "database": { + "version": 21, + "identityHash": "5afda34f61cc45ecd6102a7285ec92d2", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `info` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5afda34f61cc45ecd6102a7285ec92d2')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json new file mode 100644 index 0000000..be1b361 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/22.json @@ -0,0 +1,640 @@ +{ + "formatVersion": 1, + "database": { + "version": 22, + "identityHash": "ca98e767afd3ae8c801377ee3d18c71e", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `lyrics` TEXT, `synchronizedLyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synchronizedLyrics", + "columnName": "synchronizedLyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ca98e767afd3ae8c801377ee3d18c71e')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json new file mode 100644 index 0000000..f264666 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/23.json @@ -0,0 +1,678 @@ +{ + "formatVersion": 1, + "database": { + "version": 23, + "identityHash": "7f599a26d50b2917fe68a176f414b0f2", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7f599a26d50b2917fe68a176f414b0f2')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/24.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/24.json new file mode 100644 index 0000000..a021728 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/24.json @@ -0,0 +1,678 @@ +{ + "formatVersion": 1, + "database": { + "version": 24, + "identityHash": "7f599a26d50b2917fe68a176f414b0f2", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7f599a26d50b2917fe68a176f414b0f2')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/25.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/25.json new file mode 100644 index 0000000..cf20268 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/25.json @@ -0,0 +1,684 @@ +{ + "formatVersion": 1, + "database": { + "version": 25, + "identityHash": "35bed92752541c2739a932832debd361", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '35bed92752541c2739a932832debd361')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/26.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/26.json new file mode 100644 index 0000000..3e6a59b --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/26.json @@ -0,0 +1,733 @@ +{ + "formatVersion": 1, + "database": { + "version": 26, + "identityHash": "722e6d30eeb0cd89a3ad80e3eb83d0f1", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '722e6d30eeb0cd89a3ad80e3eb83d0f1')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/27.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/27.json new file mode 100644 index 0000000..c9ee1e2 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/27.json @@ -0,0 +1,740 @@ +{ + "formatVersion": 1, + "database": { + "version": 27, + "identityHash": "ed8f47508639d4245327fdcde0cfa553", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, `blacklisted` INTEGER NOT NULL DEFAULT false, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "blacklisted", + "columnName": "blacklisted", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "false" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ed8f47508639d4245327fdcde0cfa553')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/28.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/28.json new file mode 100644 index 0000000..221890c --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/28.json @@ -0,0 +1,752 @@ +{ + "formatVersion": 1, + "database": { + "version": 28, + "identityHash": "0423cc07b12ce198d7fe19d7f2f1ad08", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessBoost` REAL, `blacklisted` INTEGER NOT NULL DEFAULT false, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessBoost", + "columnName": "loudnessBoost", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "blacklisted", + "columnName": "blacklisted", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "false" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongPlaylistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongPlaylistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongPlaylistMap_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongPlaylistMap_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `browseId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT, `thumbnailUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT, `description` TEXT, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, `shareUrl` TEXT, `timestamp` INTEGER, `bookmarkedAt` INTEGER, `otherInfo` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "shareUrl", + "columnName": "shareUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "bookmarkedAt", + "columnName": "bookmarkedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "otherInfo", + "columnName": "otherInfo", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongAlbumMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `albumId` TEXT NOT NULL, `position` INTEGER, PRIMARY KEY(`songId`, `albumId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`albumId`) REFERENCES `Album`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "albumId" + ] + }, + "indices": [ + { + "name": "index_SongAlbumMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongAlbumMap_albumId", + "unique": false, + "columnNames": [ + "albumId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongAlbumMap_albumId` ON `${TABLE_NAME}` (`albumId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Album", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "albumId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Format", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `itag` INTEGER, `mimeType` TEXT, `bitrate` INTEGER, `contentLength` INTEGER, `lastModified` INTEGER, `loudnessDb` REAL, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "itag", + "columnName": "itag", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "mimeType", + "columnName": "mimeType", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bitrate", + "columnName": "bitrate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastModified", + "columnName": "lastModified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Event", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `songId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, `playTime` INTEGER NOT NULL, FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "playTime", + "columnName": "playTime", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_Event_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_Event_songId` ON `${TABLE_NAME}` (`songId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Lyrics", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, `startTime` INTEGER, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "fixed", + "columnName": "fixed", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "synced", + "columnName": "synced", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "startTime", + "columnName": "startTime", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "PipedSession", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `apiBaseUrl` TEXT NOT NULL, `token` TEXT NOT NULL, `username` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "apiBaseUrl", + "columnName": "apiBaseUrl", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "token", + "columnName": "token", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_PipedSession_apiBaseUrl_username", + "unique": true, + "columnNames": [ + "apiBaseUrl", + "username" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_PipedSession_apiBaseUrl_username` ON `${TABLE_NAME}` (`apiBaseUrl`, `username`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongPlaylistMap", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongPlaylistMap ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0423cc07b12ce198d7fe19d7f2f1ad08')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json new file mode 100644 index 0000000..6ef56c2 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/3.json @@ -0,0 +1,342 @@ +{ + "formatVersion": 1, + "database": { + "version": 3, + "identityHash": "f2169b1328eebb0c7f353018e2ae4bd3", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f2169b1328eebb0c7f353018e2ae4bd3')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json new file mode 100644 index 0000000..d422cb0 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/4.json @@ -0,0 +1,310 @@ +{ + "formatVersion": 1, + "database": { + "version": 4, + "identityHash": "d5720e465abdf99b583c183298f18340", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd5720e465abdf99b583c183298f18340')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json new file mode 100644 index 0000000..e80f181 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/5.json @@ -0,0 +1,322 @@ +{ + "formatVersion": 1, + "database": { + "version": 5, + "identityHash": "c16206386ea59ba9109b1e116ec61ea0", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c16206386ea59ba9109b1e116ec61ea0')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json new file mode 100644 index 0000000..e9ad490 --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/6.json @@ -0,0 +1,354 @@ +{ + "formatVersion": 1, + "database": { + "version": 6, + "identityHash": "7d53e052483019da2b9d7056072cea79", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7d53e052483019da2b9d7056072cea79')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json new file mode 100644 index 0000000..c5f21ad --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/7.json @@ -0,0 +1,511 @@ +{ + "formatVersion": 1, + "database": { + "version": 7, + "identityHash": "5f75673891ab82a14afcb6d95cc6e1e4", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumInfoId` INTEGER, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumInfoId", + "columnName": "albumInfoId", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5f75673891ab82a14afcb6d95cc6e1e4')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json new file mode 100644 index 0000000..649c55e --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/8.json @@ -0,0 +1,511 @@ +{ + "formatVersion": 1, + "database": { + "version": 8, + "identityHash": "446e2ef392a547f6b2d4318c9f5dd4cf", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumId` TEXT, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Info", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `browseId` TEXT, `text` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "browseId", + "columnName": "browseId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "text", + "columnName": "text", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongWithAuthors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `authorInfoId` INTEGER NOT NULL, PRIMARY KEY(`songId`, `authorInfoId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`authorInfoId`) REFERENCES `Info`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "authorInfoId", + "columnName": "authorInfoId", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "authorInfoId" + ] + }, + "indices": [ + { + "name": "index_SongWithAuthors_authorInfoId", + "unique": false, + "columnNames": [ + "authorInfoId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongWithAuthors_authorInfoId` ON `${TABLE_NAME}` (`authorInfoId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Info", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "authorInfoId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '446e2ef392a547f6b2d4318c9f5dd4cf')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json new file mode 100644 index 0000000..a4013af --- /dev/null +++ b/app/schemas/it.vfsfitvnm.vimusic.DatabaseInitializer/9.json @@ -0,0 +1,419 @@ +{ + "formatVersion": 1, + "database": { + "version": 9, + "identityHash": "22e88f327e3340760100610939e9a158", + "entities": [ + { + "tableName": "Song", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `albumId` TEXT, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "albumId", + "columnName": "albumId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "artistsText", + "columnName": "artistsText", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "durationText", + "columnName": "durationText", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "lyrics", + "columnName": "lyrics", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "likedAt", + "columnName": "likedAt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "totalPlayTimeMs", + "columnName": "totalPlayTimeMs", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "loudnessDb", + "columnName": "loudnessDb", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "contentLength", + "columnName": "contentLength", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongInPlaylist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `playlistId` INTEGER NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`songId`, `playlistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`playlistId`) REFERENCES `Playlist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistId", + "columnName": "playlistId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "playlistId" + ] + }, + "indices": [ + { + "name": "index_SongInPlaylist_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongInPlaylist_playlistId", + "unique": false, + "columnNames": [ + "playlistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongInPlaylist_playlistId` ON `${TABLE_NAME}` (`playlistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Playlist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "playlistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Playlist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "Artist", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `thumbnailUrl` TEXT, `info` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "info", + "columnName": "info", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SongArtistMap", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`songId` TEXT NOT NULL, `artistId` TEXT NOT NULL, PRIMARY KEY(`songId`, `artistId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`artistId`) REFERENCES `Artist`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "songId", + "columnName": "songId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "artistId", + "columnName": "artistId", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "songId", + "artistId" + ] + }, + "indices": [ + { + "name": "index_SongArtistMap_songId", + "unique": false, + "columnNames": [ + "songId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_songId` ON `${TABLE_NAME}` (`songId`)" + }, + { + "name": "index_SongArtistMap_artistId", + "unique": false, + "columnNames": [ + "artistId" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_SongArtistMap_artistId` ON `${TABLE_NAME}` (`artistId`)" + } + ], + "foreignKeys": [ + { + "table": "Song", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "songId" + ], + "referencedColumns": [ + "id" + ] + }, + { + "table": "Artist", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "artistId" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "tableName": "Album", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `thumbnailUrl` TEXT, `year` TEXT, `authorsText` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnailUrl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "year", + "columnName": "year", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "authorsText", + "columnName": "authorsText", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "SearchQuery", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "query", + "columnName": "query", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_SearchQuery_query", + "unique": true, + "columnNames": [ + "query" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_SearchQuery_query` ON `${TABLE_NAME}` (`query`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "QueuedMediaItem", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `mediaItem` BLOB NOT NULL, `position` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "mediaItem", + "columnName": "mediaItem", + "affinity": "BLOB", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [ + { + "viewName": "SortedSongInPlaylist", + "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT * FROM SongInPlaylist ORDER BY position" + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '22e88f327e3340760100610939e9a158')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 08d4410..765c86b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,21 +2,41 @@ + + + + - + + + + + + + + + + + + android:theme="@style/Theme.ViMusic.NoActionBar" + tools:ignore="UnusedAttribute"> + @@ -53,43 +76,68 @@ + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + android:scheme="https" + tools:ignore="IntentFilterUniqueDataAttributes" /> + + + + + + @@ -97,13 +145,25 @@ android:name=".service.PlayerService" android:exported="false" android:foregroundServiceType="mediaPlayback"> + + + + + - + tools:ignore="ExportedService"> + - + + + + + @@ -111,11 +171,35 @@ android:name=".service.PlayerService$NotificationDismissReceiver" android:exported="false" /> - + - + + + + + + + + + + + + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 6e73617e58ca43f5f96df5297beb79791dd5ab95..e199b1c58fb8e79623bcf3daf37a9b8de47005fc 100644 GIT binary patch literal 13546 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 GkNy{(?*nlF literal 15542 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

crzt86Yn_eUDw7 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 X9s+Y-3LMbPfa_OHuT))jdGx;kIO0$% diff --git a/app/src/main/kotlin/it/hamy/muza/Database.kt b/app/src/main/kotlin/it/hamy/muza/Database.kt index dc4e982..58e9d36 100644 --- a/app/src/main/kotlin/it/hamy/muza/Database.kt +++ b/app/src/main/kotlin/it/hamy/muza/Database.kt @@ -1,12 +1,13 @@ package it.hamy.muza import android.content.ContentValues -import android.content.Context import android.database.SQLException import android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE import android.os.Parcel +import androidx.annotation.OptIn import androidx.core.database.getFloatOrNull import androidx.media3.common.MediaItem +import androidx.media3.common.util.UnstableApi import androidx.room.AutoMigration import androidx.room.Dao import androidx.room.Delete @@ -31,6 +32,7 @@ import androidx.room.migration.Migration import androidx.sqlite.db.SimpleSQLiteQuery import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteQuery +import io.ktor.http.Url import it.hamy.muza.enums.AlbumSortBy import it.hamy.muza.enums.ArtistSortBy import it.hamy.muza.enums.PlaylistSortBy @@ -38,11 +40,12 @@ import it.hamy.muza.enums.SongSortBy import it.hamy.muza.enums.SortOrder import it.hamy.muza.models.Album import it.hamy.muza.models.Artist -import it.hamy.muza.models.SongWithContentLength import it.hamy.muza.models.Event +import it.hamy.muza.models.EventWithSong import it.hamy.muza.models.Format import it.hamy.muza.models.Info import it.hamy.muza.models.Lyrics +import it.hamy.muza.models.PipedSession import it.hamy.muza.models.Playlist import it.hamy.muza.models.PlaylistPreview import it.hamy.muza.models.PlaylistWithSongs @@ -52,59 +55,104 @@ import it.hamy.muza.models.Song import it.hamy.muza.models.SongAlbumMap import it.hamy.muza.models.SongArtistMap import it.hamy.muza.models.SongPlaylistMap +import it.hamy.muza.models.SongWithContentLength import it.hamy.muza.models.SortedSongPlaylistMap -import kotlin.jvm.Throws +import it.hamy.muza.service.LOCAL_KEY_PREFIX import kotlinx.coroutines.flow.Flow -import it.hamy.muza.models.EventWithSong @Dao +@Suppress("TooManyFunctions") interface Database { - companion object : Database by DatabaseInitializer.Instance.database + companion object : Database by DatabaseInitializer.instance.database @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY ROWID ASC") + @Query("SELECT * FROM Song WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' ORDER BY ROWID ASC") @RewriteQueriesToDropUnusedColumns fun songsByRowIdAsc(): Flow> @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY ROWID DESC") + @Query("SELECT * FROM Song WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' ORDER BY ROWID DESC") @RewriteQueriesToDropUnusedColumns fun songsByRowIdDesc(): Flow> @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY title ASC") + @Query("SELECT * FROM Song WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' ORDER BY title ASC") @RewriteQueriesToDropUnusedColumns fun songsByTitleAsc(): Flow> @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY title DESC") + @Query("SELECT * FROM Song WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' ORDER BY title DESC") @RewriteQueriesToDropUnusedColumns fun songsByTitleDesc(): Flow> @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY totalPlayTimeMs ASC") + @Query( + """ + SELECT * FROM Song + WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' + ORDER BY totalPlayTimeMs ASC + """ + ) @RewriteQueriesToDropUnusedColumns fun songsByPlayTimeAsc(): Flow> @Transaction - @Query("SELECT * FROM Song WHERE totalPlayTimeMs > 0 ORDER BY totalPlayTimeMs DESC") + @Query( + """ + SELECT * FROM Song + WHERE id NOT LIKE '$LOCAL_KEY_PREFIX%' + ORDER BY totalPlayTimeMs DESC + LIMIT :limit + """ + ) @RewriteQueriesToDropUnusedColumns - fun songsByPlayTimeDesc(): Flow> + fun songsByPlayTimeDesc(limit: Int = -1): Flow> - fun songs(sortBy: SongSortBy, sortOrder: SortOrder): Flow> { - return when (sortBy) { - SongSortBy.PlayTime -> when (sortOrder) { - SortOrder.Ascending -> songsByPlayTimeAsc() - SortOrder.Descending -> songsByPlayTimeDesc() - } - SongSortBy.Title -> when (sortOrder) { - SortOrder.Ascending -> songsByTitleAsc() - SortOrder.Descending -> songsByTitleDesc() - } - SongSortBy.DateAdded -> when (sortOrder) { - SortOrder.Ascending -> songsByRowIdAsc() - SortOrder.Descending -> songsByRowIdDesc() - } + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY ROWID ASC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByRowIdAsc(): Flow> + + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY ROWID DESC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByRowIdDesc(): Flow> + + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY title ASC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByTitleAsc(): Flow> + + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY title DESC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByTitleDesc(): Flow> + + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY totalPlayTimeMs ASC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByPlayTimeAsc(): Flow> + + @Transaction + @Query("SELECT * FROM Song WHERE id LIKE '$LOCAL_KEY_PREFIX%' ORDER BY totalPlayTimeMs DESC") + @RewriteQueriesToDropUnusedColumns + fun localSongsByPlayTimeDesc(): Flow> + + @Suppress("CyclomaticComplexMethod") + fun songs(sortBy: SongSortBy, sortOrder: SortOrder, isLocal: Boolean = false) = when (sortBy) { + SongSortBy.PlayTime -> when (sortOrder) { + SortOrder.Ascending -> if (isLocal) localSongsByPlayTimeAsc() else songsByPlayTimeAsc() + SortOrder.Descending -> if (isLocal) localSongsByPlayTimeDesc() else songsByPlayTimeDesc() + } + + SongSortBy.Title -> when (sortOrder) { + SortOrder.Ascending -> if (isLocal) localSongsByTitleAsc() else songsByTitleAsc() + SortOrder.Descending -> if (isLocal) localSongsByTitleDesc() else songsByTitleDesc() + } + + SongSortBy.DateAdded -> when (sortOrder) { + SortOrder.Ascending -> if (isLocal) localSongsByRowIdAsc() else songsByRowIdAsc() + SortOrder.Descending -> if (isLocal) localSongsByRowIdDesc() else songsByRowIdDesc() } } @@ -119,7 +167,7 @@ interface Database { @Query("DELETE FROM QueuedMediaItem") fun clearQueue() - @Query("SELECT * FROM SearchQuery WHERE query LIKE :query ORDER BY id DESC") + @Query("SELECT * FROM SearchQuery WHERE `query` LIKE :query ORDER BY id DESC") fun queries(query: String): Flow> @Query("SELECT COUNT (*) FROM SearchQuery") @@ -158,27 +206,31 @@ interface Database { @Query("SELECT * FROM Artist WHERE bookmarkedAt IS NOT NULL ORDER BY bookmarkedAt ASC") fun artistsByRowIdAsc(): Flow> - fun artists(sortBy: ArtistSortBy, sortOrder: SortOrder): Flow> { - return when (sortBy) { - ArtistSortBy.Name -> when (sortOrder) { - SortOrder.Ascending -> artistsByNameAsc() - SortOrder.Descending -> artistsByNameDesc() - } - ArtistSortBy.DateAdded -> when (sortOrder) { - SortOrder.Ascending -> artistsByRowIdAsc() - SortOrder.Descending -> artistsByRowIdDesc() - } + fun artists(sortBy: ArtistSortBy, sortOrder: SortOrder) = when (sortBy) { + ArtistSortBy.Name -> when (sortOrder) { + SortOrder.Ascending -> artistsByNameAsc() + SortOrder.Descending -> artistsByNameDesc() + } + + ArtistSortBy.DateAdded -> when (sortOrder) { + SortOrder.Ascending -> artistsByRowIdAsc() + SortOrder.Descending -> artistsByRowIdDesc() } } @Query("SELECT * FROM Album WHERE id = :id") fun album(id: String): Flow - @Query("SELECT timestamp FROM Album WHERE id = :id") - fun albumTimestamp(id: String): Long? - @Transaction - @Query("SELECT * FROM Song JOIN SongAlbumMap ON Song.id = SongAlbumMap.songId WHERE SongAlbumMap.albumId = :albumId AND position IS NOT NULL ORDER BY position") + @Query( + """ + SELECT * FROM Song + JOIN SongAlbumMap ON Song.id = SongAlbumMap.songId + WHERE SongAlbumMap.albumId = :albumId AND + position IS NOT NULL + ORDER BY position + """ + ) @RewriteQueriesToDropUnusedColumns fun albumSongs(albumId: String): Flow> @@ -200,79 +252,144 @@ interface Database { @Query("SELECT * FROM Album WHERE bookmarkedAt IS NOT NULL ORDER BY bookmarkedAt DESC") fun albumsByRowIdDesc(): Flow> - fun albums(sortBy: AlbumSortBy, sortOrder: SortOrder): Flow> { - return when (sortBy) { - AlbumSortBy.Title -> when (sortOrder) { - SortOrder.Ascending -> albumsByTitleAsc() - SortOrder.Descending -> albumsByTitleDesc() - } - AlbumSortBy.Year -> when (sortOrder) { - SortOrder.Ascending -> albumsByYearAsc() - SortOrder.Descending -> albumsByYearDesc() - } - AlbumSortBy.DateAdded -> when (sortOrder) { - SortOrder.Ascending -> albumsByRowIdAsc() - SortOrder.Descending -> albumsByRowIdDesc() - } + fun albums(sortBy: AlbumSortBy, sortOrder: SortOrder) = when (sortBy) { + AlbumSortBy.Title -> when (sortOrder) { + SortOrder.Ascending -> albumsByTitleAsc() + SortOrder.Descending -> albumsByTitleDesc() + } + + AlbumSortBy.Year -> when (sortOrder) { + SortOrder.Ascending -> albumsByYearAsc() + SortOrder.Descending -> albumsByYearDesc() + } + + AlbumSortBy.DateAdded -> when (sortOrder) { + SortOrder.Ascending -> albumsByRowIdAsc() + SortOrder.Descending -> albumsByRowIdDesc() } } @Query("UPDATE Song SET totalPlayTimeMs = totalPlayTimeMs + :addition WHERE id = :id") fun incrementTotalPlayTimeMs(id: String, addition: Long) + @Query("SELECT * FROM PipedSession") + fun pipedSessions(): Flow> + + @Query("SELECT * FROM Playlist WHERE id = :id") + fun playlist(id: Long): Flow + + // TODO: apparently this is an edge-case now? + @RewriteQueriesToDropUnusedColumns + @Transaction + @Query( + """ + SELECT * FROM SortedSongPlaylistMap + INNER JOIN Song on Song.id = SortedSongPlaylistMap.songId + WHERE playlistId = :id + ORDER BY SortedSongPlaylistMap.position + """ + ) + fun playlistSongs(id: Long): Flow?> + @Transaction @Query("SELECT * FROM Playlist WHERE id = :id") fun playlistWithSongs(id: Long): Flow @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY name ASC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY name ASC + """ + ) fun playlistPreviewsByNameAsc(): Flow> @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY ROWID ASC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY ROWID ASC + """ + ) fun playlistPreviewsByDateAddedAsc(): Flow> @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY songCount ASC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY songCount ASC + """ + ) fun playlistPreviewsByDateSongCountAsc(): Flow> @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY name DESC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY name DESC + """ + ) fun playlistPreviewsByNameDesc(): Flow> @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY ROWID DESC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY ROWID DESC + """ + ) fun playlistPreviewsByDateAddedDesc(): Flow> @Transaction - @Query("SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist ORDER BY songCount DESC") + @Query( + """ + SELECT id, name, (SELECT COUNT(*) FROM SongPlaylistMap WHERE playlistId = id) as songCount FROM Playlist + ORDER BY songCount DESC + """ + ) fun playlistPreviewsByDateSongCountDesc(): Flow> fun playlistPreviews( sortBy: PlaylistSortBy, sortOrder: SortOrder - ): Flow> { - return when (sortBy) { - PlaylistSortBy.Name -> when (sortOrder) { - SortOrder.Ascending -> playlistPreviewsByNameAsc() - SortOrder.Descending -> playlistPreviewsByNameDesc() - } - PlaylistSortBy.SongCount -> when (sortOrder) { - SortOrder.Ascending -> playlistPreviewsByDateSongCountAsc() - SortOrder.Descending -> playlistPreviewsByDateSongCountDesc() - } - PlaylistSortBy.DateAdded -> when (sortOrder) { - SortOrder.Ascending -> playlistPreviewsByDateAddedAsc() - SortOrder.Descending -> playlistPreviewsByDateAddedDesc() - } + ) = when (sortBy) { + PlaylistSortBy.Name -> when (sortOrder) { + SortOrder.Ascending -> playlistPreviewsByNameAsc() + SortOrder.Descending -> playlistPreviewsByNameDesc() + } + + PlaylistSortBy.SongCount -> when (sortOrder) { + SortOrder.Ascending -> playlistPreviewsByDateSongCountAsc() + SortOrder.Descending -> playlistPreviewsByDateSongCountDesc() + } + + PlaylistSortBy.DateAdded -> when (sortOrder) { + SortOrder.Ascending -> playlistPreviewsByDateAddedAsc() + SortOrder.Descending -> playlistPreviewsByDateAddedDesc() } } - @Query("SELECT thumbnailUrl FROM Song JOIN SongPlaylistMap ON id = songId WHERE playlistId = :id ORDER BY position LIMIT 4") + @Query( + """ + SELECT thumbnailUrl FROM Song + JOIN SongPlaylistMap ON id = songId + WHERE playlistId = :id + ORDER BY position + LIMIT 4 + """ + ) fun playlistThumbnailUrls(id: Long): Flow> @Transaction - @Query("SELECT * FROM Song JOIN SongArtistMap ON Song.id = SongArtistMap.songId WHERE SongArtistMap.artistId = :artistId AND totalPlayTimeMs > 0 ORDER BY Song.ROWID DESC") + @Query( + """ + SELECT * FROM Song + JOIN SongArtistMap ON Song.id = SongArtistMap.songId + WHERE SongArtistMap.artistId = :artistId AND + totalPlayTimeMs > 0 + ORDER BY Song.ROWID DESC + """ + ) @RewriteQueriesToDropUnusedColumns fun artistSongs(artistId: String): Flow> @@ -280,10 +397,41 @@ interface Database { fun format(songId: String): Flow @Transaction - @Query("SELECT Song.*, contentLength FROM Song JOIN Format ON id = songId WHERE contentLength IS NOT NULL AND totalPlayTimeMs > 0 ORDER BY Song.ROWID DESC") + @Query( + """ + SELECT Song.*, contentLength FROM Song + JOIN Format ON id = songId + WHERE contentLength IS NOT NULL + ORDER BY Song.ROWID DESC + """ + ) fun songsWithContentLength(): Flow> - @Query(""" + @Query("SELECT id FROM Song WHERE blacklisted") + suspend fun blacklistedIds(): List + + @Query("SELECT blacklisted FROM Song WHERE id = :songId") + fun blacklisted(songId: String): Flow + + @Query("SELECT COUNT (*) FROM Song where blacklisted") + fun blacklistLength(): Flow + + @Transaction + @Query("UPDATE Song SET blacklisted = NOT blacklisted WHERE blacklisted") + fun resetBlacklist() + + @Transaction + @Query("UPDATE Song SET blacklisted = NOT blacklisted WHERE id = :songId") + fun toggleBlacklist(songId: String) + + suspend fun filterBlacklistedSongs(songs: List): List { + val blacklistedIds = blacklistedIds() + return songs.filter { it.mediaId !in blacklistedIds } + } + + @Transaction + @Query( + """ UPDATE SongPlaylistMap SET position = CASE WHEN position < :fromPosition THEN position + 1 @@ -291,7 +439,8 @@ interface Database { ELSE :toPosition END WHERE playlistId = :playlistId AND position BETWEEN MIN(:fromPosition,:toPosition) and MAX(:fromPosition,:toPosition) - """) + """ + ) fun move(playlistId: Long, fromPosition: Int, toPosition: Int) @Query("DELETE FROM SongPlaylistMap WHERE playlistId = :id") @@ -303,6 +452,12 @@ interface Database { @Query("SELECT loudnessDb FROM Format WHERE songId = :songId") fun loudnessDb(songId: String): Flow + @Query("SELECT Song.loudnessBoost FROM Song WHERE id = :songId") + fun loudnessBoost(songId: String): Flow + + @Query("UPDATE Song SET loudnessBoost = :loudnessBoost WHERE id = :songId") + fun setLoudnessBoost(songId: String, loudnessBoost: Float?) + @Query("SELECT * FROM Song WHERE title LIKE :query OR artistsText LIKE :query") fun search(query: String): Flow> @@ -313,15 +468,42 @@ interface Database { fun songArtistInfo(songId: String): List @Transaction - @Query("SELECT Song.* FROM Event JOIN Song ON Song.id = songId GROUP BY songId ORDER BY SUM(CAST(playTime AS REAL) / (((:now - timestamp) / 86400000) + 1)) DESC LIMIT 1") + @Query( + """ + SELECT Song.* FROM Event + JOIN Song ON Song.id = songId + WHERE Song.id NOT LIKE '$LOCAL_KEY_PREFIX%' + GROUP BY songId + ORDER BY SUM(playTime) + DESC LIMIT :limit + """ + ) @RewriteQueriesToDropUnusedColumns - fun trending(now: Long = System.currentTimeMillis()): Flow + fun trending(limit: Int = 3): Flow> + + @Transaction + @Query( + """ + SELECT Song.* FROM Event + JOIN Song ON Song.id = songId + WHERE (:now - Event.timestamp) <= :period AND + Song.id NOT LIKE '$LOCAL_KEY_PREFIX%' + GROUP BY songId + ORDER BY SUM(playTime) DESC + LIMIT :limit + """ + ) + @RewriteQueriesToDropUnusedColumns + fun trending( + limit: Int = 3, + now: Long = System.currentTimeMillis(), + period: Long + ): Flow> @Transaction @Query("SELECT * FROM Event ORDER BY timestamp DESC") fun events(): Flow> - @Query("SELECT COUNT (*) FROM Event") fun eventsCount(): Flow @@ -365,6 +547,9 @@ interface Database { @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(artists: List, songArtistMaps: List) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(pipedSession: PipedSession) + @Transaction fun insert(mediaItem: MediaItem, block: (Song) -> Song = { it }) { val song = Song( @@ -415,12 +600,12 @@ interface Database { @Upsert fun upsert(album: Album, songAlbumMaps: List) - @Upsert - fun upsert(songAlbumMap: SongAlbumMap) - @Upsert fun upsert(artist: Artist) + @Delete + fun delete(song: Song) + @Delete fun delete(searchQuery: SearchQuery) @@ -430,6 +615,9 @@ interface Database { @Delete fun delete(songPlaylistMap: SongPlaylistMap) + @Delete + fun delete(pipedSession: PipedSession) + @RawQuery fun raw(supportSQLiteQuery: SupportSQLiteQuery): Int @@ -452,11 +640,10 @@ interface Database { Format::class, Event::class, Lyrics::class, + PipedSession::class ], - views = [ - SortedSongPlaylistMap::class - ], - version = 23, + views = [SortedSongPlaylistMap::class], + version = 28, exportSchema = true, autoMigrations = [ AutoMigration(from = 1, to = 2), @@ -477,28 +664,42 @@ interface Database { AutoMigration(from = 19, to = 20), AutoMigration(from = 20, to = 21, spec = DatabaseInitializer.From20To21Migration::class), AutoMigration(from = 21, to = 22, spec = DatabaseInitializer.From21To22Migration::class), - ], + AutoMigration(from = 23, to = 24), + AutoMigration(from = 24, to = 25), + AutoMigration(from = 25, to = 26), + AutoMigration(from = 26, to = 27), + AutoMigration(from = 27, to = 28) + ] ) @TypeConverters(Converters::class) abstract class DatabaseInitializer protected constructor() : RoomDatabase() { abstract val database: Database companion object { - lateinit var Instance: DatabaseInitializer + @Volatile + lateinit var instance: DatabaseInitializer + + private fun buildDatabase() = Room + .databaseBuilder( + context = Dependencies.application.applicationContext, + klass = DatabaseInitializer::class.java, + name = "data.db" + ) + .addMigrations( + From8To9Migration(), + From10To11Migration(), + From14To15Migration(), + From22To23Migration(), + From23To24Migration() + ) + .build() - context(Context) operator fun invoke() { - if (!::Instance.isInitialized) { - Instance = Room - .databaseBuilder(this@Context, DatabaseInitializer::class.java, "data.db") - .addMigrations( - From8To9Migration(), - From10To11Migration(), - From14To15Migration(), - From22To23Migration() - ) - .build() - } + if (!::instance.isInitialized) reload() + } + + fun reload() = synchronized(this) { + instance = buildDatabase() } } @@ -509,81 +710,118 @@ abstract class DatabaseInitializer protected constructor() : RoomDatabase() { class From7To8Migration : AutoMigrationSpec class From8To9Migration : Migration(8, 9) { - override fun migrate(it: SupportSQLiteDatabase) { - it.query(SimpleSQLiteQuery("SELECT DISTINCT browseId, text, Info.id FROM Info JOIN Song ON Info.id = Song.albumId;")) - .use { cursor -> - val albumValues = ContentValues(2) - while (cursor.moveToNext()) { - albumValues.put("id", cursor.getString(0)) - albumValues.put("title", cursor.getString(1)) - it.insert("Album", CONFLICT_IGNORE, albumValues) + override fun migrate(db: SupportSQLiteDatabase) { + db.query( + SimpleSQLiteQuery( + query = "SELECT DISTINCT browseId, text, Info.id FROM Info JOIN Song ON Info.id = Song.albumId;" + ) + ).use { cursor -> + val albumValues = ContentValues(2) + while (cursor.moveToNext()) { + albumValues.put("id", cursor.getString(0)) + albumValues.put("title", cursor.getString(1)) + db.insert("Album", CONFLICT_IGNORE, albumValues) - it.execSQL( - "UPDATE Song SET albumId = '${cursor.getString(0)}' WHERE albumId = ${ - cursor.getLong( - 2 - ) - }" - ) - } + db.execSQL( + "UPDATE Song SET albumId = '${cursor.getString(0)}' WHERE albumId = ${ + cursor.getLong( + 2 + ) + }" + ) } + } - it.query(SimpleSQLiteQuery("SELECT GROUP_CONCAT(text, ''), SongWithAuthors.songId FROM Info JOIN SongWithAuthors ON Info.id = SongWithAuthors.authorInfoId GROUP BY songId;")) - .use { cursor -> - val songValues = ContentValues(1) - while (cursor.moveToNext()) { - songValues.put("artistsText", cursor.getString(0)) - it.update( - "Song", - CONFLICT_IGNORE, - songValues, - "id = ?", - arrayOf(cursor.getString(1)) - ) - } + db.query( + SimpleSQLiteQuery( + query = """ + SELECT GROUP_CONCAT(text, ''), SongWithAuthors.songId FROM Info + JOIN SongWithAuthors ON Info.id = SongWithAuthors.authorInfoId + GROUP BY songId; + """.trimIndent() + ) + ).use { cursor -> + val songValues = ContentValues(1) + while (cursor.moveToNext()) { + songValues.put("artistsText", cursor.getString(0)) + db.update( + table = "Song", + conflictAlgorithm = CONFLICT_IGNORE, + values = songValues, + whereClause = "id = ?", + whereArgs = arrayOf(cursor.getString(1)) + ) } + } - it.query(SimpleSQLiteQuery("SELECT browseId, text, Info.id FROM Info JOIN SongWithAuthors ON Info.id = SongWithAuthors.authorInfoId WHERE browseId NOT NULL;")) - .use { cursor -> - val artistValues = ContentValues(2) - while (cursor.moveToNext()) { - artistValues.put("id", cursor.getString(0)) - artistValues.put("name", cursor.getString(1)) - it.insert("Artist", CONFLICT_IGNORE, artistValues) + db.query( + SimpleSQLiteQuery( + query = """ + SELECT browseId, text, Info.id FROM Info + JOIN SongWithAuthors ON Info.id = SongWithAuthors.authorInfoId + WHERE browseId NOT NULL; + """.trimIndent() + ) + ).use { cursor -> + val artistValues = ContentValues(2) + while (cursor.moveToNext()) { + artistValues.put("id", cursor.getString(0)) + artistValues.put("name", cursor.getString(1)) + db.insert("Artist", CONFLICT_IGNORE, artistValues) - it.execSQL( - "UPDATE SongWithAuthors SET authorInfoId = '${cursor.getString(0)}' WHERE authorInfoId = ${ - cursor.getLong( - 2 - ) - }" - ) - } + db.execSQL( + "UPDATE SongWithAuthors SET authorInfoId = '${cursor.getString(0)}' WHERE authorInfoId = ${ + cursor.getLong(2) + }" + ) } + } - it.execSQL("INSERT INTO SongArtistMap(songId, artistId) SELECT songId, authorInfoId FROM SongWithAuthors") + db.execSQL("INSERT INTO SongArtistMap(songId, artistId) SELECT songId, authorInfoId FROM SongWithAuthors") - it.execSQL("DROP TABLE Info;") - it.execSQL("DROP TABLE SongWithAuthors;") + db.execSQL("DROP TABLE Info;") + db.execSQL("DROP TABLE SongWithAuthors;") } } class From10To11Migration : Migration(10, 11) { - override fun migrate(it: SupportSQLiteDatabase) { - it.query(SimpleSQLiteQuery("SELECT id, albumId FROM Song;")).use { cursor -> + override fun migrate(db: SupportSQLiteDatabase) { + db.query(SimpleSQLiteQuery("SELECT id, albumId FROM Song;")).use { cursor -> val songAlbumMapValues = ContentValues(2) while (cursor.moveToNext()) { songAlbumMapValues.put("songId", cursor.getString(0)) songAlbumMapValues.put("albumId", cursor.getString(1)) - it.insert("SongAlbumMap", CONFLICT_IGNORE, songAlbumMapValues) + db.insert("SongAlbumMap", CONFLICT_IGNORE, songAlbumMapValues) } } - it.execSQL("CREATE TABLE IF NOT EXISTS `Song_new` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, `loudnessDb` REAL, `contentLength` INTEGER, PRIMARY KEY(`id`))") + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS `Song_new` ( + `id` TEXT NOT NULL, + `title` TEXT NOT NULL, + `artistsText` TEXT, + `durationText` TEXT NOT NULL, + `thumbnailUrl` TEXT, `lyrics` TEXT, + `likedAt` INTEGER, + `totalPlayTimeMs` INTEGER NOT NULL, + `loudnessDb` REAL, + `contentLength` INTEGER, + PRIMARY KEY(`id`) + ) + """.trimIndent() + ) - it.execSQL("INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs, loudnessDb, contentLength) SELECT id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs, loudnessDb, contentLength FROM Song;") - it.execSQL("DROP TABLE Song;") - it.execSQL("ALTER TABLE Song_new RENAME TO Song;") + db.execSQL( + """ + INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, lyrics, + likedAt, totalPlayTimeMs, loudnessDb, contentLength) SELECT id, title, artistsText, + durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs, loudnessDb, contentLength + FROM Song; + """.trimIndent() + ) + db.execSQL("DROP TABLE Song;") + db.execSQL("ALTER TABLE Song_new RENAME TO Song;") } } @@ -592,23 +830,43 @@ abstract class DatabaseInitializer protected constructor() : RoomDatabase() { class From11To12Migration : AutoMigrationSpec class From14To15Migration : Migration(14, 15) { - override fun migrate(it: SupportSQLiteDatabase) { - it.query(SimpleSQLiteQuery("SELECT id, loudnessDb, contentLength FROM Song;")) + override fun migrate(db: SupportSQLiteDatabase) { + db.query(SimpleSQLiteQuery("SELECT id, loudnessDb, contentLength FROM Song;")) .use { cursor -> val formatValues = ContentValues(3) while (cursor.moveToNext()) { formatValues.put("songId", cursor.getString(0)) formatValues.put("loudnessDb", cursor.getFloatOrNull(1)) formatValues.put("contentLength", cursor.getFloatOrNull(2)) - it.insert("Format", CONFLICT_IGNORE, formatValues) + db.insert("Format", CONFLICT_IGNORE, formatValues) } } - it.execSQL("CREATE TABLE IF NOT EXISTS `Song_new` (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT NOT NULL, `thumbnailUrl` TEXT, `lyrics` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))") + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS `Song_new` ( + `id` TEXT NOT NULL, + `title` TEXT NOT NULL, + `artistsText` TEXT, + `durationText` TEXT NOT NULL, + `thumbnailUrl` TEXT, + `lyrics` TEXT, + `likedAt` INTEGER, + `totalPlayTimeMs` INTEGER NOT NULL, + PRIMARY KEY(`id`) + ) + """.trimIndent() + ) - it.execSQL("INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs) SELECT id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs FROM Song;") - it.execSQL("DROP TABLE Song;") - it.execSQL("ALTER TABLE Song_new RENAME TO Song;") + db.execSQL( + """ + INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs) + SELECT id, title, artistsText, durationText, thumbnailUrl, lyrics, likedAt, totalPlayTimeMs + FROM Song; + """.trimIndent() + ) + db.execSQL("DROP TABLE Song;") + db.execSQL("ALTER TABLE Song_new RENAME TO Song;") } } @@ -616,7 +874,7 @@ abstract class DatabaseInitializer protected constructor() : RoomDatabase() { DeleteColumn("Artist", "shuffleVideoId"), DeleteColumn("Artist", "shufflePlaylistId"), DeleteColumn("Artist", "radioVideoId"), - DeleteColumn("Artist", "radioPlaylistId"), + DeleteColumn("Artist", "radioPlaylistId") ) class From20To21Migration : AutoMigrationSpec @@ -624,63 +882,103 @@ abstract class DatabaseInitializer protected constructor() : RoomDatabase() { class From21To22Migration : AutoMigrationSpec class From22To23Migration : Migration(22, 23) { - override fun migrate(it: SupportSQLiteDatabase) { - it.execSQL("CREATE TABLE IF NOT EXISTS Lyrics (`songId` TEXT NOT NULL, `fixed` TEXT, `synced` TEXT, PRIMARY KEY(`songId`), FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE)") + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS Lyrics ( + `songId` TEXT NOT NULL, + `fixed` TEXT, + `synced` TEXT, + PRIMARY KEY(`songId`), + FOREIGN KEY(`songId`) REFERENCES `Song`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE + ) + """.trimIndent() + ) - it.query(SimpleSQLiteQuery("SELECT id, lyrics, synchronizedLyrics FROM Song;")).use { cursor -> - val lyricsValues = ContentValues(3) - while (cursor.moveToNext()) { - lyricsValues.put("songId", cursor.getString(0)) - lyricsValues.put("fixed", cursor.getString(1)) - lyricsValues.put("synced", cursor.getString(2)) - it.insert("Lyrics", CONFLICT_IGNORE, lyricsValues) + db.query(SimpleSQLiteQuery("SELECT id, lyrics, synchronizedLyrics FROM Song;")) + .use { cursor -> + val lyricsValues = ContentValues(3) + while (cursor.moveToNext()) { + lyricsValues.put("songId", cursor.getString(0)) + lyricsValues.put("fixed", cursor.getString(1)) + lyricsValues.put("synced", cursor.getString(2)) + db.insert("Lyrics", CONFLICT_IGNORE, lyricsValues) + } } - } - it.execSQL("CREATE TABLE IF NOT EXISTS Song_new (`id` TEXT NOT NULL, `title` TEXT NOT NULL, `artistsText` TEXT, `durationText` TEXT, `thumbnailUrl` TEXT, `likedAt` INTEGER, `totalPlayTimeMs` INTEGER NOT NULL, PRIMARY KEY(`id`))") - it.execSQL("INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, likedAt, totalPlayTimeMs) SELECT id, title, artistsText, durationText, thumbnailUrl, likedAt, totalPlayTimeMs FROM Song;") - it.execSQL("DROP TABLE Song;") - it.execSQL("ALTER TABLE Song_new RENAME TO Song;") + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS Song_new ( + `id` TEXT NOT NULL, + `title` TEXT NOT NULL, + `artistsText` TEXT, + `durationText` TEXT, + `thumbnailUrl` TEXT, + `likedAt` INTEGER, + `totalPlayTimeMs` INTEGER NOT NULL, + PRIMARY KEY(`id`) + ) + """.trimIndent() + ) + db.execSQL( + """ + INSERT INTO Song_new(id, title, artistsText, durationText, thumbnailUrl, likedAt, totalPlayTimeMs) + SELECT id, title, artistsText, durationText, thumbnailUrl, likedAt, totalPlayTimeMs + FROM Song; + """.trimIndent() + ) + db.execSQL("DROP TABLE Song;") + db.execSQL("ALTER TABLE Song_new RENAME TO Song;") } } + + class From23To24Migration : Migration(23, 24) { + override fun migrate(db: SupportSQLiteDatabase) = + db.execSQL("ALTER TABLE Song ADD COLUMN loudnessBoost REAL") + } } @TypeConverters object Converters { @TypeConverter - fun mediaItemFromByteArray(value: ByteArray?): MediaItem? { - return value?.let { byteArray -> - runCatching { - val parcel = Parcel.obtain() - parcel.unmarshall(byteArray, 0, byteArray.size) - parcel.setDataPosition(0) - val bundle = parcel.readBundle(MediaItem::class.java.classLoader) - parcel.recycle() + @OptIn(UnstableApi::class) + fun mediaItemFromByteArray(value: ByteArray?): MediaItem? = value?.let { byteArray -> + runCatching { + val parcel = Parcel.obtain() + parcel.unmarshall(byteArray, 0, byteArray.size) + parcel.setDataPosition(0) + val bundle = parcel.readBundle(MediaItem::class.java.classLoader) + parcel.recycle() - bundle?.let(MediaItem.CREATOR::fromBundle) - }.getOrNull() - } + bundle?.let(MediaItem.CREATOR::fromBundle) + }.getOrNull() } @TypeConverter - fun mediaItemToByteArray(mediaItem: MediaItem?): ByteArray? { - return mediaItem?.toBundle()?.let { persistableBundle -> - val parcel = Parcel.obtain() - parcel.writeBundle(persistableBundle) - val bytes = parcel.marshall() - parcel.recycle() + @OptIn(UnstableApi::class) + fun mediaItemToByteArray(mediaItem: MediaItem?): ByteArray? = mediaItem?.toBundle()?.let { + val parcel = Parcel.obtain() + parcel.writeBundle(it) + val bytes = parcel.marshall() + parcel.recycle() - bytes - } + bytes } + + @TypeConverter + fun urlToString(url: Url) = url.toString() + + @TypeConverter + fun stringToUrl(string: String) = Url(string) } +@Suppress("UnusedReceiverParameter") val Database.internal: RoomDatabase - get() = DatabaseInitializer.Instance + get() = DatabaseInitializer.instance -fun query(block: () -> Unit) = DatabaseInitializer.Instance.queryExecutor.execute(block) +fun query(block: () -> Unit) = DatabaseInitializer.instance.queryExecutor.execute(block) -fun transaction(block: () -> Unit) = with(DatabaseInitializer.Instance) { +fun transaction(block: () -> Unit) = with(DatabaseInitializer.instance) { transactionExecutor.execute { runInTransaction(block) } diff --git a/app/src/main/kotlin/it/hamy/muza/Dependencies.kt b/app/src/main/kotlin/it/hamy/muza/Dependencies.kt index 71cc15d..ac61c29 100644 --- a/app/src/main/kotlin/it/hamy/muza/Dependencies.kt +++ b/app/src/main/kotlin/it/hamy/muza/Dependencies.kt @@ -1,6 +1,6 @@ package it.hamy.muza -import it.hamy.muza.preferences.PreferencesHolder +import it.hamy.compose.preferences.PreferencesHolder object Dependencies { lateinit var application: MainApplication @@ -11,4 +11,4 @@ object Dependencies { } } -open class GlobalPreferencesHolder : PreferencesHolder(Dependencies.application, "preferences") \ No newline at end of file +open class GlobalPreferencesHolder : PreferencesHolder(Dependencies.application, "preferences") diff --git a/app/src/main/kotlin/it/hamy/muza/MainActivity.kt b/app/src/main/kotlin/it/hamy/muza/MainActivity.kt index 9ec32d5..1456e12 100644 --- a/app/src/main/kotlin/it/hamy/muza/MainActivity.kt +++ b/app/src/main/kotlin/it/hamy/muza/MainActivity.kt @@ -4,28 +4,36 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.ServiceConnection -import android.content.SharedPreferences import android.graphics.Bitmap import android.os.Bundle import android.os.IBinder +import android.util.Log import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.tween -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.LocalIndication import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.add +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.isImeVisible import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.systemBars import androidx.compose.material.ripple.LocalRippleTheme import androidx.compose.material.ripple.RippleAlpha @@ -34,6 +42,7 @@ import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -50,37 +59,29 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.LayoutDirection -import androidx.compose.ui.unit.coerceIn +import androidx.compose.ui.unit.coerceAtLeast import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope import androidx.media3.common.MediaItem import androidx.media3.common.Player import com.valentinilk.shimmer.LocalShimmerTheme import com.valentinilk.shimmer.defaultShimmerTheme -import it.hamy.compose.persist.PersistMap -import it.hamy.compose.persist.PersistMapOwner - -import it.hamy.innertube.utils.ProxyPreferenceItem -import it.hamy.innertube.utils.ProxyPreferences -import it.hamy.muza.utils.isProxyEnabledKey -import it.hamy.muza.utils.proxyHostNameKey -import it.hamy.muza.utils.proxyModeKey -import it.hamy.muza.utils.proxyPortKey -import java.net.Proxy - - +import it.hamy.compose.persist.LocalPersistMap import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.requests.playlistPage import it.hamy.innertube.requests.song import it.hamy.muza.enums.ColorPaletteMode import it.hamy.muza.enums.ColorPaletteName -import it.hamy.muza.enums.ThumbnailRoundness +import it.hamy.muza.preferences.AppearancePreferences import it.hamy.muza.service.PlayerService +import it.hamy.muza.service.downloadState import it.hamy.muza.ui.components.BottomSheetMenu import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.rememberBottomSheetState +import it.hamy.muza.ui.components.themed.LinearProgressIndicator import it.hamy.muza.ui.screens.albumRoute import it.hamy.muza.ui.screens.artistRoute import it.hamy.muza.ui.screens.home.HomeScreen @@ -92,56 +93,58 @@ import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.colorPaletteOf import it.hamy.muza.ui.styling.dynamicColorPaletteOf import it.hamy.muza.ui.styling.typographyOf -import it.hamy.muza.utils.applyFontPaddingKey import it.hamy.muza.utils.asMediaItem -import it.hamy.muza.utils.colorPaletteModeKey -import it.hamy.muza.utils.colorPaletteNameKey import it.hamy.muza.utils.forcePlay -import it.hamy.muza.utils.getEnum import it.hamy.muza.utils.intent import it.hamy.muza.utils.isAtLeastAndroid6 import it.hamy.muza.utils.isAtLeastAndroid8 -import it.hamy.muza.utils.preferences -import it.hamy.muza.utils.thumbnailRoundnessKey -import it.hamy.muza.utils.useSystemFontKey +import it.hamy.muza.utils.isCompositionLaunched import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class MainActivity : ComponentActivity(), PersistMapOwner { +import it.hamy.innertube.utils.ProxyPreferenceItem +import it.hamy.innertube.utils.ProxyPreferences +import it.hamy.muza.preferences.getEnum +import it.hamy.muza.preferences.isProxyEnabledKey +import it.hamy.muza.preferences.proxyHostNameKey +import it.hamy.muza.preferences.proxyPortKey +import it.hamy.muza.preferences.proxyModeKey +import it.hamy.muza.preferences.preferences +import java.net.Proxy + +class MainActivity : ComponentActivity() { private val serviceConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { - if (service is PlayerService.Binder) { - this@MainActivity.binder = service - } + if (service is PlayerService.Binder) this@MainActivity.binder = service } override fun onServiceDisconnected(name: ComponentName?) { binder = null + // Try to rebind, otherwise fail + unbindService(this) + bindService(intent(), this, Context.BIND_AUTO_CREATE) } } private var binder by mutableStateOf(null) - override lateinit var persistMap: PersistMap - - override fun onStart() { super.onStart() bindService(intent(), serviceConnection, Context.BIND_AUTO_CREATE) } - @OptIn(ExperimentalFoundationApi::class, ExperimentalAnimationApi::class) + @Suppress("CyclomaticComplexMethod") + @OptIn(ExperimentalLayoutApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - @Suppress("DEPRECATION", "UNCHECKED_CAST") - persistMap = lastCustomNonConfigurationInstance as? PersistMap ?: PersistMap() - WindowCompat.setDecorFitsSystemWindows(window, false) val launchedFromNotification = intent?.extras?.getBoolean("expandPlayerBottomSheet") == true @@ -163,27 +166,27 @@ class MainActivity : ComponentActivity(), PersistMapOwner { var appearance by rememberSaveable( isSystemInDarkTheme, - stateSaver = Appearance.Companion + isCompositionLaunched(), + stateSaver = Appearance.AppearanceSaver ) { - with(preferences) { - val colorPaletteName = getEnum(colorPaletteNameKey, ColorPaletteName.Dynamic) - val colorPaletteMode = getEnum(colorPaletteModeKey, ColorPaletteMode.System) - val thumbnailRoundness = - getEnum(thumbnailRoundnessKey, ThumbnailRoundness.Слабое) - - val useSystemFont = getBoolean(useSystemFontKey, false) - val applyFontPadding = getBoolean(applyFontPaddingKey, false) - - val colorPalette = - colorPaletteOf(colorPaletteName, colorPaletteMode, isSystemInDarkTheme) + with(AppearancePreferences) { + val colorPalette = colorPaletteOf( + name = colorPaletteName, + mode = colorPaletteMode, + isDark = isSystemInDarkTheme + ) setSystemBarAppearance(colorPalette.isDark) mutableStateOf( Appearance( colorPalette = colorPalette, - typography = typographyOf(colorPalette.text, useSystemFont, applyFontPadding), - thumbnailShape = thumbnailRoundness.shape() + typography = typographyOf( + color = colorPalette.text, + useSystemFont = useSystemFont, + applyFontPadding = applyFontPadding + ), + thumbnailShapeCorners = thumbnailRoundness.dp ) ) } @@ -191,19 +194,22 @@ class MainActivity : ComponentActivity(), PersistMapOwner { DisposableEffect(binder, isSystemInDarkTheme) { var bitmapListenerJob: Job? = null + var appearanceUpdaterJob: Job? = null - fun setDynamicPalette(colorPaletteMode: ColorPaletteMode) { - val isDark = - colorPaletteMode == ColorPaletteMode.Dark || (colorPaletteMode == ColorPaletteMode.System && isSystemInDarkTheme) + fun setDynamicPalette( + name: ColorPaletteName, + mode: ColorPaletteMode + ) { + val isDark = mode == ColorPaletteMode.Dark || + mode == ColorPaletteMode.System && isSystemInDarkTheme binder?.setBitmapListener { bitmap: Bitmap? -> if (bitmap == null) { - val colorPalette = - colorPaletteOf( - ColorPaletteName.Dynamic, - colorPaletteMode, - isSystemInDarkTheme - ) + val colorPalette = colorPaletteOf( + name = name, + mode = mode, + isDark = isSystemInDarkTheme + ) setSystemBarAppearance(colorPalette.isDark) @@ -216,7 +222,11 @@ class MainActivity : ComponentActivity(), PersistMapOwner { } bitmapListenerJob = coroutineScope.launch(Dispatchers.IO) { - dynamicColorPaletteOf(bitmap, isDark)?.let { + dynamicColorPaletteOf( + bitmap = bitmap, + isDark = isDark, + isAmoled = name == ColorPaletteName.AMOLED + )?.let { withContext(Dispatchers.Main) { setSystemBarAppearance(it.isDark) } @@ -229,95 +239,88 @@ class MainActivity : ComponentActivity(), PersistMapOwner { } } - val listener = - SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key -> - when (key) { - colorPaletteNameKey, colorPaletteModeKey -> { - val colorPaletteName = - sharedPreferences.getEnum( - colorPaletteNameKey, - ColorPaletteName.Dynamic - ) + with(AppearancePreferences) { + fun setPalette(): Boolean { + if (colorPaletteName != ColorPaletteName.Dynamic && colorPaletteName != ColorPaletteName.AMOLED) + return false - val colorPaletteMode = - sharedPreferences.getEnum( - colorPaletteModeKey, - ColorPaletteMode.System - ) + setDynamicPalette(colorPaletteName, colorPaletteMode) + return true + } + setPalette() - if (colorPaletteName == ColorPaletteName.Dynamic) { - setDynamicPalette(colorPaletteMode) - } else { + appearanceUpdaterJob = coroutineScope.launch { + launch { + combine( + flow = colorPaletteNameProperty.stateFlow, + flow2 = colorPaletteModeProperty.stateFlow + ) { name, mode -> + if (!setPalette()) { bitmapListenerJob?.cancel() binder?.setBitmapListener(null) val colorPalette = colorPaletteOf( - colorPaletteName, - colorPaletteMode, - isSystemInDarkTheme + name = name, + mode = mode, + isDark = isSystemInDarkTheme ) setSystemBarAppearance(colorPalette.isDark) appearance = appearance.copy( colorPalette = colorPalette, - typography = appearance.typography.copy(colorPalette.text), + typography = appearance.typography.copy(colorPalette.text) ) } - } - - thumbnailRoundnessKey -> { - val thumbnailRoundness = - sharedPreferences.getEnum(key, ThumbnailRoundness.Слабое) - - appearance = appearance.copy( - thumbnailShape = thumbnailRoundness.shape() - ) - } - - useSystemFontKey, applyFontPaddingKey -> { - val useSystemFont = sharedPreferences.getBoolean(useSystemFontKey, false) - val applyFontPadding = sharedPreferences.getBoolean(applyFontPaddingKey, false) - - appearance = appearance.copy( - typography = typographyOf(appearance.colorPalette.text, useSystemFont, applyFontPadding), - ) + }.collect() + } + launch { + thumbnailRoundnessProperty.stateFlow.collectLatest { + appearance = appearance.copy(thumbnailShapeCorners = it.dp) } } + launch { + combine( + flow = useSystemFontProperty.stateFlow, + flow2 = applyFontPaddingProperty.stateFlow + ) { system, padding -> + appearance = appearance.copy( + typography = typographyOf( + appearance.colorPalette.text, + system, + padding + ) + ) + }.collectLatest { } + } } + } - with(preferences) { - registerOnSharedPreferenceChangeListener(listener) - - val colorPaletteName = getEnum(colorPaletteNameKey, ColorPaletteName.Dynamic) - if (colorPaletteName == ColorPaletteName.Dynamic) { - setDynamicPalette(getEnum(colorPaletteModeKey, ColorPaletteMode.System)) - } - - onDispose { - bitmapListenerJob?.cancel() - binder?.setBitmapListener(null) - unregisterOnSharedPreferenceChangeListener(listener) - } + onDispose { + bitmapListenerJob?.cancel() + appearanceUpdaterJob?.cancel() + binder?.setBitmapListener(null) } } - val rippleTheme = - remember(appearance.colorPalette.text, appearance.colorPalette.isDark) { - object : RippleTheme { - @Composable - override fun defaultColor(): Color = RippleTheme.defaultRippleColor( - contentColor = appearance.colorPalette.text, - lightTheme = !appearance.colorPalette.isDark - ) + val rippleTheme = remember( + appearance.colorPalette.text, + appearance.colorPalette.isDark + ) { + object : RippleTheme { + @Composable + override fun defaultColor(): Color = RippleTheme.defaultRippleColor( + contentColor = appearance.colorPalette.text, + lightTheme = !appearance.colorPalette.isDark + ) - @Composable - override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha( - contentColor = appearance.colorPalette.text, - lightTheme = !appearance.colorPalette.isDark - ) - } + @Composable + override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha( + contentColor = appearance.colorPalette.text, + lightTheme = !appearance.colorPalette.isDark + ) } + } val shimmerTheme = remember { defaultShimmerTheme.copy( @@ -325,15 +328,15 @@ class MainActivity : ComponentActivity(), PersistMapOwner { animation = tween( durationMillis = 800, easing = LinearEasing, - delayMillis = 250, + delayMillis = 250 ), repeatMode = RepeatMode.Restart ), shaderColors = listOf( Color.Unspecified.copy(alpha = 0.25f), Color.White.copy(alpha = 0.50f), - Color.Unspecified.copy(alpha = 0.25f), - ), + Color.Unspecified.copy(alpha = 0.25f) + ) ) } @@ -346,15 +349,32 @@ class MainActivity : ComponentActivity(), PersistMapOwner { val windowsInsets = WindowInsets.systemBars val bottomDp = with(density) { windowsInsets.getBottom(density).toDp() } - val playerBottomSheetState = rememberBottomSheetState( - dismissedBound = 0.dp, - collapsedBound = Dimensions.collapsedPlayer + bottomDp, - expandedBound = maxHeight, + val imeVisible = WindowInsets.isImeVisible + val imeBottomDp = with(density) { WindowInsets.ime.getBottom(density).toDp() } + val animatedBottomDp by animateDpAsState( + targetValue = if (imeVisible) 0.dp else bottomDp, + label = "" ) - val playerAwareWindowInsets by remember(bottomDp, playerBottomSheetState.value) { + val playerBottomSheetState = rememberBottomSheetState( + dismissedBound = 0.dp, + collapsedBound = Dimensions.items.collapsedPlayerHeight + bottomDp, + expandedBound = maxHeight + ) + + val playerAwareWindowInsets by remember( + bottomDp, + animatedBottomDp, + playerBottomSheetState.value, + imeVisible, + imeBottomDp + ) { derivedStateOf { - val bottom = playerBottomSheetState.value.coerceIn(bottomDp, playerBottomSheetState.collapsedBound) + val bottom = + if (imeVisible) imeBottomDp.coerceAtLeast(playerBottomSheetState.value) + else playerBottomSheetState.value.coerceIn( + animatedBottomDp..playerBottomSheetState.collapsedBound + ) windowsInsets .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) @@ -369,24 +389,52 @@ class MainActivity : ComponentActivity(), PersistMapOwner { LocalShimmerTheme provides shimmerTheme, LocalPlayerServiceBinder provides binder, LocalPlayerAwareWindowInsets provides playerAwareWindowInsets, - LocalLayoutDirection provides LayoutDirection.Ltr + LocalLayoutDirection provides LayoutDirection.Ltr, + LocalPersistMap provides Dependencies.application.persistMap ) { - HomeScreen( - onPlaylistUrl = { url -> - onNewIntent(Intent.parseUri(url, 0)) - } - ) + val isDownloading by downloadState.collectAsState() - Player( - layoutState = playerBottomSheetState, - modifier = Modifier - .align(Alignment.BottomCenter) - ) + Box { + HomeScreen( + onPlaylistUrl = { url -> + onNewIntent(Intent.parseUri(url, 0)) + } + ) + } + + AnimatedVisibility( + visible = isDownloading, + modifier = Modifier.padding(playerAwareWindowInsets.asPaddingValues()) + ) { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.TopCenter) + ) + } + + CompositionLocalProvider( + LocalAppearance provides if ( + AppearancePreferences.colorPaletteName == ColorPaletteName.AMOLED + ) appearance.copy( + colorPalette = dynamicColorPaletteOf( + accentColor = appearance.colorPalette.accent, + isDark = true, + isAmoled = false + ) + ) else appearance + ) { + Player( + layoutState = playerBottomSheetState, + modifier = Modifier.align(Alignment.BottomCenter) + ) + } BottomSheetMenu( state = LocalMenuState.current, modifier = Modifier .align(Alignment.BottomCenter) + .imePadding() ) } @@ -394,17 +442,13 @@ class MainActivity : ComponentActivity(), PersistMapOwner { val player = binder?.player ?: return@DisposableEffect onDispose { } if (player.currentMediaItem == null) { - if (!playerBottomSheetState.isDismissed) { - playerBottomSheetState.dismiss() - } + if (!playerBottomSheetState.isDismissed) playerBottomSheetState.dismiss() } else { if (playerBottomSheetState.isDismissed) { if (launchedFromNotification) { intent.replaceExtras(Bundle()) playerBottomSheetState.expand(tween(700)) - } else { - playerBottomSheetState.collapse(tween(700)) - } + } else playerBottomSheetState.collapse(tween(700)) } } @@ -413,9 +457,7 @@ class MainActivity : ComponentActivity(), PersistMapOwner { if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED && mediaItem != null) { if (mediaItem.mediaMetadata.extras?.getBoolean("isFromPersistentQueue") != true) { playerBottomSheetState.expand(tween(500)) - } else { - playerBottomSheetState.collapse(tween(700)) - } + } else playerBottomSheetState.collapse(tween(700)) } } } @@ -430,15 +472,16 @@ class MainActivity : ComponentActivity(), PersistMapOwner { onNewIntent(intent) } + @Suppress("CyclomaticComplexMethod") override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) - val uri = intent?.data ?: return + val uri = intent?.data ?: intent?.getStringExtra(Intent.EXTRA_TEXT)?.toUri() ?: return - intent.data = null + intent?.data = null this.intent = null - Toast.makeText(this, "Opening url...", Toast.LENGTH_SHORT).show() + Log.d("MainActivity", "Opening url: $uri") lifecycleScope.launch(Dispatchers.IO) { when (val path = uri.pathSegments.firstOrNull()) { @@ -452,7 +495,7 @@ class MainActivity : ComponentActivity(), PersistMapOwner { } } } else { - playlistRoute.ensureGlobal(browseId) + playlistRoute.ensureGlobal(browseId, uri.getQueryParameter("params"), null) } } @@ -463,7 +506,11 @@ class MainActivity : ComponentActivity(), PersistMapOwner { else -> when { path == "watch" -> uri.getQueryParameter("v") uri.host == "youtu.be" -> path - else -> null + else -> { + Toast.makeText(this@MainActivity, "Can't open url $uri", Toast.LENGTH_SHORT) + .show() + null + } }?.let { videoId -> Innertube.song(videoId)?.getOrNull()?.let { song -> val binder = snapshotFlow { binder }.filterNotNull().first() @@ -476,39 +523,26 @@ class MainActivity : ComponentActivity(), PersistMapOwner { } } - override fun onRetainCustomNonConfigurationInstance() = persistMap - override fun onStop() { unbindService(serviceConnection) super.onStop() } - override fun onDestroy() { - if (!isChangingConfigurations) { - persistMap.clear() - } - - super.onDestroy() - } - private fun setSystemBarAppearance(isDark: Boolean) { with(WindowCompat.getInsetsController(window, window.decorView.rootView)) { isAppearanceLightStatusBars = !isDark isAppearanceLightNavigationBars = !isDark } - if (!isAtLeastAndroid6) { - window.statusBarColor = - (if (isDark) Color.Transparent else Color.Black.copy(alpha = 0.2f)).toArgb() - } + if (!isAtLeastAndroid6) window.statusBarColor = + (if (isDark) Color.Transparent else Color.Black.copy(alpha = 0.2f)).toArgb() - if (!isAtLeastAndroid8) { - window.navigationBarColor = - (if (isDark) Color.Transparent else Color.Black.copy(alpha = 0.2f)).toArgb() - } + if (!isAtLeastAndroid8) window.navigationBarColor = + (if (isDark) Color.Transparent else Color.Black.copy(alpha = 0.2f)).toArgb() } } val LocalPlayerServiceBinder = staticCompositionLocalOf { null } -val LocalPlayerAwareWindowInsets = staticCompositionLocalOf { TODO() } +val LocalPlayerAwareWindowInsets = + staticCompositionLocalOf { error("No player insets provided") } diff --git a/app/src/main/kotlin/it/hamy/muza/MainApplication.kt b/app/src/main/kotlin/it/hamy/muza/MainApplication.kt index 6125020..ad1b069 100644 --- a/app/src/main/kotlin/it/hamy/muza/MainApplication.kt +++ b/app/src/main/kotlin/it/hamy/muza/MainApplication.kt @@ -1,20 +1,22 @@ package it.hamy.muza import android.app.Application +import android.util.Log import coil.ImageLoader import coil.ImageLoaderFactory import coil.disk.DiskCache +import coil.util.DebugLogger +import it.hamy.compose.persist.PersistMap +import it.hamy.muza.preferences.DataPreferences +import androidx.work.Configuration as WorkManagerConfiguration import com.yandex.mobile.ads.common.MobileAds -import it.hamy.muza.enums.CoilDiskCacheMaxSize -import it.hamy.muza.utils.coilDiskCacheMaxSizeKey -import it.hamy.muza.utils.getEnum -import it.hamy.muza.utils.preferences -class MainApplication : Application(), ImageLoaderFactory { + +class MainApplication : Application(), ImageLoaderFactory, WorkManagerConfiguration.Provider { override fun onCreate() { super.onCreate() - DatabaseInitializer() Dependencies.init(this) + DatabaseInitializer() MobileAds.initialize(this) { /** * Инициализация либы яндекса @@ -22,21 +24,21 @@ class MainApplication : Application(), ImageLoaderFactory { } } - override fun newImageLoader(): ImageLoader { - return ImageLoader.Builder(this) - .crossfade(true) - .respectCacheHeaders(false) - .diskCache( - DiskCache.Builder() - .directory(cacheDir.resolve("coil")) - .maxSizeBytes( - preferences.getEnum( - coilDiskCacheMaxSizeKey, - CoilDiskCacheMaxSize.`128MB` - ).bytes - ) - .build() - ) - .build() - } + override fun newImageLoader() = ImageLoader.Builder(this) + .crossfade(true) + .respectCacheHeaders(false) + .diskCache( + DiskCache.Builder() + .directory(cacheDir.resolve("coil")) + .maxSizeBytes(DataPreferences.coilDiskCacheMaxSize.bytes) + .build() + ) + .let { if (BuildConfig.DEBUG) it.logger(DebugLogger()) else it } + .build() + + val persistMap = PersistMap() + + override val workManagerConfiguration = WorkManagerConfiguration.Builder() + .setMinimumLoggingLevel(if (BuildConfig.DEBUG) Log.DEBUG else Log.INFO) + .build() } diff --git a/app/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt b/app/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt deleted file mode 100644 index 8919d4e..0000000 --- a/app/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt +++ /dev/null @@ -1,18 +0,0 @@ -package it.hamy.muza.enums - -enum class CoilDiskCacheMaxSize { - `128MB`, - `256MB`, - `512MB`, - `1GB`, - `2GB`; - - val bytes: Long - get() = when (this) { - `128MB` -> 128 - `256MB` -> 256 - `512MB` -> 512 - `1GB` -> 1024 - `2GB` -> 2048 - } * 1000 * 1000L -} diff --git a/app/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheMaxSize.kt b/app/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheMaxSize.kt deleted file mode 100644 index 68eefdb..0000000 --- a/app/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheMaxSize.kt +++ /dev/null @@ -1,22 +0,0 @@ -package it.hamy.muza.enums - -enum class ExoPlayerDiskCacheMaxSize { - `32MB`, - `512MB`, - `1GB`, - `2GB`, - `4GB`, - `8GB`, - Unlimited; - - val bytes: Long - get() = when (this) { - `32MB` -> 32 - `512MB` -> 512 - `1GB` -> 1024 - `2GB` -> 2048 - `4GB` -> 4096 - `8GB` -> 8192 - Unlimited -> 0 - } * 1000 * 1000L -} diff --git a/app/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt b/app/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt deleted file mode 100644 index 59c6fc3..0000000 --- a/app/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt +++ /dev/null @@ -1,24 +0,0 @@ -package it.hamy.muza.enums - -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.ui.graphics.RectangleShape -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.unit.dp - -enum class ThumbnailRoundness { - Отключено, - Слабое, - Среднее, - Сильное, - Максимальное; - - fun shape(): Shape { - return when (this) { - Отключено -> RectangleShape - Слабое -> RoundedCornerShape(2.dp) - Среднее -> RoundedCornerShape(4.dp) - Сильное -> RoundedCornerShape(8.dp) - Максимальное -> RoundedCornerShape(14.dp) - } - } -} diff --git a/app/src/main/kotlin/it/hamy/muza/models/Album.kt b/app/src/main/kotlin/it/hamy/muza/models/Album.kt index 88e4fea..5904f80 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/Album.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/Album.kt @@ -9,10 +9,12 @@ import androidx.room.PrimaryKey data class Album( @PrimaryKey val id: String, val title: String? = null, + val description: String? = null, val thumbnailUrl: String? = null, val year: String? = null, val authorsText: String? = null, val shareUrl: String? = null, val timestamp: Long? = null, - val bookmarkedAt: Long? = null + val bookmarkedAt: Long? = null, + val otherInfo: String? = null ) diff --git a/app/src/main/kotlin/it/hamy/muza/models/Artist.kt b/app/src/main/kotlin/it/hamy/muza/models/Artist.kt index c701c47..eb3cd80 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/Artist.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/Artist.kt @@ -11,5 +11,5 @@ data class Artist( val name: String? = null, val thumbnailUrl: String? = null, val timestamp: Long? = null, - val bookmarkedAt: Long? = null, + val bookmarkedAt: Long? = null ) diff --git a/app/src/main/kotlin/it/hamy/muza/models/EventWithSong.kt b/app/src/main/kotlin/it/hamy/muza/models/EventWithSong.kt index 7dd2e8b..676e4c6 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/EventWithSong.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/EventWithSong.kt @@ -13,4 +13,4 @@ data class EventWithSong( entityColumn = "id" ) val song: Song -) \ No newline at end of file +) diff --git a/app/src/main/kotlin/it/hamy/muza/models/Lyrics.kt b/app/src/main/kotlin/it/hamy/muza/models/Lyrics.kt index 7fdf4de..f784476 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/Lyrics.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/Lyrics.kt @@ -12,12 +12,13 @@ import androidx.room.PrimaryKey entity = Song::class, parentColumns = ["id"], childColumns = ["songId"], - onDelete = ForeignKey.CASCADE, + onDelete = ForeignKey.CASCADE ) ] ) -class Lyrics( +data class Lyrics( @PrimaryKey val songId: String, val fixed: String?, val synced: String?, + val startTime: Long? = null ) diff --git a/app/src/main/kotlin/it/hamy/muza/models/Mood.kt b/app/src/main/kotlin/it/hamy/muza/models/Mood.kt new file mode 100644 index 0000000..2a6de3d --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/models/Mood.kt @@ -0,0 +1,41 @@ +package it.hamy.muza.models + +import android.os.Parcel +import android.os.Parcelable +import androidx.compose.ui.graphics.Color +import it.hamy.innertube.Innertube + +data class Mood( + val name: String, + val color: Color, + val browseId: String?, + val params: String? +) : Parcelable { + constructor(parcel: Parcel) : this( + name = parcel.readString()!!, + color = Color(parcel.readLong()), + browseId = parcel.readString()!!, + params = parcel.readString()!! + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) = with(parcel) { + writeString(name) + writeLong(color.value.toLong()) + writeString(browseId) + writeString(params) + } + + override fun describeContents(): Int = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = Mood(parcel) + override fun newArray(size: Int) = arrayOfNulls(size) + } +} + +fun Innertube.Mood.Item.toUiMood() = Mood( + name = title, + color = Color(stripeColor), + browseId = endpoint.browseId, + params = endpoint.params +) diff --git a/app/src/main/kotlin/it/hamy/muza/models/PipedSession.kt b/app/src/main/kotlin/it/hamy/muza/models/PipedSession.kt new file mode 100644 index 0000000..e83fb7f --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/models/PipedSession.kt @@ -0,0 +1,26 @@ +package it.hamy.muza.models + +import androidx.compose.runtime.Immutable +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey +import io.ktor.http.Url +import it.hamy.piped.models.authenticatedWith + +@Immutable +@Entity( + indices = [ + Index( + value = ["apiBaseUrl", "username"], + unique = true + ) + ] +) +data class PipedSession( + @PrimaryKey(autoGenerate = true) val id: Long = 0, + val apiBaseUrl: Url, + val token: String, + val username: String // the username should never change on piped +) { + fun toApiSession() = apiBaseUrl authenticatedWith token +} diff --git a/app/src/main/kotlin/it/hamy/muza/models/PlaylistPreview.kt b/app/src/main/kotlin/it/hamy/muza/models/PlaylistPreview.kt index 091ee41..3e5e9c0 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/PlaylistPreview.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/PlaylistPreview.kt @@ -1,10 +1,18 @@ package it.hamy.muza.models import androidx.compose.runtime.Immutable -import androidx.room.Embedded @Immutable data class PlaylistPreview( - @Embedded val playlist: Playlist, + val id: Long, + val name: String, val songCount: Int -) +) { + val playlist by lazy { + Playlist( + id = id, + name = name, + browseId = null + ) + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/models/Song.kt b/app/src/main/kotlin/it/hamy/muza/models/Song.kt index cb96e23..fbaa583 100644 --- a/app/src/main/kotlin/it/hamy/muza/models/Song.kt +++ b/app/src/main/kotlin/it/hamy/muza/models/Song.kt @@ -1,6 +1,7 @@ package it.hamy.muza.models import androidx.compose.runtime.Immutable +import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey @@ -13,24 +14,10 @@ data class Song( val durationText: String?, val thumbnailUrl: String?, val likedAt: Long? = null, - val totalPlayTimeMs: Long = 0 + val totalPlayTimeMs: Long = 0, + val loudnessBoost: Float? = null, + @ColumnInfo(defaultValue = "false") + val blacklisted: Boolean = false ) { - val formattedTotalPlayTime: String - get() { - val seconds = totalPlayTimeMs / 1000 - - val hours = seconds / 3600 - - return when { - hours == 0L -> "${seconds / 60}m" - hours < 24L -> "${hours}h" - else -> "${hours / 24}d" - } - } - - fun toggleLike(): Song { - return copy( - likedAt = if (likedAt == null) System.currentTimeMillis() else null - ) - } + fun toggleLike() = copy(likedAt = if (likedAt == null) System.currentTimeMillis() else null) } diff --git a/app/src/main/kotlin/it/hamy/muza/models/ui/UiMedia.kt b/app/src/main/kotlin/it/hamy/muza/models/ui/UiMedia.kt new file mode 100644 index 0000000..ae54dba --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/models/ui/UiMedia.kt @@ -0,0 +1,17 @@ +package it.hamy.muza.models.ui + +import androidx.media3.common.MediaItem + +data class UiMedia( + val id: String, + val title: String, + val artist: String, + val duration: Long +) + +fun MediaItem.toUiMedia(duration: Long) = UiMedia( + id = mediaId, + title = mediaMetadata.title?.toString().orEmpty(), + artist = mediaMetadata.artist?.toString().orEmpty(), + duration = duration +) diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/AppearancePreferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/AppearancePreferences.kt new file mode 100644 index 0000000..94553be --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/preferences/AppearancePreferences.kt @@ -0,0 +1,23 @@ +package it.hamy.muza.preferences + +import it.hamy.muza.GlobalPreferencesHolder +import it.hamy.muza.enums.ColorPaletteMode +import it.hamy.muza.enums.ColorPaletteName +import it.hamy.muza.enums.ThumbnailRoundness + +object AppearancePreferences : GlobalPreferencesHolder() { + val colorPaletteNameProperty = enum(ColorPaletteName.Dynamic) + var colorPaletteName by colorPaletteNameProperty + val colorPaletteModeProperty = enum(ColorPaletteMode.System) + var colorPaletteMode by colorPaletteModeProperty + val thumbnailRoundnessProperty = enum(ThumbnailRoundness.Light) + var thumbnailRoundness by thumbnailRoundnessProperty + val useSystemFontProperty = boolean(false) + var useSystemFont by useSystemFontProperty + val applyFontPaddingProperty = boolean(false) + var applyFontPadding by applyFontPaddingProperty + val isShowingThumbnailInLockscreenProperty = boolean(false) + var isShowingThumbnailInLockscreen by isShowingThumbnailInLockscreenProperty + var swipeToHideSong by boolean(false) + var maxThumbnailSize by int(1920) +} diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/DataPreferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/DataPreferences.kt index 99497b5..592442d 100644 --- a/app/src/main/kotlin/it/hamy/muza/preferences/DataPreferences.kt +++ b/app/src/main/kotlin/it/hamy/muza/preferences/DataPreferences.kt @@ -4,24 +4,33 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import it.hamy.muza.GlobalPreferencesHolder import it.hamy.muza.R +import it.hamy.muza.enums.CoilDiskCacheSize +import it.hamy.muza.enums.ExoPlayerDiskCacheSize import kotlin.time.Duration import kotlin.time.Duration.Companion.days object DataPreferences : GlobalPreferencesHolder() { - var topListLength by int(10) - var topListPeriod by enum(TopListPeriod.AllTime) + var coilDiskCacheMaxSize by enum(CoilDiskCacheSize.`128MB`) + var exoPlayerDiskCacheMaxSize by enum(ExoPlayerDiskCacheSize.`2GB`) + var pauseHistory by boolean(false) + var pausePlaytime by boolean(false) + var pauseSearchHistory by boolean(false) + val topListLengthProperty = int(10) + var topListLength by topListLengthProperty + val topListPeriodProperty = enum(TopListPeriod.AllTime) + var topListPeriod by topListPeriodProperty var quickPicksSource by enum(QuickPicksSource.Trending) enum class TopListPeriod(val displayName: @Composable () -> String, val duration: Duration? = null) { - PastDay(displayName = { "Day" }, duration = 1.days), - PastWeek(displayName = { "Week" }, duration = 7.days), - PastMonth(displayName = { "Month" }, duration = 30.days), - PastYear(displayName = { "Year" }, 365.days), - AllTime(displayName = { "AllTime" }) + PastDay(displayName = { stringResource(R.string.past_24_hours) }, duration = 1.days), + PastWeek(displayName = { stringResource(R.string.past_week) }, duration = 7.days), + PastMonth(displayName = { stringResource(R.string.past_month) }, duration = 30.days), + PastYear(displayName = { stringResource(R.string.past_year) }, 365.days), + AllTime(displayName = { stringResource(R.string.all_time) }) } enum class QuickPicksSource(val displayName: @Composable () -> String) { - Trending(displayName = { "Trend" }), - LastInteraction(displayName = { "LastInteraction" }) + Trending(displayName = { stringResource(R.string.trending) }), + LastInteraction(displayName = { stringResource(R.string.last_interaction) }) } -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/OrderPreferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/OrderPreferences.kt new file mode 100644 index 0000000..aa2beea --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/preferences/OrderPreferences.kt @@ -0,0 +1,22 @@ +package it.hamy.muza.preferences + +import it.hamy.muza.GlobalPreferencesHolder +import it.hamy.muza.enums.AlbumSortBy +import it.hamy.muza.enums.ArtistSortBy +import it.hamy.muza.enums.PlaylistSortBy +import it.hamy.muza.enums.SongSortBy +import it.hamy.muza.enums.SortOrder + +object OrderPreferences : GlobalPreferencesHolder() { + var songSortOrder by enum(SortOrder.Descending) + var localSongSortOrder by enum(SortOrder.Descending) + var playlistSortOrder by enum(SortOrder.Descending) + var albumSortOrder by enum(SortOrder.Descending) + var artistSortOrder by enum(SortOrder.Descending) + + var songSortBy by enum(SongSortBy.DateAdded) + var localSongSortBy by enum(SongSortBy.DateAdded) + var playlistSortBy by enum(PlaylistSortBy.DateAdded) + var albumSortBy by enum(AlbumSortBy.DateAdded) + var artistSortBy by enum(ArtistSortBy.DateAdded) +} diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/PlayerPreferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/PlayerPreferences.kt new file mode 100644 index 0000000..c63255a --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/preferences/PlayerPreferences.kt @@ -0,0 +1,66 @@ +package it.hamy.muza.preferences + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import it.hamy.muza.GlobalPreferencesHolder +import it.hamy.muza.R + +object PlayerPreferences : GlobalPreferencesHolder() { + val isInvincibilityEnabledProperty = boolean(false) + var isInvincibilityEnabled by isInvincibilityEnabledProperty + val trackLoopEnabledProperty = boolean(false) + var trackLoopEnabled by trackLoopEnabledProperty + val queueLoopEnabledProperty = boolean(true) + var queueLoopEnabled by queueLoopEnabledProperty + val skipSilenceProperty = boolean(false) + var skipSilence by skipSilenceProperty + val volumeNormalizationProperty = boolean(false) + var volumeNormalization by volumeNormalizationProperty + val volumeNormalizationBaseGainProperty = float(5.00f) + var volumeNormalizationBaseGain by volumeNormalizationBaseGainProperty + val bassBoostProperty = boolean(false) + var bassBoost by bassBoostProperty + val bassBoostLevelProperty = int(5) + var bassBoostLevel by bassBoostLevelProperty + val resumePlaybackWhenDeviceConnectedProperty = boolean(false) + var resumePlaybackWhenDeviceConnected by resumePlaybackWhenDeviceConnectedProperty + val speedProperty = float(1f) + var speed by speedProperty + + var minimumSilence by long(2_000_000L) + var persistentQueue by boolean(true) + var isShowingLyrics by boolean(false) + var isShowingSynchronizedLyrics by boolean(false) + var isShowingPrevButtonCollapsed by boolean(false) + var stopWhenClosed by boolean(false) + var horizontalSwipeToClose by boolean(false) + var horizontalSwipeToRemoveItem by boolean(false) + var playerLayout by enum(PlayerLayout.Classic) + var seekBarStyle by enum(SeekBarStyle.Wavy) + var wavySeekBarQuality by enum(WavySeekBarQuality.Great) + var showLike by boolean(false) + + enum class PlayerLayout(val displayName: @Composable () -> String) { + Classic(displayName = { stringResource(R.string.classic_player_layout_name) }), + New(displayName = { stringResource(R.string.new_player_layout_name) }) + } + + enum class SeekBarStyle(val displayName: @Composable () -> String) { + Static(displayName = { stringResource(R.string.static_seek_bar_name) }), + Wavy(displayName = { stringResource(R.string.wavy_seek_bar_name) }) + } + + enum class WavySeekBarQuality( + val quality: Float, + val displayName: @Composable () -> String + ) { + Poor(quality = 50f, displayName = { stringResource(R.string.seek_bar_quality_poor) }), + Low(quality = 25f, displayName = { stringResource(R.string.seek_bar_quality_low) }), + Medium(quality = 15f, displayName = { stringResource(R.string.seek_bar_quality_medium) }), + High(quality = 5f, displayName = { stringResource(R.string.seek_bar_quality_high) }), + Great(quality = 1f, displayName = { stringResource(R.string.seek_bar_quality_great) }), + Subpixel(quality = 0.5f, displayName = { stringResource(R.string.seek_bar_quality_subpixel) }) + } + + val volumeNormalizationBaseGainRounded get() = (volumeNormalizationBaseGain * 100).toInt() +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/ProxyPreferences.kt similarity index 64% rename from app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt rename to app/src/main/kotlin/it/hamy/muza/preferences/ProxyPreferences.kt index 89b5bd0..d695158 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/Preferences.kt +++ b/app/src/main/kotlin/it/hamy/muza/preferences/ProxyPreferences.kt @@ -1,4 +1,4 @@ -package it.hamy.muza.utils +package it.hamy.muza.preferences import android.content.Context import android.content.SharedPreferences @@ -10,34 +10,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.core.content.edit -const val colorPaletteNameKey = "colorPaletteName" -const val colorPaletteModeKey = "colorPaletteMode" -const val thumbnailRoundnessKey = "thumbnailRoundness" -const val coilDiskCacheMaxSizeKey = "coilDiskCacheMaxSize" -const val exoPlayerDiskCacheMaxSizeKey = "exoPlayerDiskCacheMaxSize" -const val isInvincibilityEnabledKey = "isInvincibilityEnabled" -const val useSystemFontKey = "useSystemFont" -const val applyFontPaddingKey = "applyFontPadding" -const val songSortOrderKey = "songSortOrder" -const val songSortByKey = "songSortBy" -const val playlistSortOrderKey = "playlistSortOrder" -const val playlistSortByKey = "playlistSortBy" -const val albumSortOrderKey = "albumSortOrder" -const val albumSortByKey = "albumSortBy" -const val artistSortOrderKey = "artistSortOrder" -const val artistSortByKey = "artistSortBy" -const val trackLoopEnabledKey = "trackLoopEnabled" -const val queueLoopEnabledKey = "queueLoopEnabled" -const val skipSilenceKey = "skipSilence" -const val volumeNormalizationKey = "volumeNormalization" -const val resumePlaybackWhenDeviceConnectedKey = "resumePlaybackWhenDeviceConnected" -const val persistentQueueKey = "persistentQueue" -const val isShowingSynchronizedLyricsKey = "isShowingSynchronizedLyrics" -const val isShowingThumbnailInLockscreenKey = "isShowingThumbnailInLockscreen" -const val homeScreenTabIndexKey = "homeScreenTabIndex" -const val searchResultScreenTabIndexKey = "searchResultScreenTabIndex" -const val artistScreenTabIndexKey = "artistScreenTabIndex" -const val pauseSearchHistoryKey = "pauseSearchHistory" const val isProxyEnabledKey = "isProxyEnabled" const val proxyHostNameKey = "proxyHostname" const val proxyPortKey = "proxyPortKey" @@ -116,4 +88,4 @@ inline fun mutableStatePreferenceOf( if (!areEquals) onStructuralInequality(b) return areEquals } - }) + }) \ No newline at end of file diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/UIStatePreferences.kt b/app/src/main/kotlin/it/hamy/muza/preferences/UIStatePreferences.kt new file mode 100644 index 0000000..8cc6389 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/preferences/UIStatePreferences.kt @@ -0,0 +1,11 @@ +package it.hamy.muza.preferences + +import it.hamy.muza.GlobalPreferencesHolder + +object UIStatePreferences : GlobalPreferencesHolder() { + var homeScreenTabIndex by int(0) + var searchResultScreenTabIndex by int(0) + + var artistScreenTabIndexProperty = int(0) + var artistScreenTabIndex by artistScreenTabIndexProperty +} diff --git a/app/src/main/kotlin/it/hamy/muza/service/BitmapProvider.kt b/app/src/main/kotlin/it/hamy/muza/service/BitmapProvider.kt index 8aacac2..e31abdb 100644 --- a/app/src/main/kotlin/it/hamy/muza/service/BitmapProvider.kt +++ b/app/src/main/kotlin/it/hamy/muza/service/BitmapProvider.kt @@ -13,8 +13,8 @@ import it.hamy.muza.utils.thumbnail context(Context) class BitmapProvider( - private val bitmapSize: Int, - private val colorProvider: (isSystemInDarkMode: Boolean) -> Int + private val getBitmapSize: () -> Int, + private val getColor: (isDark: Boolean) -> Int ) { var lastUri: Uri? = null private set @@ -47,10 +47,14 @@ class BitmapProvider( lastIsSystemInDarkMode = isSystemInDarkMode - defaultBitmap = - Bitmap.createBitmap(bitmapSize, bitmapSize, Bitmap.Config.ARGB_8888).applyCanvas { - drawColor(colorProvider(isSystemInDarkMode)) - } + val size = getBitmapSize() + defaultBitmap = Bitmap.createBitmap( + /* width = */ size, + /* height = */ size, + /* config = */ Bitmap.Config.ARGB_8888 + ).applyCanvas { + drawColor(getColor(isSystemInDarkMode)) + } return lastBitmap == null } @@ -63,7 +67,7 @@ class BitmapProvider( lastEnqueued = applicationContext.imageLoader.enqueue( ImageRequest.Builder(applicationContext) - .data(uri.thumbnail(bitmapSize)) + .data(uri.thumbnail(getBitmapSize())) .allowHardware(false) .listener( onError = { _, _ -> diff --git a/app/src/main/kotlin/it/hamy/muza/service/PlaybackExceptions.kt b/app/src/main/kotlin/it/hamy/muza/service/PlaybackExceptions.kt index 067a5af..1a26ec6 100644 --- a/app/src/main/kotlin/it/hamy/muza/service/PlaybackExceptions.kt +++ b/app/src/main/kotlin/it/hamy/muza/service/PlaybackExceptions.kt @@ -1,11 +1,12 @@ +@file:OptIn(UnstableApi::class) + package it.hamy.muza.service +import androidx.annotation.OptIn import androidx.media3.common.PlaybackException +import androidx.media3.common.util.UnstableApi class PlayableFormatNotFoundException : PlaybackException(null, null, ERROR_CODE_REMOTE_ERROR) - class UnplayableException : PlaybackException(null, null, ERROR_CODE_REMOTE_ERROR) - class LoginRequiredException : PlaybackException(null, null, ERROR_CODE_REMOTE_ERROR) - class VideoIdMismatchException : PlaybackException(null, null, ERROR_CODE_REMOTE_ERROR) diff --git a/app/src/main/kotlin/it/hamy/muza/service/PlayerMediaBrowserService.kt b/app/src/main/kotlin/it/hamy/muza/service/PlayerMediaBrowserService.kt index ef3be29..2a84fe9 100644 --- a/app/src/main/kotlin/it/hamy/muza/service/PlayerMediaBrowserService.kt +++ b/app/src/main/kotlin/it/hamy/muza/service/PlayerMediaBrowserService.kt @@ -1,7 +1,5 @@ package it.hamy.muza.service -import android.media.MediaDescription as BrowserMediaDescription -import android.media.browse.MediaBrowser.MediaItem as BrowserMediaItem import android.content.ComponentName import android.content.ContentResolver import android.content.Context @@ -13,16 +11,18 @@ import android.os.IBinder import android.os.Process import android.service.media.MediaBrowserService import androidx.annotation.DrawableRes +import androidx.annotation.OptIn import androidx.core.net.toUri import androidx.core.os.bundleOf -import androidx.media3.common.Player -import androidx.media3.datasource.cache.Cache +import androidx.media3.common.util.UnstableApi import it.hamy.muza.Database import it.hamy.muza.R import it.hamy.muza.models.Album import it.hamy.muza.models.PlaylistPreview import it.hamy.muza.models.Song import it.hamy.muza.models.SongWithContentLength +import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.preferences.OrderPreferences import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.forcePlayAtIndex import it.hamy.muza.utils.forceSeekToNext @@ -30,10 +30,15 @@ import it.hamy.muza.utils.forceSeekToPrevious import it.hamy.muza.utils.intent import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.cancellable +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext +import android.media.MediaDescription as BrowserMediaDescription +import android.media.browse.MediaBrowser.MediaItem as BrowserMediaItem class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val coroutineScope = CoroutineScope(Dispatchers.IO) @@ -42,18 +47,15 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private var bound = false override fun onDestroy() { - if (bound) { - unbindService(this) - } + if (bound) unbindService(this) super.onDestroy() } override fun onServiceConnected(className: ComponentName, service: IBinder) { - if (service is PlayerService.Binder) { - bound = true - sessionToken = service.mediaSession.sessionToken - service.mediaSession.setCallback(SessionCallback(service.player, service.cache)) - } + if (service !is PlayerService.Binder) return + bound = true + sessionToken = service.mediaSession.sessionToken + service.mediaSession.setCallback(SessionCallback(service)) } override fun onServiceDisconnected(name: ComponentName) = Unit @@ -62,35 +64,32 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { clientPackageName: String, clientUid: Int, rootHints: Bundle? - ): BrowserRoot? { - return if (clientUid == Process.myUid() - || clientUid == Process.SYSTEM_UID - || clientPackageName == "com.google.android.projection.gearhead" - ) { - bindService(intent(), this, Context.BIND_AUTO_CREATE) - BrowserRoot( - MediaId.root, - bundleOf("android.media.browse.CONTENT_STYLE_BROWSABLE_HINT" to 1) - ) - } else { - null - } - } + ) = if (clientUid == Process.myUid() || clientUid == Process.SYSTEM_UID || + clientPackageName == "com.google.android.projection.gearhead" + ) { + bindService(intent(), this, Context.BIND_AUTO_CREATE) + BrowserRoot( + MediaId.ROOT.id, + bundleOf("android.media.browse.CONTENT_STYLE_BROWSABLE_HINT" to 1) + ) + } else null - override fun onLoadChildren(parentId: String, result: Result>) { - runBlocking(Dispatchers.IO) { - result.sendResult( - when (parentId) { - MediaId.root -> mutableListOf( - songsBrowserMediaItem, - playlistsBrowserMediaItem, - albumsBrowserMediaItem - ) + override fun onLoadChildren( + parentId: String, + result: Result> + ) = runBlocking(Dispatchers.IO) { + result.sendResult( + when (MediaId(parentId)) { + MediaId.ROOT -> mutableListOf( + songsBrowserMediaItem, + playlistsBrowserMediaItem, + albumsBrowserMediaItem + ) - MediaId.songs -> Database - .songsByPlayTimeDesc() + MediaId.SONGS -> + Database + .songsByPlayTimeDesc(limit = 30) .first() - .take(30) .also { lastSongs = it } .map { it.asBrowserMediaItem } .toMutableList() @@ -98,7 +97,8 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { if (isNotEmpty()) add(0, shuffleBrowserMediaItem) } - MediaId.playlists -> Database + MediaId.PLAYLISTS -> + Database .playlistPreviewsByDateAddedDesc() .first() .map { it.asBrowserMediaItem } @@ -106,18 +106,20 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { .apply { add(0, favoritesBrowserMediaItem) add(1, offlineBrowserMediaItem) + add(2, topBrowserMediaItem) + add(3, localBrowserMediaItem) } - MediaId.albums -> Database + MediaId.ALBUMS -> + Database .albumsByRowIdDesc() .first() .map { it.asBrowserMediaItem } .toMutableList() - else -> mutableListOf() - } - ) - } + else -> mutableListOf() + } + ) } private fun uriFor(@DrawableRes id: Int) = Uri.Builder() @@ -130,8 +132,8 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val shuffleBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.shuffle) - .setTitle("Shuffle") + .setMediaId(MediaId.SHUFFLE.id) + .setTitle(getString(R.string.shuffle)) .setIconUri(uriFor(R.drawable.shuffle)) .build(), BrowserMediaItem.FLAG_PLAYABLE @@ -140,19 +142,18 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val songsBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.songs) - .setTitle("Songs") + .setMediaId(MediaId.SONGS.id) + .setTitle(getString(R.string.songs)) .setIconUri(uriFor(R.drawable.musical_notes)) .build(), BrowserMediaItem.FLAG_BROWSABLE ) - private val playlistsBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.playlists) - .setTitle("Playlists") + .setMediaId(MediaId.PLAYLISTS.id) + .setTitle(getString(R.string.playlists)) .setIconUri(uriFor(R.drawable.playlist)) .build(), BrowserMediaItem.FLAG_BROWSABLE @@ -161,8 +162,8 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val albumsBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.albums) - .setTitle("Albums") + .setMediaId(MediaId.ALBUMS.id) + .setTitle(getString(R.string.albums)) .setIconUri(uriFor(R.drawable.disc)) .build(), BrowserMediaItem.FLAG_BROWSABLE @@ -171,8 +172,8 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val favoritesBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.favorites) - .setTitle("Favorites") + .setMediaId(MediaId.FAVORITES.id) + .setTitle(getString(R.string.favorites)) .setIconUri(uriFor(R.drawable.heart)) .build(), BrowserMediaItem.FLAG_PLAYABLE @@ -181,17 +182,42 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val offlineBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.offline) - .setTitle("Offline") + .setMediaId(MediaId.OFFLINE.id) + .setTitle(getString(R.string.offline)) .setIconUri(uriFor(R.drawable.airplane)) .build(), BrowserMediaItem.FLAG_PLAYABLE ) + private val topBrowserMediaItem + inline get() = BrowserMediaItem( + BrowserMediaDescription.Builder() + .setMediaId(MediaId.TOP.id) + .setTitle( + getString( + R.string.format_my_top_playlist, + DataPreferences.topListLength.toString() + ) + ) + .setIconUri(uriFor(R.drawable.trending)) + .build(), + BrowserMediaItem.FLAG_PLAYABLE + ) + + private val localBrowserMediaItem + inline get() = BrowserMediaItem( + BrowserMediaDescription.Builder() + .setMediaId(MediaId.LOCAL.id) + .setTitle(getString(R.string.local)) + .setIconUri(uriFor(R.drawable.download)) + .build(), + BrowserMediaItem.FLAG_PLAYABLE + ) + private val Song.asBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.forSong(id)) + .setMediaId((MediaId.SONGS / id).id) .setTitle(title) .setSubtitle(artistsText) .setIconUri(thumbnailUrl?.toUri()) @@ -202,9 +228,15 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val PlaylistPreview.asBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.forPlaylist(playlist.id)) + .setMediaId((MediaId.PLAYLISTS / playlist.id.toString()).id) .setTitle(playlist.name) - .setSubtitle("$songCount songs") + .setSubtitle( + resources.getQuantityString( + R.plurals.song_count_plural, + songCount, + songCount + ) + ) .setIconUri(uriFor(R.drawable.playlist)) .build(), BrowserMediaItem.FLAG_PLAYABLE @@ -213,7 +245,7 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { private val Album.asBrowserMediaItem inline get() = BrowserMediaItem( BrowserMediaDescription.Builder() - .setMediaId(MediaId.forAlbum(id)) + .setMediaId((MediaId.ALBUMS / id).id) .setTitle(title) .setSubtitle(authorsText) .setIconUri(thumbnailUrl?.toUri()) @@ -221,81 +253,116 @@ class PlayerMediaBrowserService : MediaBrowserService(), ServiceConnection { BrowserMediaItem.FLAG_PLAYABLE ) - private inner class SessionCallback(private val player: Player, private val cache: Cache) : - MediaSession.Callback() { - override fun onPlay() = player.play() - override fun onPause() = player.pause() - override fun onSkipToPrevious() = player.forceSeekToPrevious() - override fun onSkipToNext() = player.forceSeekToNext() - override fun onSeekTo(pos: Long) = player.seekTo(pos) - override fun onSkipToQueueItem(id: Long) = player.seekToDefaultPosition(id.toInt()) + private inner class SessionCallback( + private val binder: PlayerService.Binder + ) : MediaSession.Callback() { + override fun onPlay() = binder.player.play() + override fun onPause() = binder.player.pause() + override fun onSkipToPrevious() = binder.player.forceSeekToPrevious() + override fun onSkipToNext() = binder.player.forceSeekToNext() + override fun onSeekTo(pos: Long) = binder.player.seekTo(pos) + override fun onSkipToQueueItem(id: Long) = binder.player.seekToDefaultPosition(id.toInt()) + override fun onPlayFromSearch(query: String?, extras: Bundle?) { + if (query.isNullOrBlank()) return + binder.playFromSearch(query) + } + @OptIn(UnstableApi::class) override fun onPlayFromMediaId(mediaId: String?, extras: Bundle?) { val data = mediaId?.split('/') ?: return var index = 0 coroutineScope.launch { - val mediaItems = when (data.getOrNull(0)) { - MediaId.shuffle -> lastSongs + val mediaItems = when (data.getOrNull(0)?.let { MediaId(it) }) { + MediaId.SHUFFLE -> lastSongs - MediaId.songs -> data - .getOrNull(1) - ?.let { songId -> - index = lastSongs.indexOfFirst { it.id == songId } - lastSongs - } + MediaId.SONGS -> data.getOrNull(1)?.let { songId -> + index = lastSongs.indexOfFirst { it.id == songId } + lastSongs + } - MediaId.favorites -> Database - .favorites() - .first() - .shuffled() + MediaId.FAVORITES -> + Database + .favorites() + .first() + .shuffled() - MediaId.offline -> Database - .songsWithContentLength() - .first() - .filter { song -> - song.contentLength?.let { - cache.isCached(song.song.id, 0, it) - } ?: false - } - .map(SongWithContentLength::song) - .shuffled() + MediaId.OFFLINE -> + Database + .songsWithContentLength() + .first() + .filter { binder.isCached(it) } + .map(SongWithContentLength::song) + .shuffled() - MediaId.playlists -> data - .getOrNull(1) - ?.toLongOrNull() - ?.let(Database::playlistWithSongs) - ?.first() - ?.songs - ?.shuffled() + MediaId.TOP -> { + val duration = DataPreferences.topListPeriod.duration + val length = DataPreferences.topListLength - MediaId.albums -> data - .getOrNull(1) - ?.let(Database::albumSongs) - ?.first() + val flow = if (duration != null) Database.trending( + limit = length, + period = duration.inWholeMilliseconds + ) else Database + .songsByPlayTimeDesc(limit = length) + .distinctUntilChanged() + .cancellable() + + flow.first() + } + + MediaId.LOCAL -> + Database + .songs( + sortBy = OrderPreferences.localSongSortBy, + sortOrder = OrderPreferences.localSongSortOrder, + isLocal = true + ) + .map { songs -> songs.filter { it.durationText != "0:00" } } + .first() + + MediaId.PLAYLISTS -> + data + .getOrNull(1) + ?.toLongOrNull() + ?.let(Database::playlistWithSongs) + ?.first() + ?.songs + ?.shuffled() + + MediaId.ALBUMS -> + data + .getOrNull(1) + ?.let(Database::albumSongs) + ?.first() else -> emptyList() }?.map(Song::asMediaItem) ?: return@launch withContext(Dispatchers.Main) { - player.forcePlayAtIndex(mediaItems, index.coerceIn(0, mediaItems.size)) + binder.player.forcePlayAtIndex( + items = mediaItems, + index = index.coerceIn(0, mediaItems.size) + ) } } } } - private object MediaId { - const val root = "root" - const val songs = "songs" - const val playlists = "playlists" - const val albums = "albums" + @JvmInline + private value class MediaId(val id: String) : CharSequence by id { + companion object { + val ROOT = MediaId("root") + val SONGS = MediaId("songs") + val PLAYLISTS = MediaId("playlists") + val ALBUMS = MediaId("albums") - const val favorites = "favorites" - const val offline = "offline" - const val shuffle = "shuffle" + val FAVORITES = MediaId("favorites") + val OFFLINE = MediaId("offline") + val TOP = MediaId("top") + val LOCAL = MediaId("local") + val SHUFFLE = MediaId("shuffle") + } - fun forSong(id: String) = "songs/$id" - fun forPlaylist(id: Long) = "playlists/$id" - fun forAlbum(id: String) = "albums/$id" + operator fun div(other: String) = MediaId("$id/$other") } } diff --git a/app/src/main/kotlin/it/hamy/muza/service/PlayerService.kt b/app/src/main/kotlin/it/hamy/muza/service/PlayerService.kt index 1dc6e7c..272ba07 100644 --- a/app/src/main/kotlin/it/hamy/muza/service/PlayerService.kt +++ b/app/src/main/kotlin/it/hamy/muza/service/PlayerService.kt @@ -1,6 +1,5 @@ package it.hamy.muza.service -import android.os.Binder as AndroidBinder import android.annotation.SuppressLint import android.app.Notification import android.app.NotificationChannel @@ -10,9 +9,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.content.SharedPreferences import android.content.res.Configuration -import android.database.SQLException import android.graphics.Bitmap import android.graphics.Color import android.media.AudioDeviceCallback @@ -21,16 +18,21 @@ import android.media.AudioManager import android.media.MediaDescription import android.media.MediaMetadata import android.media.audiofx.AudioEffect +import android.media.audiofx.BassBoost import android.media.audiofx.LoudnessEnhancer import android.media.session.MediaSession import android.media.session.PlaybackState import android.net.Uri +import android.os.Bundle import android.os.Handler import android.text.format.DateUtils +import android.widget.Toast +import androidx.annotation.OptIn import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat.startForegroundService import androidx.core.content.getSystemService import androidx.core.net.toUri @@ -41,16 +43,12 @@ import androidx.media3.common.MediaItem import androidx.media3.common.PlaybackException import androidx.media3.common.Player import androidx.media3.common.Timeline +import androidx.media3.common.audio.SonicAudioProcessor +import androidx.media3.common.util.UnstableApi import androidx.media3.database.StandaloneDatabaseProvider -import androidx.media3.datasource.DataSource - -import androidx.media3.datasource.okhttp.OkHttpDataSource -import it.hamy.innertube.utils.ProxyPreferences -import okhttp3.OkHttpClient -import java.net.InetSocketAddress -import java.net.Proxy -import java.time.Duration - +import androidx.media3.datasource.DataSpec +import androidx.media3.datasource.DefaultDataSource +import androidx.media3.datasource.DefaultHttpDataSource import androidx.media3.datasource.ResolvingDataSource import androidx.media3.datasource.cache.Cache import androidx.media3.datasource.cache.CacheDataSource @@ -63,168 +61,186 @@ import androidx.media3.exoplayer.analytics.AnalyticsListener import androidx.media3.exoplayer.analytics.PlaybackStats import androidx.media3.exoplayer.analytics.PlaybackStatsListener import androidx.media3.exoplayer.audio.AudioRendererEventListener +import androidx.media3.exoplayer.audio.AudioSink +import androidx.media3.exoplayer.audio.DefaultAudioOffloadSupportProvider import androidx.media3.exoplayer.audio.DefaultAudioSink import androidx.media3.exoplayer.audio.DefaultAudioSink.DefaultAudioProcessorChain import androidx.media3.exoplayer.audio.MediaCodecAudioRenderer import androidx.media3.exoplayer.audio.SilenceSkippingAudioProcessor -import androidx.media3.exoplayer.audio.SonicAudioProcessor import androidx.media3.exoplayer.mediacodec.MediaCodecSelector import androidx.media3.exoplayer.source.DefaultMediaSourceFactory -import androidx.media3.exoplayer.source.MediaSource -import androidx.media3.extractor.ExtractorsFactory -import androidx.media3.extractor.mkv.MatroskaExtractor -import androidx.media3.extractor.mp4.FragmentedMp4Extractor +import androidx.media3.extractor.DefaultExtractorsFactory import it.hamy.innertube.Innertube import it.hamy.innertube.models.NavigationEndpoint import it.hamy.innertube.models.bodies.PlayerBody +import it.hamy.innertube.models.bodies.SearchBody import it.hamy.innertube.requests.player +import it.hamy.innertube.requests.searchPage +import it.hamy.innertube.utils.from import it.hamy.muza.Database import it.hamy.muza.MainActivity import it.hamy.muza.R -import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize +import it.hamy.muza.enums.ExoPlayerDiskCacheSize import it.hamy.muza.models.Event import it.hamy.muza.models.QueuedMediaItem +import it.hamy.muza.models.Song +import it.hamy.muza.models.SongWithContentLength +import it.hamy.muza.preferences.AppearancePreferences +import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.preferences.PlayerPreferences import it.hamy.muza.query +import it.hamy.muza.transaction +import it.hamy.muza.utils.ConditionalCacheDataSourceFactory import it.hamy.muza.utils.InvincibleService import it.hamy.muza.utils.RingBuffer import it.hamy.muza.utils.TimerJob import it.hamy.muza.utils.YouTubeRadio import it.hamy.muza.utils.activityPendingIntent -import it.hamy.muza.utils.broadCastPendingIntent -import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey +import it.hamy.muza.utils.broadcastPendingIntent import it.hamy.muza.utils.findNextMediaItemById import it.hamy.muza.utils.forcePlayFromBeginning import it.hamy.muza.utils.forceSeekToNext import it.hamy.muza.utils.forceSeekToPrevious -import it.hamy.muza.utils.getEnum import it.hamy.muza.utils.intent +import it.hamy.muza.utils.isAtLeastAndroid10 +import it.hamy.muza.utils.isAtLeastAndroid12 import it.hamy.muza.utils.isAtLeastAndroid13 import it.hamy.muza.utils.isAtLeastAndroid6 import it.hamy.muza.utils.isAtLeastAndroid8 -import it.hamy.muza.utils.isInvincibilityEnabledKey -import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey import it.hamy.muza.utils.mediaItems -import it.hamy.muza.utils.persistentQueueKey -import it.hamy.muza.utils.preferences -import it.hamy.muza.utils.queueLoopEnabledKey -import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey import it.hamy.muza.utils.shouldBePlaying -import it.hamy.muza.utils.skipSilenceKey +import it.hamy.muza.utils.thumbnail import it.hamy.muza.utils.timer -import it.hamy.muza.utils.trackLoopEnabledKey -import it.hamy.muza.utils.volumeNormalizationKey -import kotlin.math.roundToInt -import kotlin.system.exitProcess import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.cancellable +import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapMerge +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import kotlinx.coroutines.plus import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext +import kotlin.math.roundToInt +import kotlin.system.exitProcess +import android.os.Binder as AndroidBinder +import java.net.Proxy +import it.hamy.innertube.utils.ProxyPreferences +import okhttp3.OkHttpClient +import java.net.InetSocketAddress +import java.time.Duration -@Suppress("DEPRECATION") -class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListener.Callback, - SharedPreferences.OnSharedPreferenceChangeListener { +const val LOCAL_KEY_PREFIX = "local:" + +@get:OptIn(UnstableApi::class) +val DataSpec.isLocal get() = key?.startsWith(LOCAL_KEY_PREFIX) == true + +val MediaItem.isLocal get() = mediaId.startsWith(LOCAL_KEY_PREFIX) +val Song.isLocal get() = id.startsWith(LOCAL_KEY_PREFIX) + +@kotlin.OptIn(ExperimentalCoroutinesApi::class) +@Suppress("LargeClass", "TooManyFunctions") // intended in this class: it is a service +@OptIn(UnstableApi::class) +class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListener.Callback { private lateinit var mediaSession: MediaSession private lateinit var cache: SimpleCache private lateinit var player: ExoPlayer - private val stateBuilder = PlaybackState.Builder() - .setActions( - PlaybackState.ACTION_PLAY - or PlaybackState.ACTION_PAUSE - or PlaybackState.ACTION_PLAY_PAUSE - or PlaybackState.ACTION_STOP - or PlaybackState.ACTION_SKIP_TO_PREVIOUS - or PlaybackState.ACTION_SKIP_TO_NEXT - or PlaybackState.ACTION_SKIP_TO_QUEUE_ITEM - or PlaybackState.ACTION_SEEK_TO - or PlaybackState.ACTION_REWIND + private val stateBuilder + get() = PlaybackState.Builder().setActions( + (PlaybackState.ACTION_PLAY or + PlaybackState.ACTION_PAUSE or + PlaybackState.ACTION_PLAY_PAUSE or + PlaybackState.ACTION_STOP or + PlaybackState.ACTION_SKIP_TO_PREVIOUS or + PlaybackState.ACTION_SKIP_TO_NEXT or + PlaybackState.ACTION_SKIP_TO_QUEUE_ITEM or + PlaybackState.ACTION_SEEK_TO or + PlaybackState.ACTION_REWIND or + PlaybackState.ACTION_PLAY_FROM_SEARCH).let { + if (isAtLeastAndroid12) it or PlaybackState.ACTION_SET_PLAYBACK_SPEED else it + } + ).addCustomAction( + /* action = */ "LIKE", + /* name = */ "Like", + /* icon = */ if (isLikedState.value) R.drawable.heart else R.drawable.heart_outline ) + private val playbackStateMutex = Mutex() + private val metadataBuilder = MediaMetadata.Builder() private var notificationManager: NotificationManager? = null - private var timerJob: TimerJob? = null - private var radio: YouTubeRadio? = null private lateinit var bitmapProvider: BitmapProvider - private val coroutineScope = CoroutineScope(Dispatchers.IO) + Job() + private val coroutineScope = CoroutineScope(Dispatchers.IO + Job()) + private var preferenceUpdaterJob: Job? = null private var volumeNormalizationJob: Job? = null - private var isPersistentQueueEnabled = false - private var isShowingThumbnailInLockscreen = true override var isInvincibilityEnabled = false private var audioManager: AudioManager? = null private var audioDeviceCallback: AudioDeviceCallback? = null private var loudnessEnhancer: LoudnessEnhancer? = null + private var bassBoost: BassBoost? = null private val binder = Binder() private var isNotificationStarted = false - override val notificationId: Int - get() = NotificationId + override val notificationId get() = NOTIFICATION_ID private lateinit var notificationActionReceiver: NotificationActionReceiver + private val mediaItemState = MutableStateFlow(null) + private val isLikedState = mediaItemState + .flatMapMerge { item -> + item?.mediaId?.let { Database.likedAt(it).distinctUntilChanged() } ?: flowOf(null) + } + .map { it != null } + .stateIn(coroutineScope, SharingStarted.Eagerly, false) + override fun onBind(intent: Intent?): AndroidBinder { super.onBind(intent) return binder } + @Suppress("CyclomaticComplexMethod") override fun onCreate() { super.onCreate() bitmapProvider = BitmapProvider( - bitmapSize = (256 * resources.displayMetrics.density).roundToInt(), - colorProvider = { isSystemInDarkMode -> + getBitmapSize = { + (512 * resources.displayMetrics.density) + .roundToInt() + .coerceAtMost(AppearancePreferences.maxThumbnailSize) + }, + getColor = { isSystemInDarkMode -> if (isSystemInDarkMode) Color.BLACK else Color.WHITE } ) createNotificationChannel() - preferences.registerOnSharedPreferenceChangeListener(this) - - val preferences = preferences - isPersistentQueueEnabled = preferences.getBoolean(persistentQueueKey, false) - isInvincibilityEnabled = preferences.getBoolean(isInvincibilityEnabledKey, false) - isShowingThumbnailInLockscreen = - preferences.getBoolean(isShowingThumbnailInLockscreenKey, false) - - val cacheEvictor = when (val size = - preferences.getEnum(exoPlayerDiskCacheMaxSizeKey, ExoPlayerDiskCacheMaxSize.`2GB`)) { - ExoPlayerDiskCacheMaxSize.Unlimited -> NoOpCacheEvictor() - else -> LeastRecentlyUsedCacheEvictor(size.bytes) - } - - // TODO: Remove in a future release - val directory = cacheDir.resolve("exoplayer").also { directory -> - if (directory.exists()) return@also - - directory.mkdir() - - cacheDir.listFiles()?.forEach { file -> - if (file.isDirectory && file.name.length == 1 && file.name.isDigitsOnly() || file.extension == "uid") { - if (!file.renameTo(directory.resolve(file.name))) { - file.deleteRecursively() - } - } - } - - filesDir.resolve("coil").deleteRecursively() - } - cache = SimpleCache(directory, cacheEvictor, StandaloneDatabaseProvider(this)) + cache = createCache(this) player = ExoPlayer.Builder(this, createRendersFactory(), createMediaSourceFactory()) .setHandleAudioBecomingNoisy(true) @@ -239,72 +255,163 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene .setUsePlatformDiagnostics(false) .build() - player.repeatMode = when { - preferences.getBoolean(trackLoopEnabledKey, false) -> Player.REPEAT_MODE_ONE - preferences.getBoolean(queueLoopEnabledKey, true) -> Player.REPEAT_MODE_ALL - else -> Player.REPEAT_MODE_OFF - } + updateRepeatMode() - player.skipSilenceEnabled = preferences.getBoolean(skipSilenceKey, false) + player.skipSilenceEnabled = PlayerPreferences.skipSilence player.addListener(this) player.addAnalyticsListener(PlaybackStatsListener(false, this)) maybeRestorePlayerQueue() mediaSession = MediaSession(baseContext, "PlayerService") - mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS or MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS) mediaSession.setCallback(SessionCallback(player)) mediaSession.setPlaybackState(stateBuilder.build()) + mediaSession.setSessionActivity(activityPendingIntent()) mediaSession.isActive = true - notificationActionReceiver = NotificationActionReceiver(player) + coroutineScope.launch { + var first = true + combine(mediaItemState, isLikedState) { mediaItem, _ -> + // work around NPE in other processes + if (first) { + first = false + return@combine + } + if (mediaItem == null) return@combine + withContext(Dispatchers.Main) { + updatePlaybackState() + // work around NPE in other processes + handler.post { + runCatching { + applicationContext.getSystemService() + ?.notify(NOTIFICATION_ID, notification()) + } + } + } + }.collect() + } + + notificationActionReceiver = NotificationActionReceiver() val filter = IntentFilter().apply { addAction(Action.play.value) addAction(Action.pause.value) addAction(Action.next.value) addAction(Action.previous.value) + addAction(Action.like.value) } - registerReceiver(notificationActionReceiver, filter) + ContextCompat.registerReceiver( + /* context = */ this, + /* receiver = */ notificationActionReceiver, + /* filter = */ filter, + /* flags = */ ContextCompat.RECEIVER_NOT_EXPORTED + ) maybeResumePlaybackWhenDeviceConnected() + + fun CoroutineScope.subscribe( + state: StateFlow, + runner: (() -> Unit) -> Unit = { handler.post(it) }, + callback: suspend (T) -> () -> Unit + ) = launch { + state.collectLatest { + runner(callback(it)) + } + } + + preferenceUpdaterJob = coroutineScope.launch { + subscribe(PlayerPreferences.resumePlaybackWhenDeviceConnectedProperty.stateFlow) { + ::maybeResumePlaybackWhenDeviceConnected + } + subscribe(AppearancePreferences.isShowingThumbnailInLockscreenProperty.stateFlow) { + ::maybeShowSongCoverInLockScreen + } + subscribe(PlayerPreferences.trackLoopEnabledProperty.stateFlow) { + ::updateRepeatMode + } + subscribe(PlayerPreferences.queueLoopEnabledProperty.stateFlow) { + ::updateRepeatMode + } + subscribe(PlayerPreferences.volumeNormalizationProperty.stateFlow) { + ::maybeNormalizeVolume + } + subscribe(PlayerPreferences.volumeNormalizationBaseGainProperty.stateFlow) { + ::maybeNormalizeVolume + } + subscribe(PlayerPreferences.bassBoostProperty.stateFlow) { + ::maybeBassBoost + } + subscribe(PlayerPreferences.bassBoostLevelProperty.stateFlow) { + ::maybeBassBoost + } + subscribe(PlayerPreferences.speedProperty.stateFlow) { + { + player.setPlaybackSpeed(it.coerceAtLeast(0.01f)) + } + } + subscribe(PlayerPreferences.isInvincibilityEnabledProperty.stateFlow) { + { + this@PlayerService.isInvincibilityEnabled = it + } + } + subscribe(PlayerPreferences.skipSilenceProperty.stateFlow) { + { + player.skipSilenceEnabled = it + } + } + } + } + + private fun updateRepeatMode() { + player.repeatMode = when { + PlayerPreferences.trackLoopEnabled -> Player.REPEAT_MODE_ONE + PlayerPreferences.queueLoopEnabled -> Player.REPEAT_MODE_ALL + else -> Player.REPEAT_MODE_OFF + } } override fun onTaskRemoved(rootIntent: Intent?) { - if (!player.shouldBePlaying) { - broadCastPendingIntent().send() - } + if (!player.shouldBePlaying || PlayerPreferences.stopWhenClosed) + broadcastPendingIntent().send() super.onTaskRemoved(rootIntent) } - override fun onDestroy() { + override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) = maybeSavePlayerQueue() - preferences.unregisterOnSharedPreferenceChangeListener(this) + override fun onDestroy() { + runCatching { + maybeSavePlayerQueue() - player.removeListener(this) - player.stop() - player.release() + player.removeListener(this) + player.stop() + player.release() - unregisterReceiver(notificationActionReceiver) + unregisterReceiver(notificationActionReceiver) - mediaSession.isActive = false - mediaSession.release() - cache.release() + mediaSession.isActive = false + mediaSession.release() + cache.release() - loudnessEnhancer?.release() + loudnessEnhancer?.release() + + preferenceUpdaterJob?.cancel() + + coroutineScope.cancel() + } super.onDestroy() } - override fun shouldBeInvincible(): Boolean { - return !player.shouldBePlaying - } + override fun shouldBeInvincible() = !player.shouldBePlaying override fun onConfigurationChanged(newConfig: Configuration) { - if (bitmapProvider.setDefaultBitmap() && player.currentMediaItem != null) { - notificationManager?.notify(NotificationId, notification()) + handler.post { + runCatching { + if (bitmapProvider.setDefaultBitmap() && player.currentMediaItem != null) + notificationManager?.notify(NOTIFICATION_ID, notification()) + } } super.onConfigurationChanged(newConfig) } @@ -318,48 +425,44 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene val totalPlayTimeMs = playbackStats.totalPlayTimeMs - if (totalPlayTimeMs > 5000) { - query { - Database.incrementTotalPlayTimeMs(mediaItem.mediaId, totalPlayTimeMs) - } + if (totalPlayTimeMs > 5000 && !DataPreferences.pausePlaytime) query { + Database.incrementTotalPlayTimeMs(mediaItem.mediaId, totalPlayTimeMs) } - if (totalPlayTimeMs > 30000) { - query { - try { - Database.insert( - Event( - songId = mediaItem.mediaId, - timestamp = System.currentTimeMillis(), - playTime = totalPlayTimeMs - ) + if (totalPlayTimeMs > 30000 && !DataPreferences.pauseHistory) query { + runCatching { + Database.insert( + Event( + songId = mediaItem.mediaId, + timestamp = System.currentTimeMillis(), + playTime = totalPlayTimeMs ) - } catch (_: SQLException) { - } + ) } } } override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { + mediaItemState.update { mediaItem } + maybeRecoverPlaybackError() maybeNormalizeVolume() maybeProcessRadio() - if (mediaItem == null) { - bitmapProvider.listener?.invoke(null) - } else if (mediaItem.mediaMetadata.artworkUri == bitmapProvider.lastUri) { - bitmapProvider.listener?.invoke(bitmapProvider.lastBitmap) + when { + mediaItem == null -> bitmapProvider.listener?.invoke(null) + mediaItem.mediaMetadata.artworkUri == bitmapProvider.lastUri -> + bitmapProvider.listener?.invoke(bitmapProvider.lastBitmap) } - if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO || reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK) { + if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO || reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK) updateMediaSessionQueue(player.currentTimeline) - } } override fun onTimelineChanged(timeline: Timeline, reason: Int) { - if (reason == Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED) { - updateMediaSessionQueue(timeline) - } + if (reason != Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED) return + updateMediaSessionQueue(timeline) + maybeSavePlayerQueue() } private fun updateMediaSessionQueue(timeline: Timeline) { @@ -370,9 +473,7 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene var startIndex = currentMediaItemIndex - 7 var endIndex = currentMediaItemIndex + 7 - if (startIndex < 0) { - endIndex -= startIndex - } + if (startIndex < 0) endIndex -= startIndex if (endIndex > lastIndex) { startIndex -= (endIndex - lastIndex) @@ -398,43 +499,39 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene } private fun maybeRecoverPlaybackError() { - if (player.playerError != null) { - player.prepare() - } + if (player.playerError != null) player.prepare() } - private fun maybeProcessRadio() { - radio?.let { radio -> - if (player.mediaItemCount - player.currentMediaItemIndex <= 3) { - coroutineScope.launch(Dispatchers.Main) { - player.addMediaItems(radio.process()) - } + private fun maybeProcessRadio() = radio?.let { radio -> + if (player.mediaItemCount - player.currentMediaItemIndex <= 3) + coroutineScope.launch(Dispatchers.Main) { + player.addMediaItems(radio.process()) } - } + Unit } private fun maybeSavePlayerQueue() { - if (!isPersistentQueueEnabled) return + if (!PlayerPreferences.persistentQueue) return val mediaItems = player.currentTimeline.mediaItems val mediaItemIndex = player.currentMediaItemIndex val mediaItemPosition = player.currentPosition - mediaItems.mapIndexed { index, mediaItem -> - QueuedMediaItem( - mediaItem = mediaItem, - position = if (index == mediaItemIndex) mediaItemPosition else null + query { + Database.clearQueue() + Database.insert( + mediaItems.mapIndexed { index, mediaItem -> + QueuedMediaItem( + mediaItem = mediaItem, + position = if (index == mediaItemIndex) mediaItemPosition else null + ) + } ) - }.let { queuedMediaItems -> - query { - Database.clearQueue() - Database.insert(queuedMediaItems) - } } } private fun maybeRestorePlayerQueue() { - if (!isPersistentQueueEnabled) return + if (!PlayerPreferences.persistentQueue) return query { val queuedSong = Database.queue() @@ -461,109 +558,147 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene isNotificationStarted = true startForegroundService(this@PlayerService, intent()) - startForeground(NotificationId, notification()) + startForeground(NOTIFICATION_ID, notification()) } } } + @Suppress("ReturnCount") private fun maybeNormalizeVolume() { - if (!preferences.getBoolean(volumeNormalizationKey, false)) { + if (!PlayerPreferences.volumeNormalization) { loudnessEnhancer?.enabled = false loudnessEnhancer?.release() loudnessEnhancer = null volumeNormalizationJob?.cancel() + volumeNormalizationJob?.invokeOnCompletion { volumeNormalizationJob = null } player.volume = 1f return } - if (loudnessEnhancer == null) { - loudnessEnhancer = LoudnessEnhancer(player.audioSessionId) - } + runCatching { + if (loudnessEnhancer == null) loudnessEnhancer = LoudnessEnhancer(player.audioSessionId) + }.onFailure { return } - player.currentMediaItem?.mediaId?.let { songId -> - volumeNormalizationJob?.cancel() - volumeNormalizationJob = coroutineScope.launch(Dispatchers.Main) { - Database.loudnessDb(songId).cancellable().collectLatest { loudnessDb -> - try { - loudnessEnhancer?.setTargetGain(-((loudnessDb ?: 0f) * 100).toInt() + 500) - loudnessEnhancer?.enabled = true - } catch (_: Exception) { } + val songId = player.currentMediaItem?.mediaId ?: return + volumeNormalizationJob?.cancel() + volumeNormalizationJob = coroutineScope.launch { + runCatching { + Database.loudnessDb(songId).cancellable().collectLatest { loudness -> + Database.loudnessBoost(songId).cancellable().collectLatest { boost -> + withContext(Dispatchers.Main) { + loudnessEnhancer?.setTargetGain( + PlayerPreferences.volumeNormalizationBaseGainRounded + + ((boost ?: 0f) * 100).toInt() - + ((loudness ?: 0f) * 100).toInt() + ) + loudnessEnhancer?.enabled = true + } + } } } } } - private fun maybeShowSongCoverInLockScreen() { - val bitmap = - if (isAtLeastAndroid13 || isShowingThumbnailInLockscreen) bitmapProvider.bitmap else null + private fun maybeBassBoost() { + if (!PlayerPreferences.bassBoost) { + runCatching { + bassBoost?.enabled = false + bassBoost?.release() + } + bassBoost = null + maybeNormalizeVolume() + return + } + + runCatching { + if (bassBoost == null) bassBoost = BassBoost(0, player.audioSessionId) + bassBoost?.setStrength(PlayerPreferences.bassBoostLevel.toShort()) + bassBoost?.enabled = true + }.onFailure { + Toast.makeText(this, R.string.error_bassboost_init, Toast.LENGTH_SHORT).show() + } + } + + private fun maybeShowSongCoverInLockScreen() = handler.post { + val bitmap = if (isAtLeastAndroid13 || AppearancePreferences.isShowingThumbnailInLockscreen) + bitmapProvider.bitmap else null metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART, bitmap) + metadataBuilder.putString( + MediaMetadata.METADATA_KEY_ART_URI, + player.mediaMetadata.artworkUri?.toString()?.thumbnail(512) + ) - if (isAtLeastAndroid13 && player.currentMediaItemIndex == 0) { - metadataBuilder.putText( - MediaMetadata.METADATA_KEY_TITLE, - "${player.mediaMetadata.title} " - ) - } + if (isAtLeastAndroid13 && player.currentMediaItemIndex == 0) metadataBuilder.putText( + MediaMetadata.METADATA_KEY_TITLE, + "${player.mediaMetadata.title} " + ) mediaSession.setMetadata(metadataBuilder.build()) } - @SuppressLint("NewApi") private fun maybeResumePlaybackWhenDeviceConnected() { if (!isAtLeastAndroid6) return - if (preferences.getBoolean(resumePlaybackWhenDeviceConnectedKey, false)) { - if (audioManager == null) { - audioManager = getSystemService(AUDIO_SERVICE) as AudioManager? - } + if (!PlayerPreferences.resumePlaybackWhenDeviceConnected) { + audioManager?.unregisterAudioDeviceCallback(audioDeviceCallback) + audioDeviceCallback = null + return + } + if (audioManager == null) audioManager = getSystemService() - audioDeviceCallback = object : AudioDeviceCallback() { - private fun canPlayMusic(audioDeviceInfo: AudioDeviceInfo): Boolean { - if (!audioDeviceInfo.isSink) return false - - return audioDeviceInfo.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP || - audioDeviceInfo.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || - audioDeviceInfo.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES || - audioDeviceInfo.type == AudioDeviceInfo.TYPE_USB_HEADSET - } + audioDeviceCallback = + @SuppressLint("NewApi") + object : AudioDeviceCallback() { + private fun canPlayMusic(audioDeviceInfo: AudioDeviceInfo) = + audioDeviceInfo.isSink && ( + audioDeviceInfo.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP || + audioDeviceInfo.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || + audioDeviceInfo.type == AudioDeviceInfo.TYPE_WIRED_HEADPHONES + ) + .let { + if (!isAtLeastAndroid8) it else + it || audioDeviceInfo.type == AudioDeviceInfo.TYPE_USB_HEADSET + } override fun onAudioDevicesAdded(addedDevices: Array) { - if (!player.isPlaying && addedDevices.any(::canPlayMusic)) { - player.play() - } + if (!player.isPlaying && addedDevices.any(::canPlayMusic)) player.play() } override fun onAudioDevicesRemoved(removedDevices: Array) = Unit } - audioManager?.registerAudioDeviceCallback(audioDeviceCallback, handler) + audioManager?.registerAudioDeviceCallback(audioDeviceCallback, handler) + } - } else { - audioManager?.unregisterAudioDeviceCallback(audioDeviceCallback) - audioDeviceCallback = null + private fun sendOpenEqualizerIntent() = sendBroadcast( + Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION).apply { + putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.audioSessionId) + putExtra(AudioEffect.EXTRA_PACKAGE_NAME, packageName) + putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) + } + ) + + private fun sendCloseEqualizerIntent() = sendBroadcast( + Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION).apply { + putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.audioSessionId) + } + ) + + private fun updatePlaybackState() = coroutineScope.launch { + playbackStateMutex.withLock { + withContext(Dispatchers.Main) { + mediaSession.setPlaybackState( + stateBuilder + .setState(player.androidPlaybackState, player.currentPosition, 1f) + .setBufferedPosition(player.bufferedPosition) + .build() + ) + } } } - private fun sendOpenEqualizerIntent() { - sendBroadcast( - Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION).apply { - putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.audioSessionId) - putExtra(AudioEffect.EXTRA_PACKAGE_NAME, packageName) - putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) - } - ) - } - - private fun sendCloseEqualizerIntent() { - sendBroadcast( - Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION).apply { - putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.audioSessionId) - } - ) - } - - private val Player.androidPlaybackState: Int + private val Player.androidPlaybackState get() = when (playbackState) { Player.STATE_BUFFERING -> if (playWhenReady) PlaybackState.STATE_BUFFERING else PlaybackState.STATE_PAUSED Player.STATE_READY -> if (playWhenReady) PlaybackState.STATE_PLAYING else PlaybackState.STATE_PAUSED @@ -572,23 +707,28 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene else -> PlaybackState.STATE_NONE } + // legacy behavior may cause inconsistencies, but not available on sdk 24 or lower + @Suppress("DEPRECATION") override fun onEvents(player: Player, events: Player.Events) { - if (player.duration != C.TIME_UNSET) { - mediaSession.setMetadata( - metadataBuilder - .putText(MediaMetadata.METADATA_KEY_TITLE, player.mediaMetadata.title) - .putText(MediaMetadata.METADATA_KEY_ARTIST, player.mediaMetadata.artist) - .putText(MediaMetadata.METADATA_KEY_ALBUM, player.mediaMetadata.albumTitle) - .putLong(MediaMetadata.METADATA_KEY_DURATION, player.duration) - .build() - ) - } + if (player.duration != C.TIME_UNSET) mediaSession.setMetadata( + metadataBuilder + .putText( + MediaMetadata.METADATA_KEY_TITLE, + player.mediaMetadata.title?.toString().orEmpty() + ) + .putText( + MediaMetadata.METADATA_KEY_ARTIST, + player.mediaMetadata.artist?.toString().orEmpty() + ) + .putText( + MediaMetadata.METADATA_KEY_ALBUM, + player.mediaMetadata.albumTitle?.toString().orEmpty() + ) + .putLong(MediaMetadata.METADATA_KEY_DURATION, player.duration) + .build() + ) - stateBuilder - .setState(player.androidPlaybackState, player.currentPosition, 1f) - .setBufferedPosition(player.bufferedPosition) - - mediaSession.setPlaybackState(stateBuilder.build()) + updatePlaybackState() if (events.containsAny( Player.EVENT_PLAYBACK_STATE_CHANGED, @@ -604,14 +744,14 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene makeInvincible(false) stopForeground(false) sendCloseEqualizerIntent() - notificationManager?.cancel(NotificationId) + notificationManager?.cancel(NOTIFICATION_ID) return } if (player.shouldBePlaying && !isNotificationStarted) { isNotificationStarted = true startForegroundService(this@PlayerService, intent()) - startForeground(NotificationId, notification) + startForeground(NOTIFICATION_ID, notification) makeInvincible(false) sendOpenEqualizerIntent() } else { @@ -621,34 +761,8 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene makeInvincible(true) sendCloseEqualizerIntent() } - notificationManager?.notify(NotificationId, notification) - } - } - } - - override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { - when (key) { - persistentQueueKey -> isPersistentQueueEnabled = - sharedPreferences.getBoolean(key, isPersistentQueueEnabled) - - volumeNormalizationKey -> maybeNormalizeVolume() - - resumePlaybackWhenDeviceConnectedKey -> maybeResumePlaybackWhenDeviceConnected() - - isInvincibilityEnabledKey -> isInvincibilityEnabled = - sharedPreferences.getBoolean(key, isInvincibilityEnabled) - - skipSilenceKey -> player.skipSilenceEnabled = sharedPreferences.getBoolean(key, false) - isShowingThumbnailInLockscreenKey -> { - isShowingThumbnailInLockscreen = sharedPreferences.getBoolean(key, true) - maybeShowSongCoverInLockScreen() - } - - trackLoopEnabledKey, queueLoopEnabledKey -> { - player.repeatMode = when { - preferences.getBoolean(trackLoopEnabledKey, false) -> Player.REPEAT_MODE_ONE - preferences.getBoolean(queueLoopEnabledKey, true) -> Player.REPEAT_MODE_ALL - else -> Player.REPEAT_MODE_OFF + runCatching { + notificationManager?.notify(NOTIFICATION_ID, notification) } } } @@ -661,11 +775,13 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene val pauseIntent = Action.pause.pendingIntent val nextIntent = Action.next.pendingIntent val prevIntent = Action.previous.pendingIntent + val likeIntent = Action.like.pendingIntent val mediaMetadata = player.mediaMetadata + @Suppress("DEPRECATION") // support for SDK < 26 val builder = if (isAtLeastAndroid8) { - Notification.Builder(applicationContext, NotificationChannelId) + Notification.Builder(applicationContext, NOTIFICATION_CHANNEL_ID) } else { Notification.Builder(applicationContext) } @@ -676,15 +792,18 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene .setAutoCancel(false) .setOnlyAlertOnce(true) .setShowWhen(false) - .setSmallIcon(player.playerError?.let { R.drawable.alert_circle } - ?: R.drawable.app_icon) + .setSmallIcon( + player.playerError?.let { R.drawable.alert_circle } ?: R.drawable.app_icon + ) .setOngoing(false) - .setContentIntent(activityPendingIntent( - flags = PendingIntent.FLAG_UPDATE_CURRENT - ) { - putExtra("expandPlayerBottomSheet", true) - }) - .setDeleteIntent(broadCastPendingIntent()) + .setContentIntent( + activityPendingIntent( + flags = PendingIntent.FLAG_UPDATE_CURRENT + ) { + putExtra("expandPlayerBottomSheet", true) + } + ) + .setDeleteIntent(broadcastPendingIntent()) .setVisibility(Notification.VISIBILITY_PUBLIC) .setCategory(NotificationCompat.CATEGORY_TRANSPORT) .setStyle( @@ -692,17 +811,29 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene .setShowActionsInCompactView(0, 1, 2) .setMediaSession(mediaSession.sessionToken) ) - .addAction(R.drawable.play_skip_back, "Skip back", prevIntent) + .addAction(R.drawable.play_skip_back, getString(R.string.skip_back), prevIntent) .addAction( if (player.shouldBePlaying) R.drawable.pause else R.drawable.play, - if (player.shouldBePlaying) "Pause" else "Play", + if (player.shouldBePlaying) getString(R.string.pause) else getString(R.string.play), if (player.shouldBePlaying) pauseIntent else playIntent ) - .addAction(R.drawable.play_skip_forward, "Skip forward", nextIntent) + .addAction(R.drawable.play_skip_forward, getString(R.string.skip_forward), nextIntent) + .addAction( + if (isLikedState.value) R.drawable.heart else R.drawable.heart_outline, + getString(R.string.like), + likeIntent + ) bitmapProvider.load(mediaMetadata.artworkUri) { bitmap -> maybeShowSongCoverInLockScreen() - notificationManager?.notify(NotificationId, builder.setLargeIcon(bitmap).build()) + handler.post { + runCatching { + notificationManager?.notify( + NOTIFICATION_ID, + builder.setLargeIcon(bitmap).build() + ) + } + } } return builder.build() @@ -714,165 +845,67 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene if (!isAtLeastAndroid8) return notificationManager?.run { - if (getNotificationChannel(NotificationChannelId) == null) { - createNotificationChannel( - NotificationChannel( - NotificationChannelId, - "Now playing", - NotificationManager.IMPORTANCE_LOW - ).apply { - setSound(null, null) - enableLights(false) - enableVibration(false) - } - ) - } - - if (getNotificationChannel(SleepTimerNotificationChannelId) == null) { - createNotificationChannel( - NotificationChannel( - SleepTimerNotificationChannelId, - "Sleep timer", - NotificationManager.IMPORTANCE_LOW - ).apply { - setSound(null, null) - enableLights(false) - enableVibration(false) - } - ) - } - } - } - - private fun okHttpClient() : OkHttpClient{ - ProxyPreferences.preference?.let{ - return OkHttpClient.Builder() - .proxy(Proxy(it.proxyMode,InetSocketAddress(it.proxyHost,it.proxyPort))) - .connectTimeout(Duration.ofSeconds(16)) - .readTimeout(Duration.ofSeconds(8)) - .build() - } - return OkHttpClient.Builder() - .connectTimeout(Duration.ofSeconds(16)) - .readTimeout(Duration.ofSeconds(8)) - .build() - } - - private fun createCacheDataSource(): DataSource.Factory { - return CacheDataSource.Factory().setCache(cache).apply { - setUpstreamDataSourceFactory( - OkHttpDataSource.Factory(okHttpClient()) - .setUserAgent("Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0") - ) - } - } - - private fun createDataSourceFactory(): DataSource.Factory { - val chunkLength = 512 * 1024L - val ringBuffer = RingBuffer?>(2) { null } - - return ResolvingDataSource.Factory(createCacheDataSource()) { dataSpec -> - val videoId = dataSpec.key ?: error("A key must be set") - - if (cache.isCached(videoId, dataSpec.position, chunkLength)) { - dataSpec - } else { - when (videoId) { - ringBuffer.getOrNull(0)?.first -> dataSpec.withUri(ringBuffer.getOrNull(0)!!.second) - ringBuffer.getOrNull(1)?.first -> dataSpec.withUri(ringBuffer.getOrNull(1)!!.second) - else -> { - val urlResult = runBlocking(Dispatchers.IO) { - Innertube.player(PlayerBody(videoId = videoId)) - }?.mapCatching { body -> - if (body.videoDetails?.videoId != videoId) { - throw VideoIdMismatchException() - } - - when (val status = body.playabilityStatus?.status) { - "OK" -> body.streamingData?.highestQualityFormat?.let { format -> - val mediaItem = runBlocking(Dispatchers.Main) { - player.findNextMediaItemById(videoId) - } - - if (mediaItem?.mediaMetadata?.extras?.getString("durationText") == null) { - format.approxDurationMs?.div(1000) - ?.let(DateUtils::formatElapsedTime)?.removePrefix("0") - ?.let { durationText -> - mediaItem?.mediaMetadata?.extras?.putString( - "durationText", - durationText - ) - Database.updateDurationText(videoId, durationText) - } - } - - query { - mediaItem?.let(Database::insert) - - Database.insert( - it.hamy.muza.models.Format( - songId = videoId, - itag = format.itag, - mimeType = format.mimeType, - bitrate = format.bitrate, - loudnessDb = body.playerConfig?.audioConfig?.normalizedLoudnessDb, - contentLength = format.contentLength, - lastModified = format.lastModified - ) - ) - } - - format.url - } ?: throw PlayableFormatNotFoundException() - - "UNPLAYABLE" -> throw UnplayableException() - "LOGIN_REQUIRED" -> throw LoginRequiredException() - else -> throw PlaybackException( - status, - null, - PlaybackException.ERROR_CODE_REMOTE_ERROR - ) - } - } - - urlResult?.getOrThrow()?.let { url -> - ringBuffer.append(videoId to url.toUri()) - dataSpec.withUri(url.toUri()) - .subrange(dataSpec.uriPositionOffset, chunkLength) - } ?: throw PlaybackException( - null, - urlResult?.exceptionOrNull(), - PlaybackException.ERROR_CODE_REMOTE_ERROR - ) - } + if (getNotificationChannel(NOTIFICATION_CHANNEL_ID) == null) createNotificationChannel( + NotificationChannel( + NOTIFICATION_CHANNEL_ID, + getString(R.string.now_playing), + NotificationManager.IMPORTANCE_LOW + ).apply { + setSound(null, null) + enableLights(false) + enableVibration(false) } - } + ) + + if (getNotificationChannel(SLEEP_TIMER_NOTIFICATION_CHANNEL_ID) == null) + createNotificationChannel( + NotificationChannel( + SLEEP_TIMER_NOTIFICATION_CHANNEL_ID, + getString(R.string.sleep_timer), + NotificationManager.IMPORTANCE_LOW + ).apply { + setSound(null, null) + enableLights(false) + enableVibration(false) + } + ) } } - private fun createMediaSourceFactory(): MediaSource.Factory { - return DefaultMediaSourceFactory(createDataSourceFactory(), createExtractorsFactory()) - } - - private fun createExtractorsFactory(): ExtractorsFactory { - return ExtractorsFactory { - arrayOf(MatroskaExtractor(), FragmentedMp4Extractor()) - } - } + private fun createMediaSourceFactory() = DefaultMediaSourceFactory( + /* dataSourceFactory = */ createYouTubeDataSourceResolverFactory( + findMediaItem = { videoId -> + runBlocking(Dispatchers.Main) { + player.findNextMediaItemById(videoId) + } + }, + context = applicationContext, + cache = cache + ), + /* extractorsFactory = */ DefaultExtractorsFactory() + ) private fun createRendersFactory(): RenderersFactory { - val audioSink = DefaultAudioSink.Builder() + val minimumSilenceDuration = PlayerPreferences.minimumSilence.coerceIn(1000L..2_000_000L) + val audioSink = DefaultAudioSink.Builder(applicationContext) .setEnableFloatOutput(false) .setEnableAudioTrackPlaybackParams(false) - .setOffloadMode(DefaultAudioSink.OFFLOAD_MODE_DISABLED) + .setAudioOffloadSupportProvider(DefaultAudioOffloadSupportProvider(applicationContext)) .setAudioProcessorChain( DefaultAudioProcessorChain( - emptyArray(), - SilenceSkippingAudioProcessor(2_000_000, 20_000, 256), + arrayOf(), + SilenceSkippingAudioProcessor( + /* minimumSilenceDurationUs = */ minimumSilenceDuration, + /* paddingSilenceUs = */ minimumSilenceDuration / 100L, + /* silenceThresholdLevel = */ 256 + ), SonicAudioProcessor() ) ) .build() + .apply { + if (isAtLeastAndroid10) setOffloadMode(AudioSink.OFFLOAD_MODE_DISABLED) + } return RenderersFactory { handler: Handler?, _, audioListener: AudioRendererEventListener?, _, _ -> arrayOf( @@ -905,6 +938,12 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene var isLoadingRadio by mutableStateOf(false) private set + var invincible + get() = isInvincibilityEnabled + set(value) { + isInvincibilityEnabled = value + } + fun setBitmapListener(listener: ((Bitmap?) -> Unit)?) { bitmapProvider.listener = listener } @@ -914,8 +953,8 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene timerJob = coroutineScope.timer(delayMillis) { val notification = NotificationCompat - .Builder(this@PlayerService, SleepTimerNotificationChannelId) - .setContentTitle("Sleep timer ended") + .Builder(this@PlayerService, SLEEP_TIMER_NOTIFICATION_CHANNEL_ID) + .setContentTitle(getString(R.string.sleep_timer_ended)) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(true) .setOnlyAlertOnce(true) @@ -923,7 +962,7 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene .setSmallIcon(R.drawable.app_icon) .build() - notificationManager?.notify(SleepTimerNotificationId, notification) + notificationManager?.notify(SLEEP_TIMER_NOTIFICATION_ID, notification) stopSelf() exitProcess(0) @@ -949,15 +988,14 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene endpoint?.playlistId, endpoint?.playlistSetVideoId, endpoint?.params - ).let { + ).let { radioData -> isLoadingRadio = true radioJob = coroutineScope.launch(Dispatchers.Main) { - if (justAdd) { - player.addMediaItems(it.process().drop(1)) - } else { - player.forcePlayFromBeginning(it.process()) - } - radio = it + val items = radioData.process().let { Database.filterBlacklistedSongs(it) } + if (justAdd) player.addMediaItems(items.drop(1)) + else player.forcePlayFromBeginning(items) + + radio = radioData isLoadingRadio = false } } @@ -968,9 +1006,42 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene radioJob?.cancel() radio = null } + + /** + * This method should ONLY be called when the application (sc. activity) is in the foreground! + */ + fun restartForegroundOrStop() { + player.pause() + isInvincibilityEnabled = false + stopSelf() + } + + fun isCached(song: SongWithContentLength) = + song.contentLength?.let { cache.isCached(song.song.id, 0L, it) } ?: false + + fun playFromSearch(query: String) { + coroutineScope.launch { + Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.Song.value + ), + fromMusicShelfRendererContent = Innertube.SongItem.Companion::from + )?.getOrNull()?.items?.firstOrNull()?.info?.endpoint?.let { playRadio(it) } + } + } } - private class SessionCallback(private val player: Player) : MediaSession.Callback() { + private fun likeAction() = mediaItemState.value?.let { mediaItem -> + transaction { + Database.like( + mediaItem.mediaId, + if (isLikedState.value) null else System.currentTimeMillis() + ) + } + }.let { } + + private inner class SessionCallback(private val player: Player) : MediaSession.Callback() { override fun onPlay() = player.play() override fun onPause() = player.pause() override fun onSkipToPrevious() = runCatching(player::forceSeekToPrevious).let { } @@ -978,16 +1049,32 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene override fun onSeekTo(pos: Long) = player.seekTo(pos) override fun onStop() = player.pause() override fun onRewind() = player.seekToDefaultPosition() - override fun onSkipToQueueItem(id: Long) = runCatching { player.seekToDefaultPosition(id.toInt()) }.let { } + override fun onSkipToQueueItem(id: Long) = + runCatching { player.seekToDefaultPosition(id.toInt()) }.let { } + + override fun onSetPlaybackSpeed(speed: Float) { + PlayerPreferences.speed = speed.coerceIn(0.01f..2f) + } + + override fun onPlayFromSearch(query: String?, extras: Bundle?) { + if (query.isNullOrBlank()) return + binder.playFromSearch(query) + } + + override fun onCustomAction(action: String, extras: Bundle?) { + super.onCustomAction(action, extras) + if (action == "LIKE") likeAction() + } } - private class NotificationActionReceiver(private val player: Player) : BroadcastReceiver() { + inner class NotificationActionReceiver internal constructor() : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { Action.pause.value -> player.pause() Action.play.value -> player.play() Action.next.value -> player.forceSeekToNext() Action.previous.value -> player.forceSeekToPrevious() + Action.like.value -> likeAction() } } } @@ -1014,14 +1101,169 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene val play = Action("it.hamy.muza.play") val next = Action("it.hamy.muza.next") val previous = Action("it.hamy.muza.previous") + val like = Action("it.hamy.muza.like") } } - private companion object { - const val NotificationId = 1001 - const val NotificationChannelId = "default_channel_id" + companion object { + fun createDatabaseProvider(context: Context) = StandaloneDatabaseProvider(context) + fun createCache(context: Context) = with(context) { + val cacheEvictor = when (val size = DataPreferences.exoPlayerDiskCacheMaxSize) { + ExoPlayerDiskCacheSize.Unlimited -> NoOpCacheEvictor() + else -> LeastRecentlyUsedCacheEvictor(size.bytes) + } - const val SleepTimerNotificationId = 1002 - const val SleepTimerNotificationChannelId = "sleep_timer_channel_id" + val directory = cacheDir.resolve("exoplayer").also { directory -> + if (directory.exists()) return@also + + directory.mkdir() + + cacheDir.listFiles()?.forEach { + @Suppress("ComplexCondition") + if ( + (it.isDirectory && it.name.length == 1 && it.name.isDigitsOnly() || it.extension == "uid") && + !it.renameTo(directory.resolve(it.name)) + ) it.deleteRecursively() + } + + filesDir.resolve("coil").deleteRecursively() + } + + SimpleCache(directory, cacheEvictor, createDatabaseProvider(context)) + } + + private const val DEFAULT_CHUNK_LENGTH = 512 * 1024L + + // TODO: maybe fix this mess? + /** + * Creates a ResolvingDataSource.Factory for YouTube video's + * Call site MUST either: + * 1. Verify that the consumer of the factory always saves the MediaItem to the database + * before trying to resolve the MediaItem + * 2. Provide a usable MediaItem for the YouTube video with the videoId + * 3. Make sure the database has a MediaItem for the given videoId and return null when it + * does + */ + + + + private fun okHttpClient() : OkHttpClient { + ProxyPreferences.preference?.let{ + return OkHttpClient.Builder() + .proxy(Proxy(it.proxyMode, InetSocketAddress(it.proxyHost,it.proxyPort))) + .connectTimeout(Duration.ofSeconds(16)) + .readTimeout(Duration.ofSeconds(8)) + .build() + } + return OkHttpClient.Builder() + .connectTimeout(Duration.ofSeconds(16)) + .readTimeout(Duration.ofSeconds(8)) + .build() + } + + @Suppress("CyclomaticComplexMethod") + fun createYouTubeDataSourceResolverFactory( + findMediaItem: (videoId: String) -> MediaItem?, + context: Context, + cache: Cache, + chunkLength: Long? = DEFAULT_CHUNK_LENGTH + ): ResolvingDataSource.Factory { + val ringBuffer = RingBuffer?>(2) { null } + + return ResolvingDataSource.Factory( + ConditionalCacheDataSourceFactory( + cacheDataSourceFactory = CacheDataSource.Factory().setCache(cache), + upstreamDataSourceFactory = DefaultDataSource.Factory( + context, + DefaultHttpDataSource.Factory() + .setConnectTimeoutMs(16000) + .setReadTimeoutMs(8000) + .setUserAgent("Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0") + ) + ) { !it.isLocal } + ) { dataSpec -> + // Thank you Android, for enforcing a Uri in the download request + val videoId = dataSpec.key?.removePrefix("https://youtube.com/watch?v=") + ?: error("A key must be set") + + when { + dataSpec.isLocal || cache.isCached( + videoId, + dataSpec.position, + chunkLength ?: DEFAULT_CHUNK_LENGTH + ) -> dataSpec + + videoId == ringBuffer[0]?.first -> + dataSpec.withUri(ringBuffer[0]!!.second) + + videoId == ringBuffer[1]?.first -> + dataSpec.withUri(ringBuffer[1]!!.second) + + else -> { + val body = runBlocking(Dispatchers.IO) { + Innertube.player(PlayerBody(videoId = videoId)) + }?.getOrThrow() + + if (body?.videoDetails?.videoId != videoId) throw VideoIdMismatchException() + + val format = body.streamingData?.highestQualityFormat + val url = when (val status = body.playabilityStatus?.status) { + "OK" -> format?.let { _ -> + val mediaItem = findMediaItem(videoId) + + if (mediaItem?.mediaMetadata?.extras?.getString("durationText") == null) + format.approxDurationMs?.div(1000) + ?.let(DateUtils::formatElapsedTime)?.removePrefix("0") + ?.let { durationText -> + mediaItem?.mediaMetadata?.extras?.putString( + "durationText", + durationText + ) + Database.updateDurationText(videoId, durationText) + } + + query { + mediaItem?.let(Database::insert) + + Database.insert( + it.hamy.muza.models.Format( + songId = videoId, + itag = format.itag, + mimeType = format.mimeType, + bitrate = format.bitrate, + loudnessDb = body.playerConfig?.audioConfig?.normalizedLoudnessDb, + contentLength = format.contentLength, + lastModified = format.lastModified + ) + ) + } + + format.url + } ?: throw PlayableFormatNotFoundException() + + "UNPLAYABLE" -> throw UnplayableException() + "LOGIN_REQUIRED" -> throw LoginRequiredException() + + else -> throw PlaybackException( + status, + null, + PlaybackException.ERROR_CODE_REMOTE_ERROR + ) + } + + ringBuffer += videoId to url.toUri() + dataSpec.buildUpon() + .setKey(videoId) + .setUri(url.toUri()) + .build() + .let { spec -> + (chunkLength ?: format.contentLength)?.let { + spec.subrange(dataSpec.uriPositionOffset, it) + } ?: spec + } + } + } + } + } } } diff --git a/app/src/main/kotlin/it/hamy/muza/service/PrecacheService.kt b/app/src/main/kotlin/it/hamy/muza/service/PrecacheService.kt new file mode 100644 index 0000000..e20e522 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/service/PrecacheService.kt @@ -0,0 +1,268 @@ +package it.hamy.muza.service + +import android.content.ComponentName +import android.content.Context +import android.content.ServiceConnection +import android.net.Uri +import android.os.IBinder +import android.widget.Toast +import androidx.annotation.OptIn +import androidx.media3.common.MediaItem +import androidx.media3.common.util.UnstableApi +import androidx.media3.datasource.cache.Cache +import androidx.media3.datasource.cache.CacheSpan +import androidx.media3.datasource.cache.ContentMetadataMutations +import androidx.media3.exoplayer.offline.Download +import androidx.media3.exoplayer.offline.DownloadManager +import androidx.media3.exoplayer.offline.DownloadNotificationHelper +import androidx.media3.exoplayer.offline.DownloadRequest +import androidx.media3.exoplayer.offline.DownloadService +import androidx.media3.exoplayer.scheduler.Requirements +import androidx.media3.exoplayer.workmanager.WorkManagerScheduler +import it.hamy.muza.Database +import it.hamy.muza.R +import it.hamy.muza.transaction +import it.hamy.muza.utils.intent +import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.Job +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.asCoroutineDispatcher +import kotlinx.coroutines.async +import kotlinx.coroutines.channels.BufferOverflow +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import java.io.File +import java.util.concurrent.Executors +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine +import kotlin.time.Duration.Companion.milliseconds + +private val executor = Executors.newCachedThreadPool() +private val coroutineScope = CoroutineScope( + executor.asCoroutineDispatcher() + + SupervisorJob() + + CoroutineName("PrecacheService-Worker-Scope") +) + +// While the class is not a singleton (lifecycle), there should only be one download state at a time +private val mutableDownloadState = MutableStateFlow(false) +val downloadState = mutableDownloadState.asStateFlow() + +@OptIn(UnstableApi::class) +class PrecacheService : DownloadService( + /* foregroundNotificationId = */ DOWNLOAD_NOTIFICATION_ID, + /* foregroundNotificationUpdateInterval = */ 1000L, // default + /* channelId = */ DOWNLOAD_NOTIFICATION_CHANNEL_ID, + /* channelNameResourceId = */ R.string.pre_cache, + /* channelDescriptionResourceId = */ 0 +) { + private val downloadQueue = + Channel(onBufferOverflow = BufferOverflow.DROP_OLDEST) + + private val downloadNotificationHelper by lazy { + DownloadNotificationHelper( + this, + DOWNLOAD_NOTIFICATION_CHANNEL_ID + ) + } + + private val waiters = mutableListOf<() -> Unit>() + + private val serviceConnection = object : ServiceConnection { + override fun onServiceConnected(name: ComponentName?, service: IBinder?) { + if (service !is PlayerService.Binder) return + bound = true + binder = service + waiters.forEach { it() } + waiters.clear() + } + + override fun onServiceDisconnected(name: ComponentName?) { + bound = false + binder = null + waiters.forEach { it() } + waiters.clear() + } + } + + @get:Synchronized + @set:Synchronized + private var bound = false + private var binder: PlayerService.Binder? = null + + private var progressUpdaterJob: Job? = null + + @kotlin.OptIn(FlowPreview::class) + override fun getDownloadManager(): DownloadManager { + runCatching { + if (bound) unbindService(serviceConnection) + bindService(intent(), serviceConnection, Context.BIND_AUTO_CREATE) + } + + val cache = BlockingDeferredCache { + suspendCoroutine { + waiters += { it.resume(Unit) } + } + binder?.cache ?: error("PlayerService failed to start, crashing...") + } + + progressUpdaterJob?.cancel() + progressUpdaterJob = coroutineScope.launch { + downloadQueue.receiveAsFlow().debounce(100.milliseconds).collect { downloadManager -> + mutableDownloadState.update { !downloadManager.isIdle } + } + } + + return DownloadManager( + this, + PlayerService.createDatabaseProvider(this), + cache, + PlayerService.createYouTubeDataSourceResolverFactory( + findMediaItem = { null }, + context = this, + cache = cache, + chunkLength = null + ), + executor + ).apply { + maxParallelDownloads = 3 + minRetryCount = 1 + requirements = Requirements(Requirements.NETWORK) + addListener(object : DownloadManager.Listener { + override fun onIdle(downloadManager: DownloadManager) = + mutableDownloadState.update { false } + + override fun onDownloadChanged( + downloadManager: DownloadManager, + download: Download, + finalException: Exception? + ) { + downloadQueue.trySend(downloadManager) + } + + override fun onDownloadRemoved( + downloadManager: DownloadManager, + download: Download + ) { + downloadQueue.trySend(downloadManager) + } + }) + } + } + + override fun getScheduler() = WorkManagerScheduler(this, "precacher-work") + + override fun getForegroundNotification( + downloads: MutableList, + notMetRequirements: Int + ) = downloadNotificationHelper.buildProgressNotification( + /* context = */ this, + /* smallIcon = */ R.drawable.download, + /* contentIntent = */ null, + /* message = */ null, + /* downloads = */ downloads, + /* notMetRequirements = */ notMetRequirements + ) + + override fun onDestroy() { + super.onDestroy() + + runCatching { + if (bound) unbindService(serviceConnection) + } + } + + companion object { + fun scheduleCache(context: Context, mediaItem: MediaItem) { + if (mediaItem.isLocal) return + + val downloadRequest = DownloadRequest + .Builder( + /* id = */ mediaItem.mediaId, + /* uri = */ mediaItem.requestMetadata.mediaUri + ?: Uri.parse("https://youtube.com/watch?v=${mediaItem.mediaId}") + ) + .setCustomCacheKey(mediaItem.mediaId) + .setData(mediaItem.mediaId.encodeToByteArray()) + .build() + + transaction { + Database.insert(mediaItem) + coroutineScope.launch { + runCatching { + sendAddDownload( + /* context = */ context, + /* clazz = */ PrecacheService::class.java, + /* downloadRequest = */ downloadRequest, + /* foreground = */ true + ) + }.recoverCatching { + sendAddDownload( + /* context = */ context, + /* clazz = */ PrecacheService::class.java, + /* downloadRequest = */ downloadRequest, + /* foreground = */ false + ) + }.exceptionOrNull()?.printStackTrace()?.also { + Toast.makeText(context, R.string.error_pre_cache, Toast.LENGTH_SHORT).show() + } + } + } + } + } +} + +@Suppress("TooManyFunctions") +@OptIn(UnstableApi::class) +class BlockingDeferredCache(private val cache: Deferred) : Cache { + constructor(init: suspend () -> Cache) : this(coroutineScope.async { init() }) + + private val resolvedCache by lazy { runBlocking { cache.await() } } + + override fun getUid() = resolvedCache.uid + override fun release() = resolvedCache.release() + override fun addListener(key: String, listener: Cache.Listener) = + resolvedCache.addListener(key, listener) + + override fun removeListener(key: String, listener: Cache.Listener) = + resolvedCache.removeListener(key, listener) + + override fun getCachedSpans(key: String) = resolvedCache.getCachedSpans(key) + override fun getKeys(): MutableSet = resolvedCache.keys + override fun getCacheSpace() = resolvedCache.cacheSpace + override fun startReadWrite(key: String, position: Long, length: Long) = + resolvedCache.startReadWrite(key, position, length) + + override fun startReadWriteNonBlocking(key: String, position: Long, length: Long) = + resolvedCache.startReadWriteNonBlocking(key, position, length) + + override fun startFile(key: String, position: Long, length: Long) = + resolvedCache.startFile(key, position, length) + + override fun commitFile(file: File, length: Long) = resolvedCache.commitFile(file, length) + override fun releaseHoleSpan(holeSpan: CacheSpan) = resolvedCache.releaseHoleSpan(holeSpan) + override fun removeResource(key: String) = resolvedCache.removeResource(key) + override fun removeSpan(span: CacheSpan) = resolvedCache.removeSpan(span) + override fun isCached(key: String, position: Long, length: Long) = + resolvedCache.isCached(key, position, length) + + override fun getCachedLength(key: String, position: Long, length: Long) = + resolvedCache.getCachedLength(key, position, length) + + override fun getCachedBytes(key: String, position: Long, length: Long) = + resolvedCache.getCachedBytes(key, position, length) + + override fun applyContentMetadataMutations(key: String, mutations: ContentMetadataMutations) = + resolvedCache.applyContentMetadataMutations(key, mutations) + + override fun getContentMetadata(key: String) = resolvedCache.getContentMetadata(key) +} diff --git a/app/src/main/kotlin/it/hamy/muza/service/ServiceNotifications.kt b/app/src/main/kotlin/it/hamy/muza/service/ServiceNotifications.kt new file mode 100644 index 0000000..bbb52c5 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/service/ServiceNotifications.kt @@ -0,0 +1,10 @@ +package it.hamy.muza.service + +const val NOTIFICATION_ID = 1001 +const val NOTIFICATION_CHANNEL_ID = "default_channel_id" + +const val SLEEP_TIMER_NOTIFICATION_ID = 1002 +const val SLEEP_TIMER_NOTIFICATION_CHANNEL_ID = "sleep_timer_channel_id" + +const val DOWNLOAD_NOTIFICATION_ID = 1003 +const val DOWNLOAD_NOTIFICATION_CHANNEL_ID = "download_channel_id" diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/BottomSheet.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/BottomSheet.kt index 8c7278c..8effd3b 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/BottomSheet.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/BottomSheet.kt @@ -7,9 +7,12 @@ import androidx.compose.animation.core.AnimationVector1D import androidx.compose.animation.core.SpringSpec import androidx.compose.animation.core.VectorConverter import androidx.compose.animation.core.tween +import androidx.compose.foundation.Indication +import androidx.compose.foundation.LocalIndication import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.DraggableState import androidx.compose.foundation.gestures.detectVerticalDragGestures +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.fillMaxSize @@ -20,7 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable @@ -43,58 +46,61 @@ import kotlinx.coroutines.launch @Composable fun BottomSheet( state: BottomSheetState, + collapsedContent: @Composable BoxScope.() -> Unit, modifier: Modifier = Modifier, onDismiss: (() -> Unit)? = null, - collapsedContent: @Composable BoxScope.() -> Unit, + indication: Indication? = LocalIndication.current, content: @Composable BoxScope.() -> Unit -) { - Box( - modifier = modifier - .offset { - val y = (state.expandedBound - state.value) +) = Box( + modifier = modifier + .offset { + IntOffset( + x = 0, + y = (state.expandedBound - state.value) .roundToPx() .coerceAtLeast(0) - IntOffset(x = 0, y = y) - } - .pointerInput(state) { - val velocityTracker = VelocityTracker() - - detectVerticalDragGestures( - onVerticalDrag = { change, dragAmount -> - velocityTracker.addPointerInputChange(change) - state.dispatchRawDelta(dragAmount) - }, - onDragCancel = { - velocityTracker.resetTracking() - state.snapTo(state.collapsedBound) - }, - onDragEnd = { - val velocity = -velocityTracker.calculateVelocity().y - velocityTracker.resetTracking() - state.performFling(velocity, onDismiss) - } - ) - } - .fillMaxSize() - ) { - if (!state.isCollapsed) { - BackHandler(onBack = state::collapseSoft) - content() - } - - if (!state.isExpanded && (onDismiss == null || !state.isDismissed)) { - Box( - modifier = Modifier - .graphicsLayer { - alpha = 1f - (state.progress * 16).coerceAtMost(1f) - } - .clickable(onClick = state::expandSoft) - .fillMaxWidth() - .height(state.collapsedBound), - content = collapsedContent ) } + .pointerInput(state) { + val velocityTracker = VelocityTracker() + + detectVerticalDragGestures( + onVerticalDrag = { change, dragAmount -> + velocityTracker.addPointerInputChange(change) + state.dispatchRawDelta(dragAmount) + }, + onDragCancel = { + velocityTracker.resetTracking() + state.snapTo(state.collapsedBound) + }, + onDragEnd = { + val velocity = -velocityTracker.calculateVelocity().y + velocityTracker.resetTracking() + state.performFling(velocity, onDismiss) + } + ) + } + .fillMaxSize() +) { + if (!state.isCollapsed) { + BackHandler(onBack = state::collapseSoft) + content() } + + if (!state.isExpanded && (onDismiss == null || !state.isDismissed)) Box( + modifier = Modifier + .graphicsLayer { + alpha = 1f - (state.progress * 16).coerceAtMost(1f) + } + .clickable( + onClick = state::expandSoft, + indication = indication, + interactionSource = remember { MutableInteractionSource() } + ) + .fillMaxWidth() + .height(state.collapsedBound), + content = collapsedContent + ) } @Stable @@ -103,64 +109,44 @@ class BottomSheetState( private val coroutineScope: CoroutineScope, private val animatable: Animatable, private val onAnchorChanged: (Int) -> Unit, - val collapsedBound: Dp, + val collapsedBound: Dp ) : DraggableState by draggableState { - val dismissedBound: Dp - get() = animatable.lowerBound!! - - val expandedBound: Dp - get() = animatable.upperBound!! + private val dismissedBound get() = animatable.lowerBound!! + val expandedBound get() = animatable.upperBound!! val value by animatable.asState() - val isDismissed by derivedStateOf { - value == animatable.lowerBound!! - } - - val isCollapsed by derivedStateOf { - value == collapsedBound - } - - val isExpanded by derivedStateOf { - value == animatable.upperBound - } - + val isDismissed by derivedStateOf { value == animatable.lowerBound!! } + val isCollapsed by derivedStateOf { value == collapsedBound } + val isExpanded by derivedStateOf { value == animatable.upperBound } val progress by derivedStateOf { 1f - (animatable.upperBound!! - animatable.value) / (animatable.upperBound!! - collapsedBound) } fun collapse(animationSpec: AnimationSpec) { - onAnchorChanged(collapsedAnchor) + onAnchorChanged(COLLAPSED_ANCHOR) coroutineScope.launch { animatable.animateTo(collapsedBound, animationSpec) } } fun expand(animationSpec: AnimationSpec) { - onAnchorChanged(expandedAnchor) + onAnchorChanged(EXPANDED_ANCHOR) coroutineScope.launch { animatable.animateTo(animatable.upperBound!!, animationSpec) } } - private fun collapse() { - collapse(SpringSpec()) - } + private fun collapse() = collapse(SpringSpec()) - private fun expand() { - expand(SpringSpec()) - } + private fun expand() = expand(SpringSpec()) - fun collapseSoft() { - collapse(tween(300)) - } + fun collapseSoft() = collapse(tween(300)) - fun expandSoft() { - expand(tween(300)) - } + fun expandSoft() = expand(tween(300)) fun dismiss() { - onAnchorChanged(dismissedAnchor) + onAnchorChanged(DISMISSED_ANCHOR) coroutineScope.launch { animatable.animateTo(animatable.lowerBound!!) } @@ -172,17 +158,18 @@ class BottomSheetState( } } - fun performFling(velocity: Float, onDismiss: (() -> Unit)?) { - if (velocity > 250) { - expand() - } else if (velocity < -250) { + fun performFling(velocity: Float, onDismiss: (() -> Unit)?) = when { + velocity > 250 -> expand() + velocity < -250 -> { if (value < collapsedBound && onDismiss != null) { dismiss() onDismiss.invoke() } else { collapse() } - } else { + } + + else -> { val l0 = dismissedBound val l1 = (collapsedBound - dismissedBound) / 2 val l2 = (expandedBound - collapsedBound) / 2 @@ -193,10 +180,9 @@ class BottomSheetState( if (onDismiss != null) { dismiss() onDismiss.invoke() - } else { - collapse() - } + } else collapse() } + in l1..l2 -> collapse() in l2..l3 -> expand() else -> Unit @@ -205,20 +191,16 @@ class BottomSheetState( } val preUpPostDownNestedScrollConnection - get() = object : NestedScrollConnection { + get() = object : NestedScrollConnection { var isTopReached = false override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset { - if (isExpanded && available.y < 0) { - isTopReached = false - } + if (isExpanded && available.y < 0) isTopReached = false return if (isTopReached && available.y < 0 && source == NestedScrollSource.Drag) { dispatchRawDelta(available.y) available - } else { - Offset.Zero - } + } else Offset.Zero } override fun onPostScroll( @@ -226,28 +208,20 @@ class BottomSheetState( available: Offset, source: NestedScrollSource ): Offset { - if (!isTopReached) { - isTopReached = consumed.y == 0f && available.y > 0 - } + if (!isTopReached) isTopReached = consumed.y == 0f && available.y > 0 return if (isTopReached && source == NestedScrollSource.Drag) { dispatchRawDelta(available.y) available - } else { - Offset.Zero - } + } else Offset.Zero } - override suspend fun onPreFling(available: Velocity): Velocity { - return if (isTopReached) { - val velocity = -available.y - performFling(velocity, null) + override suspend fun onPreFling(available: Velocity) = if (isTopReached) { + val velocity = -available.y + performFling(velocity, null) - available - } else { - Velocity.Zero - } - } + available + } else Velocity.Zero override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity { isTopReached = false @@ -256,29 +230,27 @@ class BottomSheetState( } } -const val expandedAnchor = 2 -const val collapsedAnchor = 1 -const val dismissedAnchor = 0 +const val EXPANDED_ANCHOR = 2 +const val COLLAPSED_ANCHOR = 1 +const val DISMISSED_ANCHOR = 0 @Composable fun rememberBottomSheetState( dismissedBound: Dp, expandedBound: Dp, collapsedBound: Dp = dismissedBound, - initialAnchor: Int = dismissedAnchor + initialAnchor: Int = DISMISSED_ANCHOR ): BottomSheetState { val density = LocalDensity.current val coroutineScope = rememberCoroutineScope() - var previousAnchor by rememberSaveable { - mutableStateOf(initialAnchor) - } + var previousAnchor by rememberSaveable { mutableIntStateOf(initialAnchor) } return remember(dismissedBound, expandedBound, collapsedBound, coroutineScope) { val initialValue = when (previousAnchor) { - expandedAnchor -> expandedBound - collapsedAnchor -> collapsedBound - dismissedAnchor -> dismissedBound + EXPANDED_ANCHOR -> expandedBound + COLLAPSED_ANCHOR -> collapsedBound + DISMISSED_ANCHOR -> dismissedBound else -> error("Unknown BottomSheet anchor") } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/Menu.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/Menu.kt index 0ea1cdd..1a5ea35 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/Menu.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/Menu.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue @@ -19,6 +20,7 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.unit.dp val LocalMenuState = staticCompositionLocalOf { MenuState() } @@ -68,7 +70,7 @@ fun BottomSheetMenu( visible = state.isDisplayed, enter = slideInVertically { it }, exit = slideOutVertically { it }, - modifier = modifier + modifier = modifier.padding(top = 48.dp) ) { state.content() } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/MusicBars.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/MusicBars.kt index d56237f..d4fb3a1 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/MusicBars.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/MusicBars.kt @@ -2,148 +2,80 @@ package it.hamy.muza.ui.components import androidx.compose.animation.core.Animatable import androidx.compose.foundation.Canvas -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.util.fastForEachIndexed +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +// @formatter:off +@Suppress("MaximumLineLength") +private val steps = persistentListOf( + arrayOf(0.8f, 0.1f, 0.9f, 0.9f, 0.7f, 0.9f, 0.8f, 0.1f, 0.3f, 0.8f, 0.6f, 0.0f, 0.3f, 0.4f, 0.9f, 0.7f, 0.9f, 0.6f, 0.9f, 0.1f, 0.3f, 0.0f, 0.5f, 0.4f, 0.7f, 0.9f), + arrayOf(0.8f, 0.5f, 0.0f, 0.5f, 0.7f, 0.9f, 0.8f, 0.7f, 0.5f, 0.9f, 0.4f, 0.5f, 0.7f, 0.3f, 0.1f, 0.0f, 0.7f, 0.9f, 0.5f, 0.7f, 0.4f, 0.0f, 0.4f, 0.3f, 0.6f, 0.9f), + arrayOf(0.4f, 0.5f, 0.0f, 0.4f, 0.5f, 0.0f, 0.4f, 0.5f, 0.0f, 0.5f, 0.4f, 0.3f, 0.8f, 0.7f, 0.9f, 0.5f, 0.6f, 0.4f, 0.3f, 0.9f, 0.6f, 0.7f, 0.9f, 0.6f, 0.7f, 0.3f) +) +// @formatter:on + @Composable fun MusicBars( color: Color, modifier: Modifier = Modifier, barWidth: Dp = 4.dp, - cornerRadius: Dp = 16.dp + cornerRadius: Dp = 16.dp, + space: Dp = 4.dp ) { - val animatablesWithSteps = remember { - listOf( - Animatable(0f) to listOf( - 0.2f, - 0.8f, - 0.1f, - 0.1f, - 0.3f, - 0.1f, - 0.2f, - 0.8f, - 0.7f, - 0.2f, - 0.4f, - 0.9f, - 0.7f, - 0.6f, - 0.1f, - 0.3f, - 0.1f, - 0.4f, - 0.1f, - 0.8f, - 0.7f, - 0.9f, - 0.5f, - 0.6f, - 0.3f, - 0.1f - ), - Animatable(0f) to listOf( - 0.2f, - 0.5f, - 1.0f, - 0.5f, - 0.3f, - 0.1f, - 0.2f, - 0.3f, - 0.5f, - 0.1f, - 0.6f, - 0.5f, - 0.3f, - 0.7f, - 0.8f, - 0.9f, - 0.3f, - 0.1f, - 0.5f, - 0.3f, - 0.6f, - 1.0f, - 0.6f, - 0.7f, - 0.4f, - 0.1f - ), - Animatable(0f) to listOf( - 0.6f, - 0.5f, - 1.0f, - 0.6f, - 0.5f, - 1.0f, - 0.6f, - 0.5f, - 1.0f, - 0.5f, - 0.6f, - 0.7f, - 0.2f, - 0.3f, - 0.1f, - 0.5f, - 0.4f, - 0.6f, - 0.7f, - 0.1f, - 0.4f, - 0.3f, - 0.1f, - 0.4f, - 0.3f, - 0.7f - ) - ) - } + val animatables = remember { List(steps.size) { Animatable(0f) } } LaunchedEffect(Unit) { - animatablesWithSteps.forEach { (animatable, steps) -> + animatables.fastForEachIndexed { i, animatable -> launch { - while (true) { - steps.forEach { step -> - animatable.animateTo(step) - } + var step = 0 + val steps = steps[i] + while (isActive) { + animatable.animateTo(steps[step]) + step = (step + 1) % steps.size } } } } - Row( - horizontalArrangement = Arrangement.spacedBy(4.dp), - verticalAlignment = Alignment.Bottom, + Canvas( modifier = modifier + .fillMaxHeight() + .width(barWidth * animatables.size + space * animatables.lastIndex) ) { - animatablesWithSteps.forEach { (animatable) -> - Canvas( - modifier = Modifier - .fillMaxHeight() - .width(barWidth) - ) { - drawRoundRect( - color = color, - topLeft = Offset(x = 0f, y = size.height * (1 - animatable.value)), - size = size.copy(height = animatable.value * size.height), - cornerRadius = CornerRadius(cornerRadius.toPx()) - ) - } + val radius = CornerRadius(cornerRadius.toPx()) + val barWidthPx = barWidth.toPx() + val barHeightPx = size.height + val stride = barWidthPx + space.toPx() + + animatables.fastForEachIndexed { i, animatable -> + val value = animatable.value + + drawRoundRect( + color = color, + topLeft = Offset( + x = i * stride, + y = barHeightPx * value + ), + size = Size( + width = barWidthPx, + height = barHeightPx * (1 - value) + ), + cornerRadius = radius + ) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/SeekBar.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/SeekBar.kt index b207fd9..6c475d3 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/SeekBar.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/SeekBar.kt @@ -1,51 +1,184 @@ package it.hamy.muza.ui.components +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.MutableTransitionState import androidx.compose.animation.core.animateDp +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween import androidx.compose.animation.core.updateTransition +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.geometry.CornerRadius +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.input.pointer.PointerInputScope import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.media3.common.C +import it.hamy.muza.models.ui.UiMedia +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.service.PlayerService +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.formatAsDuration +import it.hamy.muza.utils.isCompositionLaunched +import it.hamy.muza.utils.semiBold +import kotlinx.coroutines.launch +import kotlin.math.PI import kotlin.math.roundToLong +import kotlin.math.sin @Composable fun SeekBar( - value: Long, - minimumValue: Long, - maximumValue: Long, - onDragStart: (Long) -> Unit, - onDrag: (Long) -> Unit, - onDragEnd: () -> Unit, + binder: PlayerService.Binder, + position: Long, + media: UiMedia, + modifier: Modifier = Modifier, + color: Color = LocalAppearance.current.colorPalette.text, + backgroundColor: Color = LocalAppearance.current.colorPalette.background2, + shape: Shape = RoundedCornerShape(8.dp), + isActive: Boolean = binder.player.isPlaying, + alwaysShowDuration: Boolean = false, + scrubberRadius: Dp = 6.dp, + style: PlayerPreferences.SeekBarStyle = PlayerPreferences.seekBarStyle +) { + val range = 0L..media.duration + val floatRange = 0f..media.duration.toFloat() + + when (style) { + PlayerPreferences.SeekBarStyle.Static -> { + var scrubbingPosition by remember(media) { mutableStateOf(null) } + + ClassicSeekBarBody( + position = scrubbingPosition ?: position, + duration = media.duration, + range = range, + onSeekStart = { scrubbingPosition = it }, + onSeek = { delta -> + scrubbingPosition = if (media.duration == C.TIME_UNSET) null + else scrubbingPosition?.let { (it + delta).coerceIn(range) } + }, + onSeekEnd = { + scrubbingPosition?.let(binder.player::seekTo) + scrubbingPosition = null + }, + color = color, + backgroundColor = backgroundColor, + showDuration = alwaysShowDuration || scrubbingPosition != null, + modifier = modifier, + scrubberRadius = scrubberRadius, + shape = shape + ) + } + + PlayerPreferences.SeekBarStyle.Wavy -> { + val scope = rememberCoroutineScope() + val compositionLaunched = isCompositionLaunched() + + val animatedPosition = remember { Animatable(position.toFloat()) } + var isSeeking by remember { mutableStateOf(false) } + + LaunchedEffect(media) { + if (compositionLaunched) animatedPosition.animateTo(0f) + } + + LaunchedEffect(position) { + if (!isSeeking && !animatedPosition.isRunning) animatedPosition.animateTo(position.toFloat()) + } + + WavySeekBarBody( + position = animatedPosition.value.roundToLong(), + duration = media.duration, + range = range, + onSeekStart = { + isSeeking = true + scope.launch { animatedPosition.animateTo(it.toFloat()) } + }, + onSeek = { delta -> + if (media.duration == C.TIME_UNSET) return@WavySeekBarBody + + isSeeking = true + scope.launch { + animatedPosition.snapTo( + (animatedPosition.value + delta) + .coerceIn(floatRange) + ) + } + }, + onSeekEnd = { + isSeeking = false + binder.player.seekTo(animatedPosition.targetValue.roundToLong()) + }, + color = color, + backgroundColor = backgroundColor, + modifier = modifier, + scrubberRadius = scrubberRadius, + shape = shape, + showDuration = alwaysShowDuration || isSeeking, + isActive = isActive + ) + } + } +} + +@Composable +private fun ClassicSeekBarBody( + position: Long, + duration: Long, + range: ClosedRange, + onSeekStart: (Long) -> Unit, + onSeek: (Long) -> Unit, + onSeekEnd: () -> Unit, color: Color, backgroundColor: Color, + scrubberRadius: Dp, + shape: Shape, + showDuration: Boolean, modifier: Modifier = Modifier, barHeight: Dp = 3.dp, scrubberColor: Color = color, - scrubberRadius: Dp = 6.dp, - shape: Shape = RectangleShape, - drawSteps: Boolean = false, -) { - val isDragging = remember { - MutableTransitionState(false) - } - + drawSteps: Boolean = false +) = Column { + val isDragging = remember { MutableTransitionState(false) } val transition = updateTransition(transitionState = isDragging, label = null) val currentBarHeight by transition.animateDp(label = "") { if (it) scrubberRadius else barHeight } @@ -53,56 +186,52 @@ fun SeekBar( Box( modifier = modifier - .pointerInput(minimumValue, maximumValue) { - if (maximumValue < minimumValue) return@pointerInput + .pointerInput(range) { + if (range.endInclusive < range.start) return@pointerInput var acc = 0f detectHorizontalDragGestures( - onDragStart = { - isDragging.targetState = true - }, + onDragStart = { isDragging.targetState = true }, onHorizontalDrag = { _, delta -> - acc += delta / size.width * (maximumValue - minimumValue) + acc += delta / size.width * (range.endInclusive - range.start).toFloat() if (acc !in -1f..1f) { - onDrag(acc.toLong()) + onSeek(acc.toLong()) acc -= acc.toLong() } }, onDragEnd = { isDragging.targetState = false acc = 0f - onDragEnd() + onSeekEnd() }, onDragCancel = { isDragging.targetState = false acc = 0f - onDragEnd() + onSeekEnd() } ) } - .pointerInput(minimumValue, maximumValue) { - if (maximumValue < minimumValue) return@pointerInput + .pointerInput(range.start, range.endInclusive) { + if (range.endInclusive < range.start) return@pointerInput detectTapGestures( onPress = { offset -> - onDragStart((offset.x / size.width * (maximumValue - minimumValue) + minimumValue).roundToLong()) + onSeekStart( + (offset.x / size.width * (range.endInclusive - range.start) + range.start).roundToLong() + ) }, - onTap = { - onDragEnd() - } + onTap = { onSeekEnd() } ) } .padding(horizontal = scrubberRadius) .drawWithContent { drawContent() - val scrubberPosition = if (maximumValue < minimumValue) { - 0f - } else { - (value.toFloat() - minimumValue) / (maximumValue - minimumValue) * size.width - } + val scrubberPosition = + if (range.endInclusive < range.start) 0f + else (position.toFloat() - range.start) / (range.endInclusive - range.start) * size.width drawCircle( color = scrubberColor, @@ -110,16 +239,15 @@ fun SeekBar( center = center.copy(x = scrubberPosition) ) - if (drawSteps) { - for (i in value + 1..maximumValue) { - val stepPosition = - (i.toFloat() - minimumValue) / (maximumValue - minimumValue) * size.width - drawCircle( - color = scrubberColor, - radius = scrubberRadius.toPx() / 2, - center = center.copy(x = stepPosition), - ) - } + if (drawSteps) for (i in position + 1..range.endInclusive) { + val stepPosition = + (i.toFloat() - range.start) / (range.endInclusive - range.start) * size.width + + drawCircle( + color = scrubberColor, + radius = scrubberRadius.toPx() / 2, + center = center.copy(x = stepPosition) + ) } } .height(scrubberRadius) @@ -135,9 +263,271 @@ fun SeekBar( Spacer( modifier = Modifier .height(currentBarHeight) - .fillMaxWidth((value.toFloat() - minimumValue) / (maximumValue - minimumValue)) + .fillMaxWidth((position.toFloat() - range.start) / (range.endInclusive - range.start).toFloat()) .background(color = color, shape = shape) .align(Alignment.CenterStart) ) } + + Duration( + position = position, + duration = duration, + show = showDuration + ) +} + +@Composable +private fun WavySeekBarBody( + position: Long, + duration: Long, + range: ClosedRange, + color: Color, + backgroundColor: Color, + shape: Shape, + onSeek: (Long) -> Unit, + onSeekStart: (Long) -> Unit, + onSeekEnd: () -> Unit, + showDuration: Boolean, + modifier: Modifier = Modifier, + isActive: Boolean = true, + scrubberRadius: Dp = 6.dp +) = Column { + val isDragging = remember { MutableTransitionState(false) } + + val transition = updateTransition(transitionState = isDragging, label = null) + + val currentAmplitude by transition.animateDp(label = "") { if (it || !isActive) 0.dp else 2.dp } + val currentScrubberHeight by transition.animateDp(label = "") { if (it) 20.dp else 15.dp } + + Box( + modifier = modifier + .pointerInput(range) { + if (range.endInclusive < range.start) return@pointerInput + + detectDrags( + isDragging = isDragging, + range = range, + onSeek = onSeek, + onSeekEnd = onSeekEnd + ) + } + .pointerInput(range) { + detectTaps( + range = range, + onSeekStart = onSeekStart, + onSeekEnd = onSeekEnd + ) + } + .padding(horizontal = scrubberRadius) + .drawWithContent { + drawContent() + + drawScrubber( + range = range, + position = position, + color = color, + height = currentScrubberHeight + ) + } + ) { + WavySeekBarContent( + backgroundColor = backgroundColor, + amplitude = { currentAmplitude }, + position = position, + range = range, + shape = shape, + color = color + ) + } + + Duration( + position = position, + duration = duration, + show = showDuration + ) +} + +private suspend fun PointerInputScope.detectDrags( + isDragging: MutableTransitionState, + range: ClosedRange, + onSeek: (delta: Long) -> Unit, + onSeekEnd: () -> Unit +) { + var acc = 0f + + detectHorizontalDragGestures( + onDragStart = { isDragging.targetState = true }, + onHorizontalDrag = { _, delta -> + acc += delta / size.width * (range.endInclusive - range.start).toFloat() + + if (acc !in -1f..1f) { + onSeek(acc.toLong()) + acc -= acc + } + }, + onDragEnd = { + isDragging.targetState = false + acc = 0f + onSeekEnd() + }, + onDragCancel = { + isDragging.targetState = false + acc = 0f + + onSeekEnd() + } + ) +} + +private suspend fun PointerInputScope.detectTaps( + range: ClosedRange, + onSeekStart: (updated: Long) -> Unit, + onSeekEnd: () -> Unit +) { + if (range.endInclusive < range.start) return + + detectTapGestures( + onPress = { offset -> + onSeekStart( + (offset.x / size.width * (range.endInclusive - range.start).toFloat() + range.start).toLong() + ) + }, + onTap = { onSeekEnd() } + ) +} + +private fun ContentDrawScope.drawScrubber( + range: ClosedRange, + position: Long, + color: Color, + height: Dp +) { + val scrubberPosition = if (range.endInclusive < range.start) 0f + else (position - range.start) / (range.endInclusive - range.start).toFloat() * size.width + + val widthPx = 5.dp.toPx() + val heightPx = height.toPx() + + drawRoundRect( + color = color, + topLeft = Offset( + x = scrubberPosition - widthPx / 2, + y = (size.height - heightPx) / 2f + ), + size = Size( + width = widthPx, + height = heightPx + ), + cornerRadius = CornerRadius(widthPx / 2) + ) +} + +@Composable +private fun WavySeekBarContent( + backgroundColor: Color, + amplitude: () -> Dp, + position: Long, + range: ClosedRange, + shape: Shape, + color: Color +) { + val fraction = (position - range.start) / (range.endInclusive - range.start).toFloat() + val progress by rememberInfiniteTransition(label = "").animateFloat( + initialValue = 0f, + targetValue = 1f, + animationSpec = infiniteRepeatable(tween(2000, easing = LinearEasing)), + label = "" + ) + + Box( + modifier = Modifier + .fillMaxWidth() + .height(6.dp) + ) { + Spacer( + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth(1f - fraction) + .background(color = backgroundColor, shape = shape) + .align(Alignment.CenterEnd) + ) + + Canvas( + modifier = Modifier + .fillMaxWidth(fraction) + .height(amplitude()) + .align(Alignment.CenterStart) + ) { + drawPath( + path = wavePath( + size = size, + progress = progress + ), + color = color, + style = Stroke( + width = 3.dp.toPx(), + cap = StrokeCap.Round + ) + ) + } + } +} + +@Composable +private fun Duration( + position: Long, + duration: Long, + show: Boolean +) { + val typography = LocalAppearance.current.typography + + AnimatedVisibility( + visible = show, + enter = fadeIn() + expandVertically { -it }, + exit = fadeOut() + shrinkVertically { -it } + ) { + Column { + Spacer(Modifier.height(8.dp)) + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + BasicText( + text = formatAsDuration(position), + style = typography.xxs.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + + if (duration != C.TIME_UNSET) BasicText( + text = formatAsDuration(duration), + style = typography.xxs.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + } + } +} + +private fun Density.wavePath( + size: Size, + progress: Float, + quality: Float = PlayerPreferences.wavySeekBarQuality.quality +) = Path().apply { + val (width, height) = size + val progressTau = progress * 2 * PI.toFloat() + val scale = 7.dp.toPx() + + fun f(x: Float) = (sin(x / scale + progressTau) + 0.5f) * height + + moveTo(0f, f(0f)) + + var x = 0f + while (x < width) { + lineTo(x, f(x)) + x += quality + } + lineTo(width, f(width)) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/ShimmerHost.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/ShimmerHost.kt index 4220e8c..4014342 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/ShimmerHost.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/ShimmerHost.kt @@ -19,20 +19,18 @@ fun ShimmerHost( horizontalAlignment: Alignment.Horizontal = Alignment.Start, verticalArrangement: Arrangement.Vertical = Arrangement.Top, content: @Composable ColumnScope.() -> Unit -) { - Column( - horizontalAlignment = horizontalAlignment, - verticalArrangement = verticalArrangement, - modifier = modifier - .shimmer() - .graphicsLayer(alpha = 0.99f) - .drawWithContent { - drawContent() - drawRect( - brush = Brush.verticalGradient(listOf(Color.Black, Color.Transparent)), - blendMode = BlendMode.DstIn - ) - }, - content = content - ) -} +) = Column( + horizontalAlignment = horizontalAlignment, + verticalArrangement = verticalArrangement, + modifier = modifier + .shimmer() + .graphicsLayer(alpha = 0.99f) + .drawWithContent { + drawContent() + drawRect( + brush = Brush.verticalGradient(listOf(Color.Black, Color.Transparent)), + blendMode = BlendMode.DstIn + ) + }, + content = content +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanner.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanner.kt deleted file mode 100644 index 69ef846..0000000 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanner.kt +++ /dev/null @@ -1,87 +0,0 @@ -package it.hamy.muza.ui.components - -import android.os.CountDownTimer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.viewinterop.AndroidView -import com.yandex.mobile.ads.banner.BannerAdEventListener -import com.yandex.mobile.ads.banner.BannerAdSize -import com.yandex.mobile.ads.banner.BannerAdView -import com.yandex.mobile.ads.common.AdRequest -import com.yandex.mobile.ads.common.AdRequestError -import com.yandex.mobile.ads.common.AdTheme -import com.yandex.mobile.ads.common.ImpressionData - -@Composable -fun YandexAdsBanner(id: String) { - AndroidView(modifier = Modifier.fillMaxSize(), factory = { context -> - BannerAdView(context).apply { - /** - * ID блока рекламы - */ - setAdUnitId(id) - /** - * Размер блока рекламы - */ - setAdSize(BannerAdSize.inlineSize(context, 110, 110)) - /** - * Билдер запроса - */ - val adRequest = AdRequest.Builder() - .setPreferredTheme(AdTheme.DARK) - .build() - - - val timer = object : CountDownTimer(4000, 1000) { - override fun onTick(millisUntilFinished: Long) { - // Здесь можно выполнить действия, которые нужно сделать каждую секунду - } - - override fun onFinish() { - // Здесь вызывается метод loadAd(adRequest) после истечения таймера - loadAd(adRequest) - // Здесь можно повторить таймер, чтобы он всегда повторялся - //start() - } - } - - /** - * Слушатель экшнов - */ - setBannerAdEventListener(object : BannerAdEventListener { - override fun onAdLoaded() { - // Запускаем таймер - timer.start() - } - - override fun onAdFailedToLoad(p0: AdRequestError) { - /** - * Тут дебажим ошибки - */ - } - - override fun onAdClicked() { - - } - - override fun onLeftApplication() { - - } - - override fun onReturnedToApplication() { - loadAd(adRequest) - } - - override fun onImpression(p0: ImpressionData?) { - - } - - }) - /** - * Запуск баннера - */ - loadAd(adRequest) - } - }) -} \ No newline at end of file diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBannerQuickPicksCenter.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBannerQuickPicksCenter.kt deleted file mode 100644 index 3f98f7d..0000000 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBannerQuickPicksCenter.kt +++ /dev/null @@ -1,90 +0,0 @@ -package it.hamy.muza.ui.components - -import android.os.CountDownTimer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.viewinterop.AndroidView -import com.yandex.mobile.ads.banner.BannerAdEventListener -import com.yandex.mobile.ads.banner.BannerAdSize -import com.yandex.mobile.ads.banner.BannerAdView -import com.yandex.mobile.ads.common.AdRequest -import com.yandex.mobile.ads.common.AdRequestError -import com.yandex.mobile.ads.common.AdTheme -import com.yandex.mobile.ads.common.ImpressionData - -@Composable -fun YandexAdsBannerQuickPicksCenter(id: String) { - AndroidView(modifier = Modifier.fillMaxSize(), factory = { context -> - BannerAdView(context).apply { - /** - * ID блока рекламы - */ - setAdUnitId(id) - /** - * Размер блока рекламы - */ - setAdSize(BannerAdSize.inlineSize(context, 260, 60)) - /** - * Билдер запроса - */ - val adRequest = AdRequest.Builder() - .setPreferredTheme(AdTheme.DARK) - .build() - - - val timer = object : CountDownTimer(4000, 1000) { - override fun onTick(millisUntilFinished: Long) { - // Здесь можно выполнить действия, которые нужно сделать каждую секунду - } - - override fun onFinish() { - // Здесь вызывается метод loadAd(adRequest) после истечения таймера - loadAd(adRequest) - // Здесь можно повторить таймер, чтобы он всегда повторялся - //start() - } - } - - - /** - * Слушатель экшнов - */ - setBannerAdEventListener(object : BannerAdEventListener { - override fun onAdLoaded() { - // Запускаем таймер - timer.start() - } - - override fun onAdFailedToLoad(p0: AdRequestError) { - /** - * Тут дебажим ошибки - */ - loadAd(adRequest) - } - - override fun onAdClicked() { - - } - - override fun onLeftApplication() { - - } - - override fun onReturnedToApplication() { - loadAd(adRequest) - } - - override fun onImpression(p0: ImpressionData?) { - - } - - }) - - /** - * Запуск баннера - */ - loadAd(adRequest) - } - }) -} \ No newline at end of file diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanners.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanners.kt new file mode 100644 index 0000000..2515323 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/YandexAdsBanners.kt @@ -0,0 +1,185 @@ +package it.hamy.muza.ui.components + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.AndroidView +import com.yandex.mobile.ads.banner.BannerAdEventListener +import com.yandex.mobile.ads.banner.BannerAdSize +import com.yandex.mobile.ads.banner.BannerAdView +import com.yandex.mobile.ads.common.AdRequest +import com.yandex.mobile.ads.common.AdRequestError +import com.yandex.mobile.ads.common.AdTheme +import com.yandex.mobile.ads.common.ImpressionData + +@Composable +fun PlaylistAd(id: String) { + AndroidView(modifier = Modifier.fillMaxSize(), factory = { context -> + BannerAdView(context).apply { + /** + * ID блока рекламы + */ + setAdUnitId(id) + /** + * Размер блока рекламы + */ + setAdSize(BannerAdSize.inlineSize(context, 120, 120)) + /** + * Билдер запроса + */ + val adRequest = AdRequest.Builder() + .setPreferredTheme(AdTheme.DARK) + .build() + /** + * Слушатель экшнов + */ + setBannerAdEventListener(object : BannerAdEventListener { + override fun onAdLoaded() { + + } + + override fun onAdFailedToLoad(p0: AdRequestError) { + /** + * Тут дебажим ошибки + */ + } + + override fun onAdClicked() { + + } + + override fun onLeftApplication() { + + } + + override fun onReturnedToApplication() { + + } + + override fun onImpression(p0: ImpressionData?) { + + } + + }) + /** + * Запуск баннера + */ + loadAd(adRequest) + } + }) +} + +@Composable +fun QuickpicksAd(id: String) { + AndroidView(modifier = Modifier.fillMaxSize(), factory = { context -> + BannerAdView(context).apply { + /** + * ID блока рекламы + */ + setAdUnitId(id) + /** + * Размер блока рекламы + */ + setAdSize(BannerAdSize.inlineSize(context, 260, 60)) + /** + * Билдер запроса + */ + val adRequest = AdRequest.Builder() + .setPreferredTheme(AdTheme.DARK) + .build() + /** + * Слушатель экшнов + */ + setBannerAdEventListener(object : BannerAdEventListener { + override fun onAdLoaded() { + + } + + override fun onAdFailedToLoad(p0: AdRequestError) { + /** + * Тут дебажим ошибки + */ + } + + override fun onAdClicked() { + + } + + override fun onLeftApplication() { + + } + + override fun onReturnedToApplication() { + + } + + override fun onImpression(p0: ImpressionData?) { + + } + + }) + /** + * Запуск баннера + */ + loadAd(adRequest) + } + }) +} + +@Composable +fun NavigationAd(id: String) { + AndroidView(modifier = Modifier.fillMaxSize(), factory = { context -> + BannerAdView(context).apply { + /** + * ID блока рекламы + */ + setAdUnitId(id) + /** + * Размер блока рекламы + */ + setAdSize(BannerAdSize.inlineSize(context, 260, 60)) + /** + * Билдер запроса + */ + val adRequest = AdRequest.Builder() + .setPreferredTheme(AdTheme.DARK) + .build() + /** + * Слушатель экшнов + */ + setBannerAdEventListener(object : BannerAdEventListener { + override fun onAdLoaded() { + + } + + override fun onAdFailedToLoad(p0: AdRequestError) { + /** + * Тут дебажим ошибки + */ + } + + override fun onAdClicked() { + + } + + override fun onLeftApplication() { + + } + + override fun onReturnedToApplication() { + + } + + override fun onImpression(p0: ImpressionData?) { + + } + + }) + /** + * Запуск баннера + */ + loadAd(adRequest) + } + }) +} + diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Attribution.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Attribution.kt new file mode 100644 index 0000000..8e199ce --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Attribution.kt @@ -0,0 +1,76 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.align +import it.hamy.muza.utils.color +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold + +@Composable +fun Attribution( + text: String, + modifier: Modifier = Modifier +) = Column { + val (colorPalette, typography) = LocalAppearance.current + val windowInsets = LocalPlayerAwareWindowInsets.current + + val endPaddingValues = windowInsets + .only(WindowInsetsSides.End) + .asPaddingValues() + + val attributionsIndex = text.lastIndexOf("\n\n${stringResource(R.string.from_wikipedia)}") + + Row( + modifier = modifier.padding(endPaddingValues) + ) { + BasicText( + text = stringResource(R.string.quote_open), + style = typography.xxl.semiBold, + modifier = Modifier + .offset(y = (-8).dp) + .align(Alignment.Top) + ) + + BasicText( + text = if (attributionsIndex == -1) text else text.substring(0, attributionsIndex), + style = typography.xxs.secondary, + modifier = Modifier + .padding(horizontal = 8.dp) + .weight(1f) + ) + + BasicText( + text = stringResource(R.string.quote_close), + style = typography.xxl.semiBold, + modifier = Modifier + .offset(y = 4.dp) + .align(Alignment.Bottom) + ) + } + + if (attributionsIndex != -1) BasicText( + text = stringResource(R.string.wikipedia_cc_by_sa), + style = typography.xxs.color(colorPalette.textDisabled) + .align(TextAlign.End), + modifier = Modifier + .padding(horizontal = 16.dp) + .padding(bottom = 16.dp) + .padding(endPaddingValues) + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/BigIconButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/BigIconButton.kt new file mode 100644 index 0000000..d64e09d --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/BigIconButton.kt @@ -0,0 +1,54 @@ +package it.hamy.muza.ui.components.themed + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import it.hamy.muza.ui.modifiers.pressable +import it.hamy.muza.ui.styling.LocalAppearance + +@Composable +fun BigIconButton( + @DrawableRes iconId: Int, + onClick: () -> Unit, + modifier: Modifier = Modifier, + onPress: (() -> Unit)? = null, + onCancel: (() -> Unit)? = null, + backgroundColor: Color = LocalAppearance.current.colorPalette.background2, + contentColor: Color = LocalAppearance.current.colorPalette.text, + shape: Shape = RoundedCornerShape(32.dp) +) = Box( + modifier + .clip(shape) + .let { + if (onPress == null && onCancel == null) it.clickable(onClick = onClick) + else it.pressable( + onPress = { onPress?.invoke() }, + onCancel = { onCancel?.invoke() }, + onRelease = onClick + ) + } + .background(backgroundColor) + .height(64.dp), + contentAlignment = Alignment.Center +) { + Image( + painter = painterResource(iconId), + contentDescription = null, + modifier = Modifier.size(24.dp), + colorFilter = ColorFilter.tint(contentColor) + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Dialog.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Dialog.kt index 264f0ed..3537d35 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Dialog.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Dialog.kt @@ -1,8 +1,6 @@ package it.hamy.muza.ui.components.themed -import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut +import androidx.annotation.IntRange import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -14,25 +12,25 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText -import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester @@ -40,20 +38,18 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.center import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow -import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.text.TextRange -import androidx.compose.ui.text.input.ImeAction -import androidx.compose.ui.text.input.TextFieldValue -import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties +import it.hamy.muza.R import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.utils.center import it.hamy.muza.utils.drawCircle import it.hamy.muza.utils.medium -import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold +import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.delay @Composable @@ -62,70 +58,40 @@ fun TextFieldDialog( onDismiss: () -> Unit, onDone: (String) -> Unit, modifier: Modifier = Modifier, - cancelText: String = "Отмена", - doneText: String = "Готово", + cancelText: String = stringResource(R.string.cancel), + doneText: String = stringResource(R.string.done), initialTextInput: String = "", singleLine: Boolean = true, maxLines: Int = 1, onCancel: () -> Unit = onDismiss, - isTextInputValid: (String) -> Boolean = { it.isNotEmpty() } + isTextInputValid: (String) -> Boolean = { it.isNotEmpty() }, + keyboardOptions: KeyboardOptions = KeyboardOptions() ) { - val focusRequester = remember { - FocusRequester() - } - val (colorPalette, typography) = LocalAppearance.current + val focusRequester = remember { FocusRequester() } + val (_, typography) = LocalAppearance.current - var textFieldValue by rememberSaveable(initialTextInput, stateSaver = TextFieldValue.Saver) { - mutableStateOf( - TextFieldValue( - text = initialTextInput, - selection = TextRange(initialTextInput.length) - ) - ) - } + var value by rememberSaveable(initialTextInput) { mutableStateOf(initialTextInput) } DefaultDialog( onDismiss = onDismiss, modifier = modifier ) { - BasicTextField( - value = textFieldValue, - onValueChange = { textFieldValue = it }, + TextField( + value = value, + onValueChange = { value = it }, textStyle = typography.xs.semiBold.center, singleLine = singleLine, maxLines = maxLines, - keyboardOptions = KeyboardOptions(imeAction = if (singleLine) ImeAction.Done else ImeAction.None), + hintText = hintText, keyboardActions = KeyboardActions( onDone = { - if (isTextInputValid(textFieldValue.text)) { + if (isTextInputValid(value)) { onDismiss() - onDone(textFieldValue.text) + onDone(value) } } ), - cursorBrush = SolidColor(colorPalette.text), - decorationBox = { innerTextField -> - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .weight(1f) - ) { - androidx.compose.animation.AnimatedVisibility( - visible = textFieldValue.text.isEmpty(), - enter = fadeIn(tween(100)), - exit = fadeOut(tween(100)), - ) { - BasicText( - text = hintText, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = typography.xs.semiBold.secondary, - ) - } - - innerTextField() - } - }, + keyboardOptions = keyboardOptions, modifier = Modifier .padding(all = 16.dp) .weight(weight = 1f, fill = false) @@ -134,8 +100,7 @@ fun TextFieldDialog( Row( horizontalArrangement = Arrangement.SpaceEvenly, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { DialogTextButton( text = cancelText, @@ -146,9 +111,9 @@ fun TextFieldDialog( primary = true, text = doneText, onClick = { - if (isTextInputValid(textFieldValue.text)) { + if (isTextInputValid(value)) { onDismiss() - onDone(textFieldValue.text) + onDone(value) } } ) @@ -161,14 +126,39 @@ fun TextFieldDialog( } } +@Composable +fun NumberFieldDialog( + onDismiss: () -> Unit, + onDone: (T) -> Unit, + initialValue: T, + defaultValue: T, + convert: (String) -> T?, + range: ClosedRange, + modifier: Modifier = Modifier, + cancelText: String = stringResource(R.string.cancel), + doneText: String = stringResource(R.string.done), + onCancel: () -> Unit = onDismiss +) where T : Number, T : Comparable = TextFieldDialog( + hintText = "", + onDismiss = onDismiss, + onDone = { onDone((convert(it) ?: defaultValue).coerceIn(range)) }, + modifier = modifier, + cancelText = cancelText, + doneText = doneText, + initialTextInput = initialValue.toString(), + onCancel = onCancel, + isTextInputValid = { true }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) +) + @Composable fun ConfirmationDialog( text: String, onDismiss: () -> Unit, onConfirm: () -> Unit, modifier: Modifier = Modifier, - cancelText: String = "Отменить", - confirmText: String = "Продолжить", + cancelText: String = stringResource(R.string.cancel), + confirmText: String = stringResource(R.string.confirm), onCancel: () -> Unit = onDismiss ) { val (_, typography) = LocalAppearance.current @@ -180,14 +170,12 @@ fun ConfirmationDialog( BasicText( text = text, style = typography.xs.medium.center, - modifier = Modifier - .padding(all = 16.dp) + modifier = Modifier.padding(all = 16.dp) ) Row( horizontalArrangement = Arrangement.SpaceEvenly, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { DialogTextButton( text = cancelText, @@ -206,129 +194,198 @@ fun ConfirmationDialog( } } -@OptIn(ExperimentalComposeUiApi::class) @Composable -inline fun DefaultDialog( - noinline onDismiss: () -> Unit, +fun DefaultDialog( + onDismiss: () -> Unit, modifier: Modifier = Modifier, horizontalAlignment: Alignment.Horizontal = Alignment.CenterHorizontally, - crossinline content: @Composable ColumnScope.() -> Unit -) { - val (colorPalette) = LocalAppearance.current + horizontalPadding: Dp = 24.dp, + content: @Composable ColumnScope.() -> Unit +) = Dialog(onDismissRequest = onDismiss) { + Column( + horizontalAlignment = horizontalAlignment, + modifier = modifier + .padding(all = 48.dp) + .background( + color = LocalAppearance.current.colorPalette.background1, + shape = RoundedCornerShape(8.dp) + ) + .padding( + horizontal = horizontalPadding, + vertical = 16.dp + ), + content = content + ) +} - Dialog( - onDismissRequest = onDismiss, - properties = DialogProperties(usePlatformDefaultWidth = false) - ) { - Column( - horizontalAlignment = horizontalAlignment, - modifier = modifier - .padding(all = 48.dp) - .background( - color = colorPalette.background1, - shape = RoundedCornerShape(8.dp) +@Composable +fun ValueSelectorDialog( + onDismiss: () -> Unit, + title: String, + selectedValue: T, + values: ImmutableList, + onValueSelected: (T) -> Unit, + modifier: Modifier = Modifier, + valueText: @Composable (T) -> String = { it.toString() } +) = Dialog(onDismissRequest = onDismiss) { + ValueSelectorDialogBody( + onDismiss = onDismiss, + title = title, + selectedValue = selectedValue, + values = values, + onValueSelected = onValueSelected, + modifier = modifier + .padding(all = 48.dp) + .background( + color = LocalAppearance.current.colorPalette.background1, + shape = RoundedCornerShape(8.dp) + ) + .padding(vertical = 16.dp), + valueText = valueText + ) +} + +@Composable +fun ValueSelectorDialogBody( + onDismiss: () -> Unit, + title: String, + selectedValue: T?, + values: ImmutableList, + onValueSelected: (T) -> Unit, + modifier: Modifier = Modifier, + valueText: @Composable (T) -> String = { it.toString() } +) = Column(modifier = modifier) { + val (colorPalette, typography) = LocalAppearance.current + + BasicText( + text = title, + style = typography.s.semiBold, + modifier = Modifier.padding(vertical = 8.dp, horizontal = 24.dp) + ) + + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { + values.forEach { value -> + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier + .clickable( + onClick = { + onDismiss() + onValueSelected(value) + } + ) + .padding(vertical = 12.dp, horizontal = 24.dp) + .fillMaxWidth() + ) { + if (selectedValue == value) Canvas( + modifier = Modifier + .size(18.dp) + .background( + color = colorPalette.accent, + shape = CircleShape + ) + ) { + drawCircle( + color = colorPalette.onAccent, + radius = 4.dp.toPx(), + center = size.center, + shadow = Shadow( + color = Color.Black.copy(alpha = 0.4f), + blurRadius = 4.dp.toPx(), + offset = Offset(x = 0f, y = 1.dp.toPx()) + ) + ) + } else Spacer( + modifier = Modifier + .size(18.dp) + .border( + width = 1.dp, + color = colorPalette.textDisabled, + shape = CircleShape + ) ) - .padding(horizontal = 24.dp, vertical = 16.dp), - content = content + + BasicText( + text = valueText(value), + style = typography.xs.medium + ) + } + } + } + + Box( + modifier = Modifier + .align(Alignment.End) + .padding(end = 24.dp) + ) { + DialogTextButton( + text = stringResource(R.string.cancel), + onClick = onDismiss ) } } @Composable -inline fun ValueSelectorDialog( - noinline onDismiss: () -> Unit, +fun SliderDialog( + onDismiss: () -> Unit, title: String, - selectedValue: T, - values: List, - crossinline onValueSelected: (T) -> Unit, + provideState: @Composable () -> MutableState, + onSlideCompleted: (newState: Float) -> Unit, + min: Float, + max: Float, modifier: Modifier = Modifier, - crossinline valueText: (T) -> String = { it.toString() } -) { + toDisplay: @Composable (Float) -> String = { it.toString() }, + @IntRange(from = 0) steps: Int = 0, + content: @Composable () -> Unit = { } +) = Dialog(onDismissRequest = onDismiss) { val (colorPalette, typography) = LocalAppearance.current + var state by provideState() - Dialog(onDismissRequest = onDismiss) { - Column( - modifier = modifier - .padding(all = 48.dp) - .background(color = colorPalette.background1, shape = RoundedCornerShape(8.dp)) - .padding(vertical = 16.dp), + Column( + modifier = modifier + .padding(all = 48.dp) + .background(color = colorPalette.background1, shape = RoundedCornerShape(8.dp)) + .padding(vertical = 16.dp) + ) { + BasicText( + text = title, + style = typography.s.semiBold, + modifier = Modifier.padding(vertical = 8.dp, horizontal = 24.dp) + ) + + Slider( + state = state, + setState = { state = it }, + onSlideCompleted = { onSlideCompleted(state) }, + range = min..max, + steps = steps, + modifier = Modifier + .height(36.dp) + .fillMaxWidth() + .padding(horizontal = 24.dp) + ) + + BasicText( + text = toDisplay(state), + style = typography.s.semiBold, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(vertical = 8.dp) + ) + + content() + + Box( + modifier = Modifier + .align(Alignment.End) + .padding(end = 24.dp) ) { - BasicText( - text = title, - style = typography.s.semiBold, + DialogTextButton( + text = stringResource(R.string.confirm), + onClick = onDismiss, modifier = Modifier - .padding(vertical = 8.dp, horizontal = 24.dp) ) - - Column( - modifier = Modifier - .verticalScroll(rememberScrollState()) - ) { - values.forEach { value -> - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier - .clickable( - onClick = { - onDismiss() - onValueSelected(value) - } - ) - .padding(vertical = 12.dp, horizontal = 24.dp) - .fillMaxWidth() - ) { - if (selectedValue == value) { - Canvas( - modifier = Modifier - .size(18.dp) - .background( - color = colorPalette.accent, - shape = CircleShape - ) - ) { - drawCircle( - color = colorPalette.onAccent, - radius = 4.dp.toPx(), - center = size.center, - shadow = Shadow( - color = Color.Black.copy(alpha = 0.4f), - blurRadius = 4.dp.toPx(), - offset = Offset(x = 0f, y = 1.dp.toPx()) - ) - ) - } - } else { - Spacer( - modifier = Modifier - .size(18.dp) - .border( - width = 1.dp, - color = colorPalette.textDisabled, - shape = CircleShape - ) - ) - } - - BasicText( - text = valueText(value), - style = typography.xs.medium - ) - } - } - } - - Box( - modifier = Modifier - .align(Alignment.End) - .padding(end = 24.dp) - ) { - DialogTextButton( - text = "Отмена", - onClick = onDismiss, - modifier = Modifier - ) - } } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt index 8423634..398197e 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/DialogTextButton.kt @@ -20,7 +20,7 @@ fun DialogTextButton( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, - primary: Boolean = false, + primary: Boolean = false ) { val (colorPalette, typography) = LocalAppearance.current diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Divider.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Divider.kt new file mode 100644 index 0000000..f81fd1b --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Divider.kt @@ -0,0 +1,72 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import it.hamy.muza.ui.styling.LocalAppearance + +/** + * A simple horizontal divider, derived from Material Design + */ +@Composable +fun HorizontalDivider( + modifier: Modifier = Modifier, + thickness: Dp = 1.dp, + color: Color = LocalAppearance.current.colorPalette.textDisabled +) = Canvas( + modifier = modifier + .fillMaxWidth() + .height(thickness) +) { + val stroke = thickness.toPx() + + drawLine( + color = color, + strokeWidth = stroke, + start = Offset( + x = 0f, + y = stroke / 2 + ), + end = Offset( + x = size.width, + y = stroke / 2 + ) + ) +} + +/** + * A simple vertical divider, derived from Material Design + */ +@Composable +fun VerticalDivider( + modifier: Modifier = Modifier, + thickness: Dp = 1.dp, + color: Color = LocalAppearance.current.colorPalette.textDisabled +) = Canvas( + modifier = modifier + .fillMaxHeight() + .width(thickness) +) { + val stroke = thickness.toPx() + + drawLine( + color = color, + strokeWidth = stroke, + start = Offset( + x = stroke / 2, + y = 0f + ), + end = Offset( + x = stroke / 2, + y = size.height + ) + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt index 9bc3425..399abbf 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/FloatingActionsContainer.kt @@ -31,7 +31,6 @@ import it.hamy.muza.utils.scrollingInfo import it.hamy.muza.utils.smoothScrollToTop import kotlinx.coroutines.launch -@ExperimentalAnimationApi @Composable fun BoxScope.FloatingActionsContainerWithScrollToTop( lazyGridState: LazyGridState, @@ -55,7 +54,6 @@ fun BoxScope.FloatingActionsContainerWithScrollToTop( ) } -@ExperimentalAnimationApi @Composable fun BoxScope.FloatingActionsContainerWithScrollToTop( lazyListState: LazyListState, @@ -79,7 +77,6 @@ fun BoxScope.FloatingActionsContainerWithScrollToTop( ) } -@ExperimentalAnimationApi @Composable fun BoxScope.FloatingActionsContainerWithScrollToTop( scrollState: ScrollState, @@ -102,7 +99,7 @@ fun BoxScope.FloatingActionsContainerWithScrollToTop( ) } -@ExperimentalAnimationApi +@OptIn(ExperimentalAnimationApi::class) @Composable fun BoxScope.FloatingActions( transitionState: MutableTransitionState, @@ -122,13 +119,17 @@ fun BoxScope.FloatingActions( modifier = modifier .align(Alignment.BottomEnd) .padding(end = 16.dp) - .padding(windowInsets.only(WindowInsetsSides.End).asPaddingValues()) + .padding( + windowInsets + .only(WindowInsetsSides.End) + .asPaddingValues() + ) ) { onScrollToTop?.let { transition.AnimatedVisibility( visible = { it?.isScrollingDown == false && it.isFar }, enter = slideInVertically(tween(500, if (iconId == null) 0 else 100)) { it }, - exit = slideOutVertically(tween(500, 0)) { it }, + exit = slideOutVertically(tween(500, 0)) { it } ) { val coroutineScope = rememberCoroutineScope() @@ -151,8 +152,14 @@ fun BoxScope.FloatingActions( onClick?.let { transition.AnimatedVisibility( visible = { it?.isScrollingDown == false }, - enter = slideInVertically(tween(500, 0)) { it }, - exit = slideOutVertically(tween(500, 100)) { it }, + enter = slideInVertically( + animationSpec = tween(durationMillis = 500, delayMillis = 0), + initialOffsetY = { it } + ), + exit = slideOutVertically( + animationSpec = tween(durationMillis = 500, delayMillis = 100), + targetOffsetY = { it } + ) ) { PrimaryButton( iconId = iconId, diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt index f98ddfd..fa48a7b 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Header.kt @@ -26,74 +26,64 @@ import kotlin.random.Random fun Header( title: String, modifier: Modifier = Modifier, - actionsContent: @Composable RowScope.() -> Unit = {}, -) { - val typography = LocalAppearance.current.typography + actionsContent: @Composable RowScope.() -> Unit = {} +) = Header( + modifier = modifier, + titleContent = { + BasicText( + text = title, + style = LocalAppearance.current.typography.xxl.medium, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + }, + actionsContent = actionsContent +) - Header( - modifier = modifier, - titleContent = { - BasicText( - text = title, - style = typography.xxl.medium, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - }, - actionsContent = actionsContent +@Composable +fun Header( + titleContent: @Composable () -> Unit, + actionsContent: @Composable RowScope.() -> Unit, + modifier: Modifier = Modifier +) = Box( + contentAlignment = Alignment.CenterEnd, + modifier = modifier + .padding(horizontal = 16.dp) + .height(Dimensions.items.headerHeight) + .fillMaxWidth() +) { + titleContent() + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier + .align(Alignment.BottomEnd) + .heightIn(min = 48.dp), + content = actionsContent ) } @Composable -fun Header( - modifier: Modifier = Modifier, - titleContent: @Composable () -> Unit, - actionsContent: @Composable RowScope.() -> Unit, -) { - Box( - contentAlignment = Alignment.CenterEnd, - modifier = modifier - .padding(horizontal = 16.dp) - .height(Dimensions.headerHeight) - .fillMaxWidth() - ) { - titleContent() - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier - .align(Alignment.BottomEnd) - .heightIn(min = 48.dp), - content = actionsContent, - ) - } -} - -@Composable -fun HeaderPlaceholder( - modifier: Modifier = Modifier, +fun HeaderPlaceholder(modifier: Modifier = Modifier) = Box( + contentAlignment = Alignment.CenterEnd, + modifier = modifier + .padding(horizontal = 16.dp) + .height(Dimensions.items.headerHeight) + .fillMaxWidth() ) { val (colorPalette, typography) = LocalAppearance.current Box( - contentAlignment = Alignment.CenterEnd, - modifier = modifier - .padding(horizontal = 16.dp) - .height(Dimensions.headerHeight) - .fillMaxWidth() + modifier = Modifier + .background(colorPalette.shimmer) + .fillMaxWidth(remember { 0.25f + Random.nextFloat() * 0.5f }) ) { - Box( - modifier = Modifier - .background(colorPalette.shimmer) - .fillMaxWidth(remember { 0.25f + Random.nextFloat() * 0.5f }) - ) { - BasicText( - text = "", - style = typography.xxl.medium, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - } + BasicText( + text = " ", + style = typography.xxl.medium, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt index 1500dd5..c91ba4c 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/IconButton.kt @@ -23,19 +23,17 @@ fun HeaderIconButton( color: Color, modifier: Modifier = Modifier, enabled: Boolean = true, - indication: Indication? = null -) { - IconButton( - icon = icon, - color = color, - onClick = onClick, - enabled = enabled, - indication = indication, - modifier = modifier - .padding(all = 4.dp) - .size(18.dp) - ) -} + indication: Indication? = rememberRipple(bounded = false) +) = IconButton( + icon = icon, + color = color, + onClick = onClick, + enabled = enabled, + indication = indication, + modifier = modifier + .padding(all = 4.dp) + .size(18.dp) +) @Composable fun IconButton( @@ -44,19 +42,17 @@ fun IconButton( color: Color, modifier: Modifier = Modifier, enabled: Boolean = true, - indication: Indication? = null -) { - Image( - painter = painterResource(icon), - contentDescription = null, - colorFilter = ColorFilter.tint(color), - modifier = Modifier - .clickable( - indication = indication ?: rememberRipple(bounded = false), - interactionSource = remember { MutableInteractionSource() }, - enabled = enabled, - onClick = onClick - ) - .then(modifier) - ) -} + indication: Indication? = rememberRipple(bounded = false) +) = Image( + painter = painterResource(icon), + contentDescription = null, + colorFilter = ColorFilter.tint(color), + modifier = Modifier + .clickable( + indication = indication, + interactionSource = remember { MutableInteractionSource() }, + enabled = enabled, + onClick = onClick + ) + .then(modifier) +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt index 773d571..529f6e6 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/LayoutWithAdaptiveThumbnail.kt @@ -1,6 +1,7 @@ package it.hamy.muza.ui.components.themed import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -15,56 +16,48 @@ import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import com.valentinilk.shimmer.shimmer import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px import it.hamy.muza.ui.styling.shimmer import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.px import it.hamy.muza.utils.thumbnail @Composable inline fun LayoutWithAdaptiveThumbnail( thumbnailContent: @Composable () -> Unit, + modifier: Modifier = Modifier, content: @Composable () -> Unit +) = if (isLandscape) Row( + verticalAlignment = Alignment.CenterVertically, + modifier = modifier ) { - val isLandscape = isLandscape - - if (isLandscape) { - Row(verticalAlignment = Alignment.CenterVertically) { - thumbnailContent() - content() - } - } else { - content() - } -} + thumbnailContent() + content() +} else Box(modifier = modifier) { content() } fun adaptiveThumbnailContent( isLoading: Boolean, url: String?, shape: Shape? = null ): @Composable () -> Unit = { - val (colorPalette, _, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val thumbnailShape = LocalAppearance.current.thumbnailShape BoxWithConstraints(contentAlignment = Alignment.Center) { - val thumbnailSizeDp = if (isLandscape) (maxHeight - 128.dp) else (maxWidth - 64.dp) - val thumbnailSizePx = thumbnailSizeDp.px + val thumbnailSize = if (isLandscape) (maxHeight - 128.dp) else (maxWidth - 64.dp) val modifier = Modifier .padding(all = 16.dp) .clip(shape ?: thumbnailShape) - .size(thumbnailSizeDp) + .size(thumbnailSize) - if (isLoading) { - Spacer( - modifier = modifier - .shimmer() - .background(colorPalette.shimmer) - ) - } else { - AsyncImage( - model = url?.thumbnail(thumbnailSizePx), - contentDescription = null, - modifier = modifier - ) - } + if (isLoading) Spacer( + modifier = modifier + .shimmer() + .background(colorPalette.shimmer) + ) else AsyncImage( + model = url?.thumbnail(thumbnailSize.px), + contentDescription = null, + modifier = modifier.background(colorPalette.background1) + ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt index 99db8cf..d17950f 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/MediaItemMenu.kt @@ -2,12 +2,12 @@ package it.hamy.muza.ui.components.themed import android.content.Intent import androidx.activity.compose.BackHandler +import androidx.annotation.OptIn import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.tween -import androidx.compose.animation.with +import androidx.compose.animation.togetherWith import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -27,7 +27,9 @@ import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable @@ -39,10 +41,14 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.onPlaced import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.pluralStringResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem +import androidx.media3.common.util.UnstableApi import it.hamy.innertube.models.NavigationEndpoint import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder @@ -54,6 +60,8 @@ import it.hamy.muza.models.Playlist import it.hamy.muza.models.Song import it.hamy.muza.models.SongPlaylistMap import it.hamy.muza.query +import it.hamy.muza.service.PrecacheService +import it.hamy.muza.service.isLocal import it.hamy.muza.transaction import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.screens.albumRoute @@ -61,20 +69,24 @@ import it.hamy.muza.ui.screens.artistRoute import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.favoritesIcon -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.addNext import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.forcePlay import it.hamy.muza.utils.formatAsDuration +import it.hamy.muza.utils.isCached +import it.hamy.muza.utils.launchYouTubeMusic import it.hamy.muza.utils.medium +import it.hamy.muza.utils.px import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.thumbnail +import it.hamy.muza.utils.toast import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -@ExperimentalAnimationApi +@OptIn(UnstableApi::class) @Composable fun InHistoryMediaItemMenu( onDismiss: () -> Unit, @@ -82,25 +94,21 @@ fun InHistoryMediaItemMenu( modifier: Modifier = Modifier ) { val binder = LocalPlayerServiceBinder.current + var isHiding by remember { mutableStateOf(false) } - var isHiding by remember { - mutableStateOf(false) - } - - if (isHiding) { - ConfirmationDialog( - text = "Вы действительно хотите скрыть эту песню? Время воспроизведения и кэш будут удалены.\n" + "Это действие необратимо", - onDismiss = { isHiding = false }, - onConfirm = { - onDismiss() - query { - // Not sure we can to this here + if (isHiding) ConfirmationDialog( + text = stringResource(R.string.confirm_hide_song), + onDismiss = { isHiding = false }, + onConfirm = { + onDismiss() + query { + runCatching { binder?.cache?.removeResource(song.id) - Database.incrementTotalPlayTimeMs(song.id, -song.totalPlayTimeMs) + Database.delete(song) } } - ) - } + } + ) NonQueuedMediaItemMenu( mediaItem = song.asMediaItem, @@ -110,7 +118,6 @@ fun InHistoryMediaItemMenu( ) } -@ExperimentalAnimationApi @Composable fun InPlaylistMediaItemMenu( onDismiss: () -> Unit, @@ -118,21 +125,18 @@ fun InPlaylistMediaItemMenu( positionInPlaylist: Int, song: Song, modifier: Modifier = Modifier -) { - NonQueuedMediaItemMenu( - mediaItem = song.asMediaItem, - onDismiss = onDismiss, - onRemoveFromPlaylist = { - transaction { - Database.move(playlistId, positionInPlaylist, Int.MAX_VALUE) - Database.delete(SongPlaylistMap(song.id, playlistId, Int.MAX_VALUE)) - } - }, - modifier = modifier - ) -} +) = NonQueuedMediaItemMenu( + mediaItem = song.asMediaItem, + onDismiss = onDismiss, + onRemoveFromPlaylist = { + transaction { + Database.move(playlistId, positionInPlaylist, Int.MAX_VALUE) + Database.delete(SongPlaylistMap(song.id, playlistId, Int.MAX_VALUE)) + } + }, + modifier = modifier +) -@ExperimentalAnimationApi @Composable fun NonQueuedMediaItemMenu( onDismiss: () -> Unit, @@ -140,7 +144,7 @@ fun NonQueuedMediaItemMenu( modifier: Modifier = Modifier, onRemoveFromPlaylist: (() -> Unit)? = null, onHideFromDatabase: (() -> Unit)? = null, - onRemoveFromQuickPicks: (() -> Unit)? = null, + onRemoveFromQuickPicks: (() -> Unit)? = null ) { val binder = LocalPlayerServiceBinder.current @@ -166,7 +170,6 @@ fun NonQueuedMediaItemMenu( ) } -@ExperimentalAnimationApi @Composable fun QueuedMediaItemMenu( onDismiss: () -> Unit, @@ -179,14 +182,11 @@ fun QueuedMediaItemMenu( BaseMediaItemMenu( mediaItem = mediaItem, onDismiss = onDismiss, - onRemoveFromQueue = if (indexInQueue != null) ({ - binder?.player?.removeMediaItem(indexInQueue) - }) else null, + onRemoveFromQueue = indexInQueue?.let { index -> { binder?.player?.removeMediaItem(index) } }, modifier = modifier ) } -@ExperimentalAnimationApi @Composable fun BaseMediaItemMenu( onDismiss: () -> Unit, @@ -201,6 +201,8 @@ fun BaseMediaItemMenu( onRemoveFromPlaylist: (() -> Unit)? = null, onHideFromDatabase: (() -> Unit)? = null, onRemoveFromQuickPicks: (() -> Unit)? = null, + onShowSpeedDialog: (() -> Unit)? = null, + onShowNormalizationDialog: (() -> Unit)? = null ) { val context = LocalContext.current @@ -242,15 +244,17 @@ fun BaseMediaItemMenu( context.startActivity(Intent.createChooser(sendIntent, null)) }, onRemoveFromQuickPicks = onRemoveFromQuickPicks, + onShowSpeedDialog = onShowSpeedDialog, + onShowNormalizationDialog = onShowNormalizationDialog, modifier = modifier ) } -@ExperimentalAnimationApi @Composable fun MediaItemMenu( - onDismiss: () -> Unit, mediaItem: MediaItem, + onDismiss: () -> Unit, + onShare: () -> Unit, modifier: Modifier = Modifier, onGoToEqualizer: (() -> Unit)? = null, onShowSleepTimer: (() -> Unit)? = null, @@ -264,23 +268,28 @@ fun MediaItemMenu( onGoToAlbum: ((String) -> Unit)? = null, onGoToArtist: ((String) -> Unit)? = null, onRemoveFromQuickPicks: (() -> Unit)? = null, - onShare: () -> Unit + onShowSpeedDialog: (() -> Unit)? = null, + onShowNormalizationDialog: (() -> Unit)? = null ) { val (colorPalette) = LocalAppearance.current val density = LocalDensity.current + val uriHandler = LocalUriHandler.current + val playerServiceBinder = LocalPlayerServiceBinder.current + val context = LocalContext.current - var isViewingPlaylists by remember { - mutableStateOf(false) - } + val isLocal by remember { derivedStateOf { mediaItem.isLocal } } - var height by remember { - mutableStateOf(0.dp) - } + var isViewingPlaylists by remember { mutableStateOf(false) } + var height by remember { mutableStateOf(0.dp) } + var likedAt by remember { mutableStateOf(null) } + var isBlacklisted by remember { mutableStateOf(false) } var albumInfo by remember { - mutableStateOf(mediaItem.mediaMetadata.extras?.getString("albumId")?.let { albumId -> - Info(albumId, null) - }) + mutableStateOf( + mediaItem.mediaMetadata.extras?.getString("albumId")?.let { albumId -> + Info(albumId, null) + } + ) } var artistsInfo by remember { @@ -295,16 +304,13 @@ fun MediaItemMenu( ) } - var likedAt by remember { - mutableStateOf(null) - } - LaunchedEffect(Unit) { withContext(Dispatchers.IO) { if (albumInfo == null) albumInfo = Database.songAlbumInfo(mediaItem.mediaId) if (artistsInfo == null) artistsInfo = Database.songArtistInfo(mediaItem.mediaId) - Database.likedAt(mediaItem.mediaId).collect { likedAt = it } + launch { Database.likedAt(mediaItem.mediaId).collect { likedAt = it } } + launch { Database.blacklisted(mediaItem.mediaId).collect { isBlacklisted = it } } } } @@ -312,41 +318,33 @@ fun MediaItemMenu( targetState = isViewingPlaylists, transitionSpec = { val animationSpec = tween(400) - val slideDirection = - if (targetState) AnimatedContentScope.SlideDirection.Left else AnimatedContentScope.SlideDirection.Right + val slideDirection = if (targetState) AnimatedContentTransitionScope.SlideDirection.Left + else AnimatedContentTransitionScope.SlideDirection.Right - slideIntoContainer(slideDirection, animationSpec) with + slideIntoContainer(slideDirection, animationSpec) togetherWith slideOutOfContainer(slideDirection, animationSpec) - } + }, + label = "" ) { currentIsViewingPlaylists -> if (currentIsViewingPlaylists) { val playlistPreviews by remember { Database.playlistPreviews(PlaylistSortBy.DateAdded, SortOrder.Descending) }.collectAsState(initial = emptyList(), context = Dispatchers.IO) - var isCreatingNewPlaylist by rememberSaveable { - mutableStateOf(false) - } + var isCreatingNewPlaylist by rememberSaveable { mutableStateOf(false) } - if (isCreatingNewPlaylist && onAddToPlaylist != null) { - TextFieldDialog( - hintText = "Введите название плейлиста", - onDismiss = { isCreatingNewPlaylist = false }, - onDone = { text -> - onDismiss() - onAddToPlaylist(Playlist(name = text), 0) - } - ) - } + if (isCreatingNewPlaylist && onAddToPlaylist != null) TextFieldDialog( + hintText = stringResource(R.string.enter_playlist_name_prompt), + onDismiss = { isCreatingNewPlaylist = false }, + onDone = { text -> + onDismiss() + onAddToPlaylist(Playlist(name = text), 0) + } + ) - BackHandler { - isViewingPlaylists = false - } + BackHandler { isViewingPlaylists = false } - Menu( - modifier = modifier - .requiredHeight(height) - ) { + Menu(modifier = modifier.requiredHeight(height)) { Row( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, @@ -363,13 +361,11 @@ fun MediaItemMenu( .size(20.dp) ) - if (onAddToPlaylist != null) { - SecondaryTextButton( - text = "Новый плейлист", - onClick = { isCreatingNewPlaylist = true }, - alternative = true - ) - } + if (onAddToPlaylist != null) SecondaryTextButton( + text = stringResource(R.string.new_playlist), + onClick = { isCreatingNewPlaylist = true }, + alternative = true + ) } onAddToPlaylist?.let { onAddToPlaylist -> @@ -377,7 +373,11 @@ fun MediaItemMenu( MenuEntry( icon = R.drawable.playlist, text = playlistPreview.playlist.name, - secondaryText = "${playlistPreview.songCount} песен", + secondaryText = pluralStringResource( + id = R.plurals.song_count_plural, + count = playlistPreview.songCount, + playlistPreview.songCount + ), onClick = { onDismiss() onAddToPlaylist(playlistPreview.playlist, playlistPreview.songCount) @@ -386,300 +386,321 @@ fun MediaItemMenu( } } } - } else { - Menu( - modifier = modifier - .onPlaced { height = with(density) { it.size.height.toDp() } } + } else Menu( + modifier = modifier.onPlaced { + height = with(density) { it.size.height.toDp() } + } + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.padding(end = 12.dp) ) { - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px + SongItem( + modifier = Modifier.weight(1f), + thumbnailUrl = mediaItem.mediaMetadata.artworkUri + .thumbnail(Dimensions.thumbnails.song.px)?.toString(), + title = mediaItem.mediaMetadata.title?.toString().orEmpty(), + authors = mediaItem.mediaMetadata.artist?.toString().orEmpty(), + duration = null, + thumbnailSize = Dimensions.thumbnails.song + ) - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .padding(end = 12.dp) - ) { - SongItem( - thumbnailUrl = mediaItem.mediaMetadata.artworkUri.thumbnail(thumbnailSizePx) - ?.toString(), - title = mediaItem.mediaMetadata.title.toString(), - authors = mediaItem.mediaMetadata.artist.toString(), - duration = null, - thumbnailSizeDp = thumbnailSizeDp, + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + IconButton( + icon = if (likedAt == null) R.drawable.heart_outline else R.drawable.heart, + color = colorPalette.favoritesIcon, + onClick = { + query { + if (Database.like( + mediaItem.mediaId, + if (likedAt == null) System.currentTimeMillis() else null + ) == 0 + ) { + Database.insert(mediaItem, Song::toggleLike) + } + } + }, modifier = Modifier - .weight(1f) + .padding(all = 4.dp) + .size(18.dp) ) - Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { - IconButton( - icon = if (likedAt == null) R.drawable.heart_outline else R.drawable.heart, - color = colorPalette.favoritesIcon, - onClick = { - query { - if (Database.like( - mediaItem.mediaId, - if (likedAt == null) System.currentTimeMillis() else null - ) == 0 - ) { - Database.insert(mediaItem, Song::toggleLike) - } - } - }, - modifier = Modifier - .padding(all = 4.dp) - .size(18.dp) + if (!isLocal) IconButton( + icon = R.drawable.share_social, + color = colorPalette.text, + onClick = onShare, + modifier = Modifier + .padding(all = 4.dp) + .size(17.dp) + ) + } + } + + Spacer(Modifier.height(8.dp)) + + Spacer( + modifier = Modifier + .alpha(0.5f) + .align(Alignment.CenterHorizontally) + .background(colorPalette.textDisabled) + .height(1.dp) + .fillMaxWidth(1f) + ) + + Spacer(Modifier.height(8.dp)) + + if (!isLocal && !isCached(mediaItem.mediaId)) MenuEntry( + icon = R.drawable.download, + text = stringResource(R.string.pre_cache), + onClick = { + onDismiss() + PrecacheService.scheduleCache(context.applicationContext, mediaItem) + } + ) + + if (!isLocal) onStartRadio?.let { onStartRadio -> + MenuEntry( + icon = R.drawable.radio, + text = stringResource(R.string.start_radio), + onClick = { + onDismiss() + onStartRadio() + } + ) + } + + onShowSpeedDialog?.let { onShowSpeedDialog -> + MenuEntry( + icon = R.drawable.speed, + text = stringResource(R.string.playback_speed), + onClick = { + onDismiss() + onShowSpeedDialog() + } + ) + } + + onShowNormalizationDialog?.let { onShowNormalizationDialog -> + MenuEntry( + icon = R.drawable.volume_up, + text = stringResource(R.string.song_volume_boost), + onClick = { + onDismiss() + onShowNormalizationDialog() + } + ) + } + + onPlayNext?.let { onPlayNext -> + MenuEntry( + icon = R.drawable.play_skip_forward, + text = stringResource(R.string.play_next), + onClick = { + onDismiss() + onPlayNext() + } + ) + } + + onEnqueue?.let { onEnqueue -> + MenuEntry( + icon = R.drawable.enqueue, + text = stringResource(R.string.enqueue), + onClick = { + onDismiss() + onEnqueue() + } + ) + } + + if (!mediaItem.isLocal) MenuEntry( + icon = R.drawable.remove_circle_outline, + text = if (isBlacklisted) stringResource(R.string.remove_from_blacklist) + else stringResource(R.string.add_to_blacklist), + onClick = { + transaction { + Database.insert(mediaItem) + Database.toggleBlacklist(mediaItem.mediaId) + } + } + ) + + onGoToEqualizer?.let { onGoToEqualizer -> + MenuEntry( + icon = R.drawable.equalizer, + text = stringResource(R.string.equalizer), + onClick = { + onDismiss() + onGoToEqualizer() + } + ) + } + + onShowSleepTimer?.let { + val binder = LocalPlayerServiceBinder.current + val (_, typography) = LocalAppearance.current + + var isShowingSleepTimerDialog by remember { mutableStateOf(false) } + + val sleepTimerMillisLeft by (binder?.sleepTimerMillisLeft ?: flowOf(null)) + .collectAsState(initial = null) + + if (isShowingSleepTimerDialog) { + if (sleepTimerMillisLeft != null) ConfirmationDialog( + text = stringResource(R.string.stop_sleep_timer_prompt), + cancelText = stringResource(R.string.no), + confirmText = stringResource(R.string.stop), + onDismiss = { isShowingSleepTimerDialog = false }, + onConfirm = { + binder?.cancelSleepTimer() + onDismiss() + } + ) else DefaultDialog(onDismiss = { isShowingSleepTimerDialog = false }) { + var amount by remember { mutableIntStateOf(1) } + + BasicText( + text = stringResource(R.string.set_sleep_timer), + style = typography.s.semiBold, + modifier = Modifier.padding(vertical = 8.dp, horizontal = 24.dp) ) - IconButton( - icon = R.drawable.share_social, - color = colorPalette.text, - onClick = onShare, - modifier = Modifier - .padding(all = 4.dp) - .size(17.dp) - ) - } - } - - Spacer( - modifier = Modifier - .height(8.dp) - ) - - Spacer( - modifier = Modifier - .alpha(0.5f) - .align(Alignment.CenterHorizontally) - .background(colorPalette.textDisabled) - .height(1.dp) - .fillMaxWidth(1f) - ) - - Spacer( - modifier = Modifier - .height(8.dp) - ) - - onStartRadio?.let { onStartRadio -> - MenuEntry( - icon = R.drawable.radio, - text = "Включить радио", - onClick = { - onDismiss() - onStartRadio() - } - ) - } - - onPlayNext?.let { onPlayNext -> - MenuEntry( - icon = R.drawable.play_skip_forward, - text = "Следующая", - onClick = { - onDismiss() - onPlayNext() - } - ) - } - - onEnqueue?.let { onEnqueue -> - MenuEntry( - icon = R.drawable.enqueue, - text = "В очередь", - onClick = { - onDismiss() - onEnqueue() - } - ) - } - - onGoToEqualizer?.let { onGoToEqualizer -> - MenuEntry( - icon = R.drawable.equalizer, - text = "Эквалайзер", - onClick = { - onDismiss() - onGoToEqualizer() - } - ) - } - - // TODO: find solution to this shit - onShowSleepTimer?.let { - val binder = LocalPlayerServiceBinder.current - val (_, typography) = LocalAppearance.current - - var isShowingSleepTimerDialog by remember { - mutableStateOf(false) - } - - val sleepTimerMillisLeft by (binder?.sleepTimerMillisLeft - ?: flowOf(null)) - .collectAsState(initial = null) - - if (isShowingSleepTimerDialog) { - if (sleepTimerMillisLeft != null) { - ConfirmationDialog( - text = "Вы хотите отключить таймер сна?", - cancelText = "нет", - confirmText = "отключить", - onDismiss = { isShowingSleepTimerDialog = false }, - onConfirm = { - binder?.cancelSleepTimer() - onDismiss() - } - ) - } else { - DefaultDialog( - onDismiss = { isShowingSleepTimerDialog = false } - ) { - var amount by remember { - mutableStateOf(1) - } - - BasicText( - text = "Установить таймер сна", - style = typography.s.semiBold, - modifier = Modifier - .padding(vertical = 8.dp, horizontal = 24.dp) - ) - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy( - space = 16.dp, - alignment = Alignment.CenterHorizontally - ), - modifier = Modifier - .padding(vertical = 16.dp) - ) { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .alpha(if (amount <= 1) 0.5f else 1f) - .clip(CircleShape) - .clickable(enabled = amount > 1) { amount-- } - .size(48.dp) - .background(colorPalette.background0) - ) { - BasicText( - text = "-", - style = typography.xs.semiBold - ) - } - - Box(contentAlignment = Alignment.Center) { - BasicText( - text = "88ч 88м", - style = typography.s.semiBold, - modifier = Modifier - .alpha(0f) - ) - BasicText( - text = "${amount / 6}ч ${(amount % 6) * 10}м", - style = typography.s.semiBold - ) - } - - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .alpha(if (amount >= 60) 0.5f else 1f) - .clip(CircleShape) - .clickable(enabled = amount < 60) { amount++ } - .size(48.dp) - .background(colorPalette.background0) - ) { - BasicText( - text = "+", - style = typography.xs.semiBold - ) - } - } - - Row( - horizontalArrangement = Arrangement.SpaceEvenly, - modifier = Modifier - .fillMaxWidth() - ) { - DialogTextButton( - text = "Отмена", - onClick = { isShowingSleepTimerDialog = false } - ) - - DialogTextButton( - text = "Установить", - enabled = amount > 0, - primary = true, - onClick = { - binder?.startSleepTimer(amount * 10 * 60 * 1000L) - isShowingSleepTimerDialog = false - } - ) - } - } - } - } - - MenuEntry( - icon = R.drawable.alarm, - text = "Таймер сна", - onClick = { isShowingSleepTimerDialog = true }, - trailingContent = sleepTimerMillisLeft?.let { - { - BasicText( - text = "Осталось ${formatAsDuration(it)}", - style = typography.xxs.medium, - modifier = modifier - .background( - color = colorPalette.background0, - shape = RoundedCornerShape(16.dp) - ) - .padding(horizontal = 16.dp, vertical = 8.dp) - .animateContentSize() - ) - } - } - ) - } - - if (onAddToPlaylist != null) { - MenuEntry( - icon = R.drawable.playlist, - text = "Добавить в плейлист", - onClick = { isViewingPlaylists = true }, - trailingContent = { - Image( - painter = painterResource(R.drawable.chevron_forward), - contentDescription = null, - colorFilter = androidx.compose.ui.graphics.ColorFilter.tint( - colorPalette.textSecondary - ), + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy( + space = 16.dp, + alignment = Alignment.CenterHorizontally + ), + modifier = Modifier.padding(vertical = 16.dp) + ) { + Box( + contentAlignment = Alignment.Center, modifier = Modifier - .size(16.dp) + .alpha(if (amount <= 1) 0.5f else 1f) + .clip(CircleShape) + .clickable(enabled = amount > 1) { amount-- } + .size(48.dp) + .background(colorPalette.background0) + ) { + BasicText( + text = "-", + style = typography.xs.semiBold + ) + } + + Box(contentAlignment = Alignment.Center) { + BasicText( + text = "88h 88m", // invisible placeholder, no need to localize + style = typography.s.semiBold, + modifier = Modifier.alpha(0f) + ) + BasicText( + text = "${stringResource(R.string.format_hours, amount / 6)} " + + stringResource( + R.string.format_minutes, + (amount % 6) * 10 + ), + style = typography.s.semiBold + ) + } + + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .alpha(if (amount >= 60) 0.5f else 1f) + .clip(CircleShape) + .clickable(enabled = amount < 60) { amount++ } + .size(48.dp) + .background(colorPalette.background0) + ) { + BasicText( + text = "+", + style = typography.xs.semiBold + ) + } + } + + Row( + horizontalArrangement = Arrangement.SpaceEvenly, + modifier = Modifier.fillMaxWidth() + ) { + DialogTextButton( + text = stringResource(R.string.cancel), + onClick = { isShowingSleepTimerDialog = false } + ) + + DialogTextButton( + text = stringResource(R.string.set), + enabled = amount > 0, + primary = true, + onClick = { + binder?.startSleepTimer(amount * 10 * 60 * 1000L) + isShowingSleepTimerDialog = false + } ) } - ) - } - - onGoToAlbum?.let { onGoToAlbum -> - albumInfo?.let { (albumId) -> - MenuEntry( - icon = R.drawable.disc, - text = "Перейти в альбом", - onClick = { - onDismiss() - onGoToAlbum(albumId) - } - ) } } - onGoToArtist?.let { onGoToArtist -> - artistsInfo?.forEach { (authorId, authorName) -> + MenuEntry( + icon = R.drawable.alarm, + text = stringResource(R.string.sleep_timer), + onClick = { isShowingSleepTimerDialog = true }, + trailingContent = sleepTimerMillisLeft?.let { + { + BasicText( + text = stringResource( + R.string.format_time_left, + formatAsDuration(it) + ), + style = typography.xxs.medium, + modifier = Modifier + .background( + color = colorPalette.background0, + shape = RoundedCornerShape(16.dp) + ) + .padding(horizontal = 16.dp, vertical = 8.dp) + .animateContentSize() + ) + } + } + ) + } + + if (onAddToPlaylist != null) MenuEntry( + icon = R.drawable.playlist, + text = stringResource(R.string.add_to_playlist), + onClick = { isViewingPlaylists = true }, + trailingContent = { + Image( + painter = painterResource(R.drawable.chevron_forward), + contentDescription = null, + colorFilter = androidx.compose.ui.graphics.ColorFilter.tint( + colorPalette.textSecondary + ), + modifier = Modifier.size(16.dp) + ) + } + ) + + if (!isLocal) onGoToAlbum?.let { onGoToAlbum -> + albumInfo?.let { (albumId) -> + MenuEntry( + icon = R.drawable.disc, + text = stringResource(R.string.go_to_album), + onClick = { + onDismiss() + onGoToAlbum(albumId) + } + ) + } + } + + if (!isLocal) onGoToArtist?.let { onGoToArtist -> + artistsInfo?.forEach { (authorId, authorName) -> + authorName?.let { name -> MenuEntry( icon = R.drawable.person, - text = "Больше от $authorName", + text = stringResource(R.string.format_go_to_artist, name), onClick = { onDismiss() onGoToArtist(authorId) @@ -687,47 +708,68 @@ fun MediaItemMenu( ) } } + } - onRemoveFromQueue?.let { onRemoveFromQueue -> - MenuEntry( - icon = R.drawable.trash, - text = "Убрать из очереди", - onClick = { - onDismiss() - onRemoveFromQueue() - } - ) + if (!isLocal) MenuEntry( + icon = R.drawable.play, + text = stringResource(R.string.watch_on_youtube), + onClick = { + onDismiss() + playerServiceBinder?.player?.pause() + uriHandler.openUri("https://youtube.com/watch?v=${mediaItem.mediaId}") } + ) - onRemoveFromPlaylist?.let { onRemoveFromPlaylist -> - MenuEntry( - icon = R.drawable.trash, - text = "Удалить из плейлиста", - onClick = { - onDismiss() - onRemoveFromPlaylist() - } - ) + if (!isLocal) MenuEntry( + icon = R.drawable.musical_notes, + text = stringResource(R.string.open_in_youtube_music), + onClick = { + onDismiss() + playerServiceBinder?.player?.pause() + if (!launchYouTubeMusic(context, "watch?v=${mediaItem.mediaId}")) + context.toast(context.getString(R.string.youtube_music_not_installed)) } + ) - onHideFromDatabase?.let { onHideFromDatabase -> - MenuEntry( - icon = R.drawable.trash, - text = "Скрыть", - onClick = onHideFromDatabase - ) - } + onRemoveFromQueue?.let { onRemoveFromQueue -> + MenuEntry( + icon = R.drawable.trash, + text = stringResource(R.string.remove_from_queue), + onClick = { + onDismiss() + onRemoveFromQueue() + } + ) + } - onRemoveFromQuickPicks?.let { - MenuEntry( - icon = R.drawable.trash, - text = "Скрыть из \"Обзора\"", - onClick = { - onDismiss() - onRemoveFromQuickPicks() - } - ) - } + onRemoveFromPlaylist?.let { onRemoveFromPlaylist -> + MenuEntry( + icon = R.drawable.trash, + text = stringResource(R.string.remove_from_playlist), + onClick = { + onDismiss() + onRemoveFromPlaylist() + } + ) + } + + if (!isLocal) onHideFromDatabase?.let { onHideFromDatabase -> + MenuEntry( + icon = R.drawable.trash, + text = stringResource(R.string.hide), + onClick = onHideFromDatabase + ) + } + + if (!isLocal) onRemoveFromQuickPicks?.let { + MenuEntry( + icon = R.drawable.trash, + text = stringResource(R.string.hide_from_quick_picks), + onClick = { + onDismiss() + onRemoveFromQuickPicks() + } + ) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt index 1c28bf9..bf71e7e 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Menu.kt @@ -13,13 +13,16 @@ import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.Shape import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import it.hamy.muza.ui.styling.LocalAppearance @@ -29,28 +32,26 @@ import it.hamy.muza.utils.secondary @Composable inline fun Menu( modifier: Modifier = Modifier, + shape: Shape = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp), content: @Composable ColumnScope.() -> Unit -) { - val (colorPalette) = LocalAppearance.current - - Column( - modifier = modifier - .padding(top = 48.dp) - .verticalScroll(rememberScrollState()) - .fillMaxWidth() - .background(colorPalette.background1) - .padding(top = 2.dp) - .padding(vertical = 8.dp) - .navigationBarsPadding(), - content = content - ) -} +) = Column( + modifier = modifier + .fillMaxWidth() + .clip(shape) + .verticalScroll(rememberScrollState()) + .background(LocalAppearance.current.colorPalette.background1) + .padding(top = 2.dp) + .padding(vertical = 8.dp) + .navigationBarsPadding(), + content = content +) @Composable fun MenuEntry( @DrawableRes icon: Int, text: String, onClick: () -> Unit, + modifier: Modifier = Modifier, secondaryText: String? = null, enabled: Boolean = true, trailingContent: (@Composable () -> Unit)? = null @@ -60,7 +61,7 @@ fun MenuEntry( Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(24.dp), - modifier = Modifier + modifier = modifier .clickable(enabled = enabled, onClick = onClick) .fillMaxWidth() .alpha(if (enabled) 1f else 0.4f) @@ -70,8 +71,7 @@ fun MenuEntry( painter = painterResource(icon), contentDescription = null, colorFilter = ColorFilter.tint(colorPalette.text), - modifier = Modifier - .size(15.dp) + modifier = Modifier.size(15.dp) ) Column( diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt index f4377ae..28590ae 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/NavigationRail.kt @@ -54,7 +54,8 @@ inline fun NavigationRail( val isLandscape = isLandscape val paddingValues = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.Start).asPaddingValues() + .only(WindowInsetsSides.Vertical + WindowInsetsSides.Start) + .asPaddingValues() Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -66,8 +67,9 @@ inline fun NavigationRail( contentAlignment = Alignment.TopCenter, modifier = Modifier .size( - width = if (isLandscape) Dimensions.navigationRailWidthLandscape else Dimensions.navigationRailWidth, - height = Dimensions.headerHeight + width = if (isLandscape) Dimensions.navigationRail.widthLandscape + else Dimensions.navigationRail.width, + height = Dimensions.items.headerHeight ) ) { Image( @@ -76,7 +78,7 @@ inline fun NavigationRail( colorFilter = ColorFilter.tint(colorPalette.textSecondary), modifier = Modifier .offset( - x = if (isLandscape) 0.dp else Dimensions.navigationRailIconOffset, + x = if (isLandscape) 0.dp else Dimensions.navigationRail.iconOffset, y = 48.dp ) .clip(CircleShape) @@ -89,7 +91,7 @@ inline fun NavigationRail( Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .width(if (isLandscape) Dimensions.navigationRailWidthLandscape else Dimensions.navigationRailWidth) + .width(if (isLandscape) Dimensions.navigationRail.widthLandscape else Dimensions.navigationRail.width) ) { val transition = updateTransition(targetState = tabIndex, label = null) @@ -114,7 +116,7 @@ inline fun NavigationRail( translationX = (1f - dothAlpha) * -48.dp.toPx() rotationZ = if (isLandscape) 0f else -90f } - .size(Dimensions.navigationRailIconOffset * 2) + .size(Dimensions.navigationRail.iconOffset * 2) ) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PlaylistInfo.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PlaylistInfo.kt new file mode 100644 index 0000000..edd2165 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PlaylistInfo.kt @@ -0,0 +1,75 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import it.hamy.innertube.Innertube +import it.hamy.muza.models.Album +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.semiBold + +@Composable +fun PlaylistInfo( + description: String?, + year: String?, + otherInfo: String?, + modifier: Modifier = Modifier +) { + val (_, typography) = LocalAppearance.current + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = modifier.padding(horizontal = 8.dp) + ) { + otherInfo?.let { info -> + BasicText( + text = info, + style = typography.s.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + softWrap = false + ) + } + + year?.let { year -> + BasicText( + text = year, + style = typography.s.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + softWrap = false + ) + } + + description?.let { description -> + Attribution(text = description) + } + } +} + +@Composable +fun PlaylistInfo( + playlist: Innertube.PlaylistOrAlbumPage?, + modifier: Modifier = Modifier +) = PlaylistInfo( + description = playlist?.description, + year = playlist?.year, + otherInfo = playlist?.otherInfo, + modifier = modifier +) + +@Composable +fun PlaylistInfo( + playlist: Album?, + modifier: Modifier = Modifier +) = PlaylistInfo( + description = playlist?.description, + year = playlist?.year, + otherInfo = playlist?.otherInfo, + modifier = modifier +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt index 6bc493c..e99365b 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/PrimaryButton.kt @@ -22,7 +22,7 @@ fun PrimaryButton( onClick: () -> Unit, @DrawableRes iconId: Int, modifier: Modifier = Modifier, - enabled: Boolean = true, + enabled: Boolean = true ) { val (colorPalette) = LocalAppearance.current diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ProgressIndicator.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ProgressIndicator.kt new file mode 100644 index 0000000..3ad9e91 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ProgressIndicator.kt @@ -0,0 +1,49 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.material3.ProgressIndicatorDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.StrokeCap +import it.hamy.muza.ui.styling.LocalAppearance + +@Composable +fun CircularProgressIndicator( + modifier: Modifier = Modifier, + progress: Float? = null, + strokeCap: StrokeCap? = null +) { + val (colorPalette) = LocalAppearance.current + + if (progress == null) androidx.compose.material3.CircularProgressIndicator( + modifier = modifier, + color = colorPalette.accent, + strokeCap = strokeCap ?: ProgressIndicatorDefaults.CircularIndeterminateStrokeCap + ) else androidx.compose.material3.CircularProgressIndicator( + modifier = modifier, + color = colorPalette.accent, + strokeCap = strokeCap ?: ProgressIndicatorDefaults.CircularDeterminateStrokeCap, + progress = { progress } + ) +} + +@Composable +fun LinearProgressIndicator( + modifier: Modifier = Modifier, + progress: Float? = null, + strokeCap: StrokeCap = ProgressIndicatorDefaults.LinearStrokeCap +) { + val (colorPalette) = LocalAppearance.current + + if (progress == null) androidx.compose.material3.LinearProgressIndicator( + modifier = modifier, + color = colorPalette.accent, + trackColor = colorPalette.background1, + strokeCap = strokeCap + ) else androidx.compose.material3.LinearProgressIndicator( + modifier = modifier, + color = colorPalette.accent, + trackColor = colorPalette.background1, + strokeCap = strokeCap, + progress = { progress } + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ReorderHandle.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ReorderHandle.kt new file mode 100644 index 0000000..34b54c3 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/ReorderHandle.kt @@ -0,0 +1,28 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import it.hamy.compose.reordering.ReorderingState +import it.hamy.compose.reordering.reorder +import it.hamy.muza.R +import it.hamy.muza.ui.styling.LocalAppearance + +@Composable +fun ReorderHandle( + reorderingState: ReorderingState, + index: Int, + modifier: Modifier = Modifier +) = IconButton( + icon = R.drawable.reorder, + color = LocalAppearance.current.colorPalette.textDisabled, + indication = null, + onClick = {}, + modifier = modifier + .reorder( + reorderingState = reorderingState, + index = index + ) + .size(18.dp) +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt index 0944c05..eea43de 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Scaffold.kt @@ -1,13 +1,12 @@ package it.hamy.muza.ui.components.themed import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope +import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.AnimatedVisibilityScope -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.Spring import androidx.compose.animation.core.VisibilityThreshold import androidx.compose.animation.core.spring -import androidx.compose.animation.with +import androidx.compose.animation.togetherWith import androidx.compose.foundation.background import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row @@ -17,7 +16,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.IntOffset import it.hamy.muza.ui.styling.LocalAppearance -@ExperimentalAnimationApi @Composable fun Scaffold( topIconButtonId: Int, @@ -47,8 +45,8 @@ fun Scaffold( targetState = tabIndex, transitionSpec = { val slideDirection = when (targetState > initialState) { - true -> AnimatedContentScope.SlideDirection.Up - false -> AnimatedContentScope.SlideDirection.Down + true -> AnimatedContentTransitionScope.SlideDirection.Up + false -> AnimatedContentTransitionScope.SlideDirection.Down } val animationSpec = spring( @@ -57,10 +55,11 @@ fun Scaffold( visibilityThreshold = IntOffset.VisibilityThreshold ) - slideIntoContainer(slideDirection, animationSpec) with + slideIntoContainer(slideDirection, animationSpec) togetherWith slideOutOfContainer(slideDirection, animationSpec) }, - content = content + content = content, + label = "" ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt index 9d9cb73..430feba 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryButton.kt @@ -22,7 +22,7 @@ fun SecondaryButton( onClick: () -> Unit, @DrawableRes iconId: Int, modifier: Modifier = Modifier, - enabled: Boolean = true, + enabled: Boolean = true ) { val (colorPalette) = LocalAppearance.current diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt index 36ce6fe..a2cc141 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/SecondaryTextButton.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.primaryButton @@ -25,7 +26,7 @@ fun SecondaryTextButton( BasicText( text = text, - style = typography.xxs.medium, + style = typography.xxs.medium.copy(textAlign = TextAlign.Center), modifier = modifier .clip(RoundedCornerShape(16.dp)) .clickable(enabled = enabled, onClick = onClick) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Slider.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Slider.kt new file mode 100644 index 0000000..aa00c44 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Slider.kt @@ -0,0 +1,33 @@ +package it.hamy.muza.ui.components.themed + +import androidx.annotation.IntRange +import androidx.compose.material3.SliderDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import it.hamy.muza.ui.styling.LocalAppearance + +@Composable +fun Slider( + state: Float, + setState: (Float) -> Unit, + onSlideCompleted: () -> Unit, + range: ClosedFloatingPointRange, + modifier: Modifier = Modifier, + @IntRange(from = 0) steps: Int = 0 +) { + val (colorPalette) = LocalAppearance.current + + androidx.compose.material3.Slider( + value = state, + onValueChange = setState, + onValueChangeFinished = onSlideCompleted, + valueRange = range, + modifier = modifier, + steps = steps, + colors = SliderDefaults.colors( + thumbColor = colorPalette.onAccent, + activeTrackColor = colorPalette.accent, + inactiveTrackColor = colorPalette.text.copy(alpha = 0.75f) + ) + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt index 131dfc7..664991a 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/Switch.kt @@ -20,7 +20,7 @@ import it.hamy.muza.utils.drawCircle @Composable fun Switch( isChecked: Boolean, - modifier: Modifier = Modifier, + modifier: Modifier = Modifier ) { val (colorPalette) = LocalAppearance.current @@ -38,13 +38,10 @@ fun Switch( if (it) 36.dp else 12.dp } - Canvas( - modifier = modifier - .size(width = 48.dp, height = 24.dp) - ) { + Canvas(modifier = modifier.size(width = 48.dp, height = 24.dp)) { drawRoundRect( color = backgroundColor, - cornerRadius = CornerRadius(x = 12.dp.toPx(), y = 12.dp.toPx()), + cornerRadius = CornerRadius(x = 12.dp.toPx(), y = 12.dp.toPx()) ) drawCircle( diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextField.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextField.kt new file mode 100644 index 0000000..e4bf387 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextField.kt @@ -0,0 +1,143 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.text.BasicText +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.text.TextLayoutResult +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.text.style.TextOverflow +import it.hamy.muza.ui.styling.Appearance +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold + +@Composable +fun ColumnScope.TextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + readOnly: Boolean = false, + appearance: Appearance = LocalAppearance.current, + textStyle: TextStyle = appearance.typography.xs.semiBold, + singleLine: Boolean = false, + keyboardActions: KeyboardActions = KeyboardActions.Default, + keyboardOptions: KeyboardOptions = KeyboardOptions( + imeAction = if (singleLine) ImeAction.Done else ImeAction.None + ), + minLines: Int = 1, + maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE, + visualTransformation: VisualTransformation = VisualTransformation.None, + onTextLayout: (TextLayoutResult) -> Unit = { }, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + hintText: String? = null +) = BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier, + enabled = enabled, + readOnly = readOnly, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + textStyle = textStyle, + singleLine = singleLine, + maxLines = maxLines, + minLines = minLines, + visualTransformation = visualTransformation, + onTextLayout = onTextLayout, + interactionSource = interactionSource, + cursorBrush = SolidColor(appearance.colorPalette.text), + decorationBox = { innerTextField -> + hintText?.let { text -> + Box(modifier = Modifier.weight(1f)) { + this@TextField.AnimatedVisibility( + visible = value.isEmpty(), + enter = fadeIn(tween(100)), + exit = fadeOut(tween(100)) + ) { + BasicText( + text = text, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = textStyle.secondary + ) + } + } + } + + innerTextField() + } +) + +@Composable +fun RowScope.TextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + readOnly: Boolean = false, + appearance: Appearance = LocalAppearance.current, + textStyle: TextStyle = appearance.typography.xs.semiBold, + singleLine: Boolean = false, + keyboardActions: KeyboardActions = KeyboardActions.Default, + keyboardOptions: KeyboardOptions = KeyboardOptions( + imeAction = if (singleLine) ImeAction.Done else ImeAction.None + ), + minLines: Int = 1, + maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE, + visualTransformation: VisualTransformation = VisualTransformation.None, + onTextLayout: (TextLayoutResult) -> Unit = { }, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + hintText: String? = null +) = BasicTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier, + enabled = enabled, + readOnly = readOnly, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + textStyle = textStyle, + singleLine = singleLine, + maxLines = maxLines, + minLines = minLines, + visualTransformation = visualTransformation, + onTextLayout = onTextLayout, + interactionSource = interactionSource, + cursorBrush = SolidColor(appearance.colorPalette.text), + decorationBox = { innerTextField -> + hintText?.let { text -> + Box(modifier = Modifier.weight(1f)) { + this@TextField.AnimatedVisibility( + visible = value.isEmpty(), + enter = fadeIn(tween(100)), + exit = fadeOut(tween(100)) + ) { + BasicText( + text = text, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = textStyle.secondary + ) + } + } + } + + innerTextField() + } +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt index c86a2be..5a81369 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextPlaceholder.kt @@ -18,12 +18,10 @@ import kotlin.random.Random fun TextPlaceholder( modifier: Modifier = Modifier, color: Color = LocalAppearance.current.colorPalette.shimmer -) { - Spacer( - modifier = modifier - .padding(vertical = 4.dp) - .background(color) - .fillMaxWidth(remember { 0.25f + Random.nextFloat() * 0.5f }) - .height(16.dp) - ) -} +) = Spacer( + modifier = modifier + .padding(vertical = 4.dp) + .background(color) + .fillMaxWidth(remember { 0.25f + Random.nextFloat() * 0.5f }) + .height(16.dp) +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextToggle.kt b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextToggle.kt new file mode 100644 index 0000000..00219ad --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/components/themed/TextToggle.kt @@ -0,0 +1,68 @@ +package it.hamy.muza.ui.components.themed + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.ContentTransform +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import it.hamy.muza.R +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.medium + +@Composable +fun TextToggle( + state: Boolean, + toggleState: () -> Unit, + name: String, + modifier: Modifier = Modifier, + onLabel: String = stringResource(R.string.on_label), + offLabel: String = stringResource(R.string.off_label) +) { + val (colorPalette, typography) = LocalAppearance.current + + Row( + modifier = modifier + .clip(RoundedCornerShape(16.dp)) + .clickable { toggleState() } + .background(colorPalette.background1) + .padding(horizontal = 16.dp, vertical = 8.dp) + .animateContentSize() + ) { + BasicText( + text = "$name ", + style = typography.xxs.medium + ) + + AnimatedContent( + targetState = state, + transitionSpec = { + val slideDirection = + if (targetState) AnimatedContentTransitionScope.SlideDirection.Up + else AnimatedContentTransitionScope.SlideDirection.Down + + ContentTransform( + targetContentEnter = slideIntoContainer(slideDirection) + fadeIn(), + initialContentExit = slideOutOfContainer(slideDirection) + fadeOut() + ) + }, + label = "" + ) { + BasicText( + text = if (it) onLabel else offLabel, + style = typography.xxs.medium + ) + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt index 56d60cb..d9a36df 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/AlbumItem.kt @@ -13,54 +13,47 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage +import it.hamy.innertube.Innertube import it.hamy.muza.models.Album import it.hamy.muza.ui.components.themed.TextPlaceholder import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.px import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.thumbnail -import it.hamy.innertube.Innertube @Composable fun AlbumItem( album: Album, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, alternative: Boolean = false -) { - AlbumItem( - thumbnailUrl = album.thumbnailUrl, - title = album.title, - authors = album.authorsText, - year = album.year, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - alternative = alternative, - modifier = modifier - ) -} +) = AlbumItem( + thumbnailUrl = album.thumbnailUrl, + title = album.title, + authors = album.authorsText, + year = album.year, + thumbnailSize = thumbnailSize, + alternative = alternative, + modifier = modifier +) @Composable fun AlbumItem( album: Innertube.AlbumItem, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, alternative: Boolean = false -) { - AlbumItem( - thumbnailUrl = album.thumbnail?.url, - title = album.info?.name, - authors = album.authors?.joinToString("") { it.name ?: "" }, - year = album.year, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - alternative = alternative, - modifier = modifier - ) -} +) = AlbumItem( + thumbnailUrl = album.thumbnail?.url, + title = album.info?.name, + authors = album.authors?.joinToString("") { it.name.orEmpty() }, + year = album.year, + thumbnailSize = thumbnailSize, + alternative = alternative, + modifier = modifier +) @Composable fun AlbumItem( @@ -68,88 +61,75 @@ fun AlbumItem( title: String?, authors: String?, year: String?, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, alternative: Boolean = false +) = ItemContainer( + alternative = alternative, + thumbnailSize = thumbnailSize, + modifier = modifier ) { - val (_, typography, thumbnailShape) = LocalAppearance.current + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier - ) { - AsyncImage( - model = thumbnailUrl?.thumbnail(thumbnailSizePx), - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = Modifier - .clip(thumbnailShape) - .size(thumbnailSizeDp) + AsyncImage( + model = thumbnailUrl?.thumbnail(thumbnailSize.px), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .clip(thumbnailShape) + .size(thumbnailSize) + ) + + ItemInfoContainer { + BasicText( + text = title.orEmpty(), + style = typography.xs.semiBold, + maxLines = if (alternative) 1 else 2, + overflow = TextOverflow.Ellipsis ) - ItemInfoContainer { + if (!alternative) authors?.let { BasicText( - text = title ?: "", - style = typography.xs.semiBold, - maxLines = if (alternative) 1 else 2, - overflow = TextOverflow.Ellipsis, - ) - - if (!alternative) { - authors?.let { - BasicText( - text = authors, - style = typography.xs.semiBold.secondary, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) - } - } - - BasicText( - text = year ?: "", - style = typography.xxs.semiBold.secondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(top = 4.dp) + text = authors, + style = typography.xs.semiBold.secondary, + maxLines = 2, + overflow = TextOverflow.Ellipsis ) } + + BasicText( + text = year.orEmpty(), + style = typography.xxs.semiBold.secondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.padding(top = 4.dp) + ) } } @Composable fun AlbumItemPlaceholder( - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, alternative: Boolean = false +) = ItemContainer( + alternative = alternative, + thumbnailSize = thumbnailSize, + modifier = modifier ) { - val (colorPalette, _, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier - ) { - Spacer( - modifier = Modifier - .background(color = colorPalette.shimmer, shape = thumbnailShape) - .size(thumbnailSizeDp) - ) + Spacer( + modifier = Modifier + .background(color = colorPalette.shimmer, shape = thumbnailShape) + .size(thumbnailSize) + ) - ItemInfoContainer { - TextPlaceholder() - - if (!alternative) { - TextPlaceholder() - } - - TextPlaceholder( - modifier = Modifier - .padding(top = 4.dp) - ) - } + ItemInfoContainer { + TextPlaceholder() + if (!alternative) TextPlaceholder() + TextPlaceholder(modifier = Modifier.padding(top = 4.dp)) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt index f11f950..82ffb69 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/ArtistItem.kt @@ -15,84 +15,76 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage +import it.hamy.innertube.Innertube import it.hamy.muza.models.Artist import it.hamy.muza.ui.components.themed.TextPlaceholder import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.px import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.thumbnail -import it.hamy.innertube.Innertube @Composable fun ArtistItem( artist: Artist, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - ArtistItem( - thumbnailUrl = artist.thumbnailUrl, - name = artist.name, - subscribersCount = null, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - alternative = alternative - ) -} + alternative: Boolean = false +) = ArtistItem( + thumbnailUrl = artist.thumbnailUrl, + name = artist.name, + subscribersCount = null, + thumbnailSize = thumbnailSize, + modifier = modifier, + alternative = alternative +) @Composable fun ArtistItem( artist: Innertube.ArtistItem, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - ArtistItem( - thumbnailUrl = artist.thumbnail?.url, - name = artist.info?.name, - subscribersCount = artist.subscribersCountText, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - alternative = alternative - ) -} + alternative: Boolean = false +) = ArtistItem( + thumbnailUrl = artist.thumbnail?.url, + name = artist.info?.name, + subscribersCount = artist.subscribersCountText, + thumbnailSize = thumbnailSize, + modifier = modifier, + alternative = alternative +) @Composable fun ArtistItem( thumbnailUrl: String?, name: String?, subscribersCount: String?, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, + alternative: Boolean = false ) { val (_, typography) = LocalAppearance.current ItemContainer( alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = thumbnailSize, horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier ) { AsyncImage( - model = thumbnailUrl?.thumbnail(thumbnailSizePx), + model = thumbnailUrl?.thumbnail(thumbnailSize.px), contentDescription = null, modifier = Modifier .clip(CircleShape) - .requiredSize(thumbnailSizeDp) + .requiredSize(thumbnailSize) ) ItemInfoContainer( - horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start, + horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start ) { BasicText( - text = name ?: "", + text = name.orEmpty(), style = typography.xs.semiBold, maxLines = if (alternative) 1 else 2, overflow = TextOverflow.Ellipsis @@ -104,8 +96,7 @@ fun ArtistItem( style = typography.xxs.semiBold.secondary, maxLines = 1, overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(top = 4.dp) + modifier = Modifier.padding(top = 4.dp) ) } } @@ -114,32 +105,29 @@ fun ArtistItem( @Composable fun ArtistItemPlaceholder( - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, + alternative: Boolean = false ) { val (colorPalette) = LocalAppearance.current ItemContainer( alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = thumbnailSize, horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier ) { Spacer( modifier = Modifier .background(color = colorPalette.shimmer, shape = CircleShape) - .size(thumbnailSizeDp) + .size(thumbnailSize) ) ItemInfoContainer( - horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start, + horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start ) { TextPlaceholder() - TextPlaceholder( - modifier = Modifier - .padding(top = 4.dp) - ) + TextPlaceholder(modifier = Modifier.padding(top = 4.dp)) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt index 4c65e05..35e1c17 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/ItemContainer.kt @@ -17,51 +17,40 @@ import it.hamy.muza.ui.styling.Dimensions @Composable inline fun ItemContainer( alternative: Boolean, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, horizontalAlignment: Alignment.Horizontal = Alignment.Start, verticalAlignment: Alignment.Vertical = Alignment.CenterVertically, content: @Composable (centeredModifier: Modifier) -> Unit -) { - if (alternative) { - Column( - horizontalAlignment = horizontalAlignment, - verticalArrangement = Arrangement.spacedBy(12.dp), - modifier = modifier - .padding(vertical = Dimensions.itemsVerticalPadding, horizontal = 16.dp) - .width(thumbnailSizeDp) - ) { - content( - centeredModifier = Modifier - .align(Alignment.CenterHorizontally) - ) - } - } else { - Row( - verticalAlignment = verticalAlignment, - horizontalArrangement = Arrangement.spacedBy(12.dp), - modifier = modifier - .padding(vertical = Dimensions.itemsVerticalPadding, horizontal = 16.dp) - .fillMaxWidth() - ) { - content( - centeredModifier = Modifier - .align(Alignment.CenterVertically) - ) - } - } -} +) = if (alternative) Column( + horizontalAlignment = horizontalAlignment, + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = modifier + .padding( + vertical = Dimensions.items.verticalPadding, + horizontal = Dimensions.items.horizontalPadding + ) + .width(thumbnailSize) +) { content(Modifier.align(Alignment.CenterHorizontally)) } +else Row( + verticalAlignment = verticalAlignment, + horizontalArrangement = Arrangement.spacedBy(12.dp), + modifier = modifier + .padding( + vertical = Dimensions.items.verticalPadding, + horizontal = Dimensions.items.horizontalPadding + ) + .fillMaxWidth() +) { content(Modifier.align(Alignment.CenterVertically)) } @Composable inline fun ItemInfoContainer( modifier: Modifier = Modifier, horizontalAlignment: Alignment.Horizontal = Alignment.Start, content: @Composable ColumnScope.() -> Unit -) { - Column( - horizontalAlignment = horizontalAlignment, - verticalArrangement = Arrangement.spacedBy(4.dp), - modifier = modifier, - content = content - ) -} +) = Column( + horizontalAlignment = horizontalAlignment, + verticalArrangement = Arrangement.spacedBy(4.dp), + modifier = modifier, + content = content +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt index 5d7eeb5..8788651 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/PlaylistItem.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage +import it.hamy.innertube.Innertube import it.hamy.muza.Database import it.hamy.muza.models.PlaylistPreview import it.hamy.muza.ui.components.themed.TextPlaceholder @@ -36,10 +37,10 @@ import it.hamy.muza.ui.styling.overlay import it.hamy.muza.ui.styling.shimmer import it.hamy.muza.utils.color import it.hamy.muza.utils.medium +import it.hamy.muza.utils.px import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.thumbnail -import it.hamy.innertube.Innertube import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map @@ -50,82 +51,74 @@ fun PlaylistItem( colorTint: Color, name: String?, songCount: Int?, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - PlaylistItem( - thumbnailContent = { - Image( - painter = painterResource(icon), - contentDescription = null, - colorFilter = ColorFilter.tint(colorTint), - modifier = Modifier - .align(Alignment.Center) - .size(24.dp) - ) - }, - songCount = songCount, - name = name, - channelName = null, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - alternative = alternative - ) -} + alternative: Boolean = false +) = PlaylistItem( + thumbnailContent = { + Image( + painter = painterResource(icon), + contentDescription = null, + colorFilter = ColorFilter.tint(colorTint), + modifier = Modifier + .align(Alignment.Center) + .size(24.dp) + ) + }, + songCount = songCount, + name = name, + channelName = null, + thumbnailSize = thumbnailSize, + modifier = modifier, + alternative = alternative +) @Composable fun PlaylistItem( playlist: PlaylistPreview, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, + alternative: Boolean = false ) { + val thumbnailSizePx = thumbnailSize.px val thumbnails by remember { - Database.playlistThumbnailUrls(playlist.playlist.id).distinctUntilChanged().map { - it.map { url -> - url.thumbnail(thumbnailSizePx / 2) + Database + .playlistThumbnailUrls(playlist.playlist.id) + .distinctUntilChanged() + .map { urls -> + urls.map { it.thumbnail(thumbnailSizePx / 2) } } - } }.collectAsState(initial = emptyList(), context = Dispatchers.IO) PlaylistItem( thumbnailContent = { - if (thumbnails.toSet().size == 1) { - AsyncImage( - model = thumbnails.first().thumbnail(thumbnailSizePx), - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = it - ) - } else { - Box( - modifier = it - .fillMaxSize() - ) { - listOf( - Alignment.TopStart, - Alignment.TopEnd, - Alignment.BottomStart, - Alignment.BottomEnd - ).forEachIndexed { index, alignment -> - AsyncImage( - model = thumbnails.getOrNull(index), - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = Modifier - .align(alignment) - .size(thumbnailSizeDp / 2) - ) - } + if (thumbnails.toSet().size == 1) AsyncImage( + model = thumbnails.first().thumbnail(thumbnailSizePx), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = it + ) else Box(modifier = it.fillMaxSize()) { + listOf( + Alignment.TopStart, + Alignment.TopEnd, + Alignment.BottomStart, + Alignment.BottomEnd + ).forEachIndexed { index, alignment -> + AsyncImage( + model = thumbnails.getOrNull(index), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .align(alignment) + .size(thumbnailSize / 2) + ) } } }, songCount = playlist.songCount, name = playlist.playlist.name, channelName = null, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = thumbnailSize, modifier = modifier, alternative = alternative ) @@ -134,22 +127,18 @@ fun PlaylistItem( @Composable fun PlaylistItem( playlist: Innertube.PlaylistItem, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - PlaylistItem( - thumbnailUrl = playlist.thumbnail?.url, - songCount = playlist.songCount, - name = playlist.info?.name, - channelName = playlist.channel?.name, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - alternative = alternative - ) -} + alternative: Boolean = false +) = PlaylistItem( + thumbnailUrl = playlist.thumbnail?.url, + songCount = playlist.songCount, + name = playlist.info?.name, + channelName = playlist.channel?.name, + thumbnailSize = thumbnailSize, + modifier = modifier, + alternative = alternative +) @Composable fun PlaylistItem( @@ -157,28 +146,25 @@ fun PlaylistItem( songCount: Int?, name: String?, channelName: String?, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - PlaylistItem( - thumbnailContent = { - AsyncImage( - model = thumbnailUrl?.thumbnail(thumbnailSizePx), - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = it - ) - }, - songCount = songCount, - name = name, - channelName = channelName, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - alternative = alternative, - ) -} + alternative: Boolean = false +) = PlaylistItem( + thumbnailContent = { + AsyncImage( + model = thumbnailUrl?.thumbnail(thumbnailSize.px), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = it + ) + }, + songCount = songCount, + name = name, + channelName = channelName, + thumbnailSize = thumbnailSize, + modifier = modifier, + alternative = alternative +) @Composable fun PlaylistItem( @@ -186,89 +172,86 @@ fun PlaylistItem( songCount: Int?, name: String?, channelName: String?, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, -) { - val (colorPalette, typography, thumbnailShape) = LocalAppearance.current + alternative: Boolean = false +) = ItemContainer( + alternative = alternative, + thumbnailSize = thumbnailSize, + modifier = modifier +) { centeredModifier -> + val colorPalette = LocalAppearance.current.colorPalette + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier - ) { centeredModifier -> - Box( - modifier = centeredModifier - .clip(thumbnailShape) - .background(color = colorPalette.background1) - .requiredSize(thumbnailSizeDp) - ) { - thumbnailContent( - modifier = Modifier - .fillMaxSize() - ) + Box( + modifier = centeredModifier + .clip(thumbnailShape) + .background(color = colorPalette.background1) + .requiredSize(thumbnailSize) + ) { + thumbnailContent(Modifier.fillMaxSize()) - songCount?.let { - BasicText( - text = "$songCount", - style = typography.xxs.medium.color(colorPalette.onOverlay), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(all = 4.dp) - .background(color = colorPalette.overlay, shape = RoundedCornerShape(2.dp)) - .padding(horizontal = 4.dp, vertical = 2.dp) - .align(Alignment.BottomEnd) - ) - } - } - - ItemInfoContainer( - horizontalAlignment = if (alternative && channelName == null) Alignment.CenterHorizontally else Alignment.Start, - ) { + songCount?.let { BasicText( - text = name ?: "", - style = typography.xs.semiBold, - maxLines = 2, + text = "$songCount", + style = typography.xxs.medium.color(colorPalette.onOverlay), + maxLines = 1, overflow = TextOverflow.Ellipsis, + modifier = Modifier + .padding(all = 4.dp) + .background(color = colorPalette.overlay, shape = RoundedCornerShape(2.dp)) + .padding(horizontal = 4.dp, vertical = 2.dp) + .align(Alignment.BottomEnd) ) + } + } - channelName?.let { - BasicText( - text = channelName, - style = typography.xs.semiBold.secondary, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) - } + ItemInfoContainer( + horizontalAlignment = if (alternative && channelName == null) Alignment.CenterHorizontally + else Alignment.Start + ) { + BasicText( + text = name.orEmpty(), + style = typography.xs.semiBold, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + + channelName?.let { + BasicText( + text = channelName, + style = typography.xs.semiBold.secondary, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) } } } @Composable fun PlaylistItemPlaceholder( - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - alternative: Boolean = false, + alternative: Boolean = false +) = ItemContainer( + alternative = alternative, + thumbnailSize = thumbnailSize, + modifier = modifier ) { - val (colorPalette, _, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = alternative, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier + Spacer( + modifier = Modifier + .background(color = colorPalette.shimmer, shape = thumbnailShape) + .size(thumbnailSize) + ) + + ItemInfoContainer( + horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start ) { - Spacer( - modifier = Modifier - .background(color = colorPalette.shimmer, shape = thumbnailShape) - .size(thumbnailSizeDp) - ) - - ItemInfoContainer( - horizontalAlignment = if (alternative) Alignment.CenterHorizontally else Alignment.Start, - ) { - TextPlaceholder() - TextPlaceholder() - } + TextPlaceholder() + TextPlaceholder() } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt index 426c846..ee9d2f2 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/SongItem.kt @@ -13,80 +13,75 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem import coil.compose.AsyncImage +import it.hamy.innertube.Innertube +import it.hamy.muza.models.Song import it.hamy.muza.ui.components.themed.TextPlaceholder import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.shimmer import it.hamy.muza.utils.medium +import it.hamy.muza.utils.px import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.thumbnail -import it.hamy.innertube.Innertube -import it.hamy.muza.models.Song @Composable fun SongItem( song: Innertube.SongItem, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier -) { - SongItem( - thumbnailUrl = song.thumbnail?.size(thumbnailSizePx), - title = song.info?.name, - authors = song.authors?.joinToString("") { it.name ?: "" }, - duration = song.durationText, - thumbnailSizeDp = thumbnailSizeDp, - modifier = modifier, - ) -} +) = SongItem( + modifier = modifier, + thumbnailUrl = song.thumbnail?.size(thumbnailSize.px), + title = song.info?.name, + authors = song.authors?.joinToString("") { it.name.orEmpty() }, + duration = song.durationText, + thumbnailSize = thumbnailSize +) @Composable fun SongItem( song: MediaItem, - thumbnailSizeDp: Dp, - thumbnailSizePx: Int, + thumbnailSize: Dp, modifier: Modifier = Modifier, onThumbnailContent: (@Composable BoxScope.() -> Unit)? = null, trailingContent: (@Composable () -> Unit)? = null -) { - SongItem( - thumbnailUrl = song.mediaMetadata.artworkUri.thumbnail(thumbnailSizePx)?.toString(), - title = song.mediaMetadata.title.toString(), - authors = song.mediaMetadata.artist.toString(), - duration = song.mediaMetadata.extras?.getString("durationText"), - thumbnailSizeDp = thumbnailSizeDp, - onThumbnailContent = onThumbnailContent, - trailingContent = trailingContent, - modifier = modifier, - ) -} +) = SongItem( + modifier = modifier, + thumbnailUrl = song.mediaMetadata.artworkUri.thumbnail(thumbnailSize.px)?.toString(), + title = song.mediaMetadata.title?.toString(), + authors = song.mediaMetadata.artist?.toString(), + duration = song.mediaMetadata.extras?.getString("durationText"), + thumbnailSize = thumbnailSize, + onThumbnailContent = onThumbnailContent, + trailingContent = trailingContent +) @Composable fun SongItem( song: Song, - thumbnailSizePx: Int, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - onThumbnailContent: (@Composable BoxScope.() -> Unit)? = null, - trailingContent: (@Composable () -> Unit)? = null -) { - SongItem( - thumbnailUrl = song.thumbnailUrl?.thumbnail(thumbnailSizePx), - title = song.title, - authors = song.artistsText, - duration = song.durationText, - thumbnailSizeDp = thumbnailSizeDp, - onThumbnailContent = onThumbnailContent, - trailingContent = trailingContent, - modifier = modifier, - ) -} + index: Int? = null, + onThumbnailContent: @Composable (BoxScope.() -> Unit)? = null, + trailingContent: @Composable (() -> Unit)? = null +) = SongItem( + modifier = modifier, + index = index, + thumbnailUrl = song.thumbnailUrl?.thumbnail(thumbnailSize.px), + title = song.title, + authors = song.artistsText, + duration = song.durationText, + thumbnailSize = thumbnailSize, + onThumbnailContent = onThumbnailContent, + trailingContent = trailingContent +) @Composable fun SongItem( @@ -94,25 +89,46 @@ fun SongItem( title: String?, authors: String?, duration: String?, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier, - onThumbnailContent: (@Composable BoxScope.() -> Unit)? = null, - trailingContent: (@Composable () -> Unit)? = null + index: Int? = null, + onThumbnailContent: @Composable (BoxScope.() -> Unit)? = null, + trailingContent: @Composable (() -> Unit)? = null ) { + val (colorPalette, typography) = LocalAppearance.current + SongItem( title = title, authors = authors, duration = duration, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = thumbnailSize, thumbnailContent = { - AsyncImage( - model = thumbnailUrl, - contentDescription = null, - contentScale = ContentScale.Crop, + Box( modifier = Modifier .clip(LocalAppearance.current.thumbnailShape) + .background(colorPalette.background1) .fillMaxSize() - ) + ) { + AsyncImage( + model = thumbnailUrl, + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier.fillMaxSize() + ) + + if (index != null) { + Box( + modifier = Modifier + .background(color = Color.Black.copy(alpha = 0.75f)) + .fillMaxSize() + ) + BasicText( + text = "${index + 1}", + style = typography.xs.semiBold.copy(color = Color.White), + modifier = Modifier.align(Alignment.Center) + ) + } + } onThumbnailContent?.invoke(this) }, @@ -123,59 +139,56 @@ fun SongItem( @Composable fun SongItem( - thumbnailContent: @Composable BoxScope.() -> Unit, title: String?, authors: String?, duration: String?, - thumbnailSizeDp: Dp, + thumbnailSize: Dp, + thumbnailContent: @Composable BoxScope.() -> Unit, modifier: Modifier = Modifier, - trailingContent: @Composable (() -> Unit)? = null, + trailingContent: @Composable (() -> Unit)? = null ) { val (_, typography) = LocalAppearance.current ItemContainer( alternative = false, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = thumbnailSize, modifier = modifier ) { Box( - modifier = Modifier - .size(thumbnailSizeDp) - ) { - thumbnailContent() - } + modifier = Modifier.size(thumbnailSize), + content = thumbnailContent + ) ItemInfoContainer { trailingContent?.let { Row(verticalAlignment = Alignment.CenterVertically) { BasicText( - text = title ?: "", + text = title.orEmpty(), style = typography.xs.semiBold, maxLines = 1, overflow = TextOverflow.Ellipsis, - modifier = Modifier - .weight(1f) + modifier = Modifier.weight(1f) ) it() } } ?: BasicText( - text = title ?: "", + text = title.orEmpty(), style = typography.xs.semiBold, maxLines = 1, - overflow = TextOverflow.Ellipsis, + overflow = TextOverflow.Ellipsis ) - Row(verticalAlignment = Alignment.CenterVertically) { - BasicText( - text = authors ?: "", - style = typography.xs.semiBold.secondary, - maxLines = 1, - overflow = TextOverflow.Clip, - modifier = Modifier - .weight(1f) - ) + authors?.let { + BasicText( + text = authors, + style = typography.xs.semiBold.secondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.weight(1f) + ) + } duration?.let { BasicText( @@ -183,8 +196,7 @@ fun SongItem( style = typography.xxs.secondary.medium, maxLines = 1, overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(top = 4.dp) + modifier = Modifier.padding(top = 4.dp) ) } } @@ -194,25 +206,24 @@ fun SongItem( @Composable fun SongItemPlaceholder( - thumbnailSizeDp: Dp, + thumbnailSize: Dp, modifier: Modifier = Modifier +) = ItemContainer( + alternative = false, + thumbnailSize = thumbnailSize, + modifier = modifier ) { - val (colorPalette, _, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = false, - thumbnailSizeDp =thumbnailSizeDp, - modifier = modifier - ) { - Spacer( - modifier = Modifier - .background(color = colorPalette.shimmer, shape = thumbnailShape) - .size(thumbnailSizeDp) - ) + Spacer( + modifier = Modifier + .background(color = colorPalette.shimmer, shape = thumbnailShape) + .size(thumbnailSize) + ) - ItemInfoContainer { - TextPlaceholder() - TextPlaceholder() - } + ItemInfoContainer { + TextPlaceholder() + TextPlaceholder() } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt b/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt index 8ac4272..f8989db 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/items/VideoItem.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage +import it.hamy.innertube.Innertube import it.hamy.muza.ui.components.themed.TextPlaceholder import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.onOverlay @@ -25,26 +26,23 @@ import it.hamy.muza.utils.color import it.hamy.muza.utils.medium import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold -import it.hamy.innertube.Innertube @Composable fun VideoItem( video: Innertube.VideoItem, - thumbnailHeightDp: Dp, - thumbnailWidthDp: Dp, + thumbnailWidth: Dp, + thumbnailHeight: Dp, modifier: Modifier = Modifier -) { - VideoItem( - thumbnailUrl = video.thumbnail?.url, - duration = video.durationText, - title = video.info?.name, - uploader = video.authors?.joinToString("") { it.name ?: "" }, - views = video.viewsText, - thumbnailHeightDp = thumbnailHeightDp, - thumbnailWidthDp = thumbnailWidthDp, - modifier = modifier - ) -} +) = VideoItem( + thumbnailUrl = video.thumbnail?.url, + duration = video.durationText, + title = video.info?.name, + uploader = video.authors?.joinToString("") { it.name.orEmpty() }, + views = video.viewsText, + thumbnailWidth = thumbnailWidth, + thumbnailHeight = thumbnailHeight, + modifier = modifier +) @Composable fun VideoItem( @@ -53,97 +51,92 @@ fun VideoItem( title: String?, uploader: String?, views: String?, - thumbnailHeightDp: Dp, - thumbnailWidthDp: Dp, + thumbnailWidth: Dp, + thumbnailHeight: Dp, modifier: Modifier = Modifier +) = ItemContainer( + alternative = false, + thumbnailSize = 0.dp, + modifier = modifier ) { - val (colorPalette, typography, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = false, - thumbnailSizeDp = 0.dp, - modifier = modifier - ) { - Box { - AsyncImage( - model = thumbnailUrl, - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = Modifier - .clip(thumbnailShape) - .size(width = thumbnailWidthDp, height = thumbnailHeightDp) - ) + Box { + AsyncImage( + model = thumbnailUrl, + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .clip(thumbnailShape) + .size(width = thumbnailWidth, height = thumbnailHeight) + ) - duration?.let { - BasicText( - text = duration, - style = typography.xxs.medium.color(colorPalette.onOverlay), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(all = 4.dp) - .background(color = colorPalette.overlay, shape = RoundedCornerShape(2.dp)) - .padding(horizontal = 4.dp, vertical = 2.dp) - .align(Alignment.BottomEnd) - ) - } - } - - ItemInfoContainer { + duration?.let { BasicText( - text = title ?: "", - style = typography.xs.semiBold, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) - - BasicText( - text = uploader ?: "", - style = typography.xs.semiBold.secondary, + text = duration, + style = typography.xxs.medium.color(colorPalette.onOverlay), maxLines = 1, overflow = TextOverflow.Ellipsis, + modifier = Modifier + .padding(all = 4.dp) + .background(color = colorPalette.overlay, shape = RoundedCornerShape(2.dp)) + .padding(horizontal = 4.dp, vertical = 2.dp) + .align(Alignment.BottomEnd) ) + } + } - views?.let { - BasicText( - text = views, - style = typography.xxs.medium.secondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier - .padding(top = 4.dp) - ) - } + ItemInfoContainer { + BasicText( + text = title.orEmpty(), + style = typography.xs.semiBold, + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + + BasicText( + text = uploader.orEmpty(), + style = typography.xs.semiBold.secondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + + views?.let { + BasicText( + text = views, + style = typography.xxs.medium.secondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.padding(top = 4.dp) + ) } } } @Composable fun VideoItemPlaceholder( - thumbnailHeightDp: Dp, - thumbnailWidthDp: Dp, + thumbnailWidth: Dp, + thumbnailHeight: Dp, modifier: Modifier = Modifier +) = ItemContainer( + alternative = false, + thumbnailSize = 0.dp, + modifier = modifier ) { - val (colorPalette, _, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val thumbnailShape = LocalAppearance.current.thumbnailShape - ItemContainer( - alternative = false, - thumbnailSizeDp = 0.dp, - modifier = modifier - ) { - Spacer( - modifier = Modifier - .background(color = colorPalette.shimmer, shape = thumbnailShape) - .size(width = thumbnailWidthDp, height = thumbnailHeightDp) - ) + Spacer( + modifier = Modifier + .background(color = colorPalette.shimmer, shape = thumbnailShape) + .size(width = thumbnailWidth, height = thumbnailHeight) + ) - ItemInfoContainer { - TextPlaceholder() - TextPlaceholder() - TextPlaceholder( - modifier = Modifier - .padding(top = 8.dp) - ) - } + ItemInfoContainer { + TextPlaceholder() + TextPlaceholder() + TextPlaceholder(modifier = Modifier.padding(top = 8.dp)) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/modifiers/FadingEdge.kt b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/FadingEdge.kt new file mode 100644 index 0000000..c1b67bc --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/FadingEdge.kt @@ -0,0 +1,46 @@ +package it.hamy.muza.ui.modifiers + +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.graphics.BlendMode +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer + +private fun Modifier.fadingEdge( + start: Boolean, + middle: Int, + end: Boolean, + alpha: Float, + isHorizontal: Boolean +) = this + .graphicsLayer(alpha = 0.99f) + .drawWithContent { + drawContent() + val gradient = buildList { + val transparentColor = Color(red = 0f, green = 0f, blue = 0f, alpha = 1f - alpha) + + add(if (start) transparentColor else Color.Black) + repeat(middle) { add(Color.Black) } + add(if (end) transparentColor else Color.Black) + } + drawRect( + brush = if (isHorizontal) Brush.horizontalGradient(gradient) + else Brush.verticalGradient(gradient), + blendMode = BlendMode.DstIn + ) + } + +fun Modifier.verticalFadingEdge( + top: Boolean = true, + middle: Int = 3, + bottom: Boolean = true, + alpha: Float = 1f +) = fadingEdge(start = top, middle = middle, end = bottom, alpha = alpha, isHorizontal = false) + +fun Modifier.horizontalFadingEdge( + left: Boolean = true, + middle: Int = 3, + right: Boolean = true, + alpha: Float = 1f +) = fadingEdge(start = left, middle = middle, end = right, alpha = alpha, isHorizontal = true) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/modifiers/PinchToggle.kt b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/PinchToggle.kt new file mode 100644 index 0000000..c6037e2 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/PinchToggle.kt @@ -0,0 +1,71 @@ +package it.hamy.muza.ui.modifiers + +import androidx.compose.foundation.gestures.awaitEachGesture +import androidx.compose.foundation.gestures.awaitFirstDown +import androidx.compose.foundation.gestures.calculateCentroidSize +import androidx.compose.foundation.gestures.calculateZoom +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.input.pointer.positionChanged +import androidx.compose.ui.util.fastAny +import androidx.compose.ui.util.fastForEach +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.isActive +import kotlin.math.abs + +@JvmInline +value class PinchDirection private constructor(private val out: Boolean) { + companion object { + val Out = PinchDirection(out = true) + val In = PinchDirection(out = false) + } + + fun reachedThreshold( + value: Float, + threshold: Float + ) = when (this) { + Out -> value >= threshold + In -> value <= threshold + else -> error("Unreachable") + } +} + +fun Modifier.pinchToToggle( + direction: PinchDirection, + threshold: Float, + key: Any? = Unit, + onPinch: (scale: Float) -> Unit +) = this.pointerInput(key) { + coroutineScope { + awaitEachGesture { + val touchSlop = viewConfiguration.touchSlop / 2 + var scale = 1f + var touchSlopReached = false + + awaitFirstDown(requireUnconsumed = false) + while (isActive) { + val event = awaitPointerEvent() + if (event.changes.fastAny { it.isConsumed }) break + if (!event.changes.fastAny { it.pressed }) continue + + scale *= event.calculateZoom() + if (!touchSlopReached) { + val centroidSize = event.calculateCentroidSize(useCurrent = false) + if (abs(1 - scale) * centroidSize > touchSlop) touchSlopReached = true + } + + if (touchSlopReached) event.changes.fastForEach { if (it.positionChanged()) it.consume() } + + if ( + direction.reachedThreshold( + value = scale, + threshold = threshold + ) + ) { + onPinch(scale) + break + } + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Pressable.kt b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Pressable.kt new file mode 100644 index 0000000..7c5003f --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Pressable.kt @@ -0,0 +1,22 @@ +package it.hamy.muza.ui.modifiers + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed + +fun Modifier.pressable(onPress: () -> Unit, onCancel: () -> Unit = {}, onRelease: () -> Unit) = + this.composed { + val interactionSource = remember { MutableInteractionSource() } + val isPressed = interactionSource.collectIsPressedAsState() + LaunchedEffect(isPressed.value) { + if (isPressed.value) onPress() + else onCancel() + } + clickable(interactionSource = interactionSource, indication = null) { + onRelease() + } + } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Swiping.kt b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Swiping.kt new file mode 100644 index 0000000..4902142 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/modifiers/Swiping.kt @@ -0,0 +1,241 @@ +package it.hamy.muza.ui.modifiers + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.AnimationSpec +import androidx.compose.animation.core.AnimationVector1D +import androidx.compose.animation.core.DecayAnimationSpec +import androidx.compose.animation.core.calculateTargetValue +import androidx.compose.animation.core.spring +import androidx.compose.animation.splineBasedDecay +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.awaitFirstDown +import androidx.compose.foundation.gestures.awaitHorizontalTouchSlopOrCancellation +import androidx.compose.foundation.gestures.awaitVerticalTouchSlopOrCancellation +import androidx.compose.foundation.gestures.horizontalDrag +import androidx.compose.foundation.gestures.verticalDrag +import androidx.compose.foundation.layout.offset +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.input.pointer.PointerInputChange +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.input.pointer.positionChange +import androidx.compose.ui.input.pointer.util.VelocityTracker +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import it.hamy.muza.utils.px +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlin.time.Duration + +@Stable +@JvmInline +value class SwipeState internal constructor( + private val offsetLazy: Lazy> = lazy { acquire() } +) { + internal val offset get() = offsetLazy.value + + private companion object { + private val animatables = mutableListOf>() + private val coroutineScope = CoroutineScope(Dispatchers.IO) + + fun acquire() = animatables.removeFirstOrNull() ?: Animatable(0f) + fun recycle(animatable: Animatable) { + coroutineScope.launch { + animatable.snapTo(0f) + animatables += animatable + } + } + } + + @Composable + fun calculateOffset(bounds: ClosedRange? = null) = + offset.value.px.dp.let { if (bounds == null) it else it.coerceIn(bounds) } + + internal fun recycle() = recycle(offset) +} + +@Composable +fun rememberSwipeState(key: Any?): SwipeState { + val state = remember(key) { SwipeState() } + DisposableEffect(Unit) { + onDispose { + state.recycle() + } + } + return state +} + +fun Modifier.onSwipe( + state: SwipeState? = null, + key: Any = Unit, + animateOffset: Boolean = false, + orientation: Orientation = Orientation.Horizontal, + delay: Duration = Duration.ZERO, + decay: Density.() -> DecayAnimationSpec = { splineBasedDecay(this) }, + animationSpec: AnimationSpec = spring(), + bounds: ClosedRange? = null, + disposable: Boolean = false, + onSwipeOut: suspend (animationJob: Job) -> Unit +) = onSwipe( + state = state, + key = key, + animateOffset = animateOffset, + onSwipeLeft = onSwipeOut, + onSwipeRight = onSwipeOut, + orientation = orientation, + delay = delay, + decay = decay, + animationSpec = animationSpec, + bounds = bounds, + disposable = disposable +) + +@Suppress("CyclomaticComplexMethod") +fun Modifier.onSwipe( + state: SwipeState? = null, + key: Any = Unit, + animateOffset: Boolean = false, + onSwipeLeft: suspend (animationJob: Job) -> Unit = { }, + onSwipeRight: suspend (animationJob: Job) -> Unit = { }, + orientation: Orientation = Orientation.Horizontal, + delay: Duration = Duration.ZERO, + decay: Density.() -> DecayAnimationSpec = { splineBasedDecay(this) }, + animationSpec: AnimationSpec = spring(), + bounds: ClosedRange? = null, + disposable: Boolean = false +) = this.composed { + val swipeState = state ?: rememberSwipeState(key) + + pointerInput(key) { + coroutineScope { + // fling loop, doesn't really offset anything but simulates the animation beforehand + while (isActive) { + val velocityTracker = VelocityTracker() + + awaitPointerEventScope { + val pointer = awaitFirstDown(requireUnconsumed = false).id + launch { swipeState.offset.snapTo(0f) } + + val onDrag: (PointerInputChange) -> Unit = { + val change = + if (orientation == Orientation.Horizontal) it.positionChange().x + else it.positionChange().y + + launch { swipeState.offset.snapTo(swipeState.offset.value + change) } + + velocityTracker.addPosition(it.uptimeMillis, it.position) + if (change != 0f) it.consume() + } + + if (orientation == Orientation.Horizontal) { + awaitHorizontalTouchSlopOrCancellation(pointer) { change, _ -> onDrag(change) } + ?: return@awaitPointerEventScope + horizontalDrag(pointer, onDrag) + } else { + awaitVerticalTouchSlopOrCancellation(pointer) { change, _ -> onDrag(change) } + ?: return@awaitPointerEventScope + verticalDrag(pointer, onDrag) + } + } + + // drag completed, calculate velocity + val targetOffset = decay().calculateTargetValue( + initialValue = swipeState.offset.value, + initialVelocity = velocityTracker.calculateVelocity() + .let { if (orientation == Orientation.Horizontal) it.x else it.y } + ) + val size = if (orientation == Orientation.Horizontal) size.width else size.height + + launch animationEnd@{ + when { + targetOffset >= size / 2 -> { + val animationJob = launch { + swipeState.offset.animateTo( + targetValue = size.toFloat(), + animationSpec = animationSpec + ) + } + delay(delay) + onSwipeRight(animationJob) + if (disposable) return@animationEnd swipeState.recycle() + } + + targetOffset <= -size / 2 -> { + val animationJob = launch { + swipeState.offset.animateTo( + targetValue = -size.toFloat(), + animationSpec = animationSpec + ) + } + delay(delay) + onSwipeLeft(animationJob) + if (disposable) return@animationEnd swipeState.recycle() + } + } + swipeState.offset.animateTo( + targetValue = 0f, + animationSpec = animationSpec + ) + } + } + } + }.let { modifier -> + when { + animateOffset && orientation == Orientation.Horizontal -> + modifier.offset(x = swipeState.calculateOffset(bounds = bounds)) + + animateOffset && orientation == Orientation.Vertical -> + modifier.offset(y = swipeState.calculateOffset(bounds = bounds)) + + else -> modifier + } + } +} + +fun Modifier.swipeToClose( + state: SwipeState? = null, + key: Any = Unit, + delay: Duration = Duration.ZERO, + decay: Density.() -> DecayAnimationSpec = { splineBasedDecay(this) }, + onClose: suspend (animationJob: Job) -> Unit +) = this.composed { + val swipeState = state ?: rememberSwipeState(key) + + val density = LocalDensity.current + + var currentWidth by remember { mutableIntStateOf(0) } + val currentWidthDp by remember { derivedStateOf { currentWidth.px.dp(density) } } + val bounds by remember { derivedStateOf { -currentWidthDp..0.dp } } + + this + .onSizeChanged { currentWidth = it.width } + .alpha((currentWidthDp + swipeState.calculateOffset(bounds = bounds)) / currentWidthDp) + .onSwipe( + state = swipeState, + key = key, + animateOffset = true, + disposable = true, + onSwipeLeft = onClose, + orientation = Orientation.Horizontal, + delay = delay, + decay = decay, + bounds = bounds + ) +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt index c10814c..d5e2a7e 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/Routes.kt @@ -1,32 +1,41 @@ package it.hamy.muza.ui.screens -import android.annotation.SuppressLint -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable +import io.ktor.http.Url import it.hamy.compose.routing.Route0 import it.hamy.compose.routing.Route1 +import it.hamy.compose.routing.Route3 import it.hamy.compose.routing.RouteHandlerScope import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.models.Mood import it.hamy.muza.ui.screens.album.AlbumScreen import it.hamy.muza.ui.screens.artist.ArtistScreen +import it.hamy.muza.ui.screens.mood.MoodScreen +import it.hamy.muza.ui.screens.pipedplaylist.PipedPlaylistScreen import it.hamy.muza.ui.screens.playlist.PlaylistScreen +import java.util.UUID + +/** + * Marker class for linters that a composable is a route and should not be handled like a regular + * composable, but rather as an entrypoint. + */ +@Retention(AnnotationRetention.SOURCE) +@Target(AnnotationTarget.FUNCTION) +annotation class Route val albumRoute = Route1("albumRoute") val artistRoute = Route1("artistRoute") val builtInPlaylistRoute = Route1("builtInPlaylistRoute") val localPlaylistRoute = Route1("localPlaylistRoute") -val playlistRoute = Route1("playlistRoute") +val pipedPlaylistRoute = Route3("pipedPlaylistRoute") +val playlistRoute = Route3("playlistRoute") +val moodRoute = Route1("moodRoute") val searchResultRoute = Route1("searchResultRoute") val searchRoute = Route1("searchRoute") val settingsRoute = Route0("settingsRoute") -@SuppressLint("ComposableNaming") -@Suppress("NOTHING_TO_INLINE") -@ExperimentalAnimationApi -@ExperimentalFoundationApi @Composable -inline fun RouteHandlerScope.globalRoutes() { +fun RouteHandlerScope.GlobalRoutes() { albumRoute { browseId -> AlbumScreen( browseId = browseId ?: error("browseId cannot be null") @@ -39,9 +48,27 @@ inline fun RouteHandlerScope.globalRoutes() { ) } - playlistRoute { browseId -> - PlaylistScreen( - browseId = browseId ?: error("browseId cannot be null") + pipedPlaylistRoute { apiBaseUrl, sessionToken, playlistId -> + PipedPlaylistScreen( + apiBaseUrl = apiBaseUrl?.let { + runCatching { Url(it) }.getOrNull() + } ?: error("apiBaseUrl cannot be null"), + sessionToken = sessionToken ?: error("sessionToken cannot be null"), + playlistId = runCatching { + UUID.fromString(playlistId) + }.getOrNull() ?: error("playlistId cannot be null") ) } + + playlistRoute { browseId, params, maxDepth -> + PlaylistScreen( + browseId = browseId ?: error("browseId cannot be null"), + params = params, + maxDepth = maxDepth + ) + } + + moodRoute { mood -> + MoodScreen(mood = mood) + } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt index 0aec2f9..1aeadc8 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumScreen.kt @@ -1,28 +1,25 @@ package it.hamy.muza.ui.screens.album import android.content.Intent -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Spacer import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp +import androidx.compose.ui.res.stringResource import com.valentinilk.shimmer.shimmer import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.persist.persist +import it.hamy.compose.routing.RouteHandler import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.requests.albumPage -import it.hamy.compose.routing.RouteHandler import it.hamy.muza.Database import it.hamy.muza.R import it.hamy.muza.models.Album @@ -31,43 +28,46 @@ import it.hamy.muza.query import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.PlaylistInfo import it.hamy.muza.ui.components.themed.Scaffold import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent import it.hamy.muza.ui.items.AlbumItem import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.screens.albumRoute -import it.hamy.muza.ui.screens.globalRoutes import it.hamy.muza.ui.screens.searchresult.ItemsPage +import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.stateFlowSaver import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.update import kotlinx.coroutines.withContext -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable fun AlbumScreen(browseId: String) { val saveableStateHolder = rememberSaveableStateHolder() - var tabIndex by rememberSaveable { - mutableStateOf(0) - } + val tabIndexState = rememberSaveable(saver = stateFlowSaver()) { MutableStateFlow(0) } + val tabIndex by tabIndexState.collectAsState() var album by persist("album/$browseId/album") var albumPage by persist("album/$browseId/albumPage") - PersistMapCleanup(tagPrefix = "album/$browseId/") + PersistMapCleanup(prefix = "album/$browseId/") LaunchedEffect(Unit) { Database .album(browseId) - .combine(snapshotFlow { tabIndex }) { album, tabIndex -> album to tabIndex } + .combine(tabIndexState) { album, tabIndex -> album to tabIndex } .collect { (currentAlbum, tabIndex) -> album = currentAlbum - if (albumPage == null && (currentAlbum?.timestamp == null || tabIndex == 1)) { + if (albumPage == null && (currentAlbum?.timestamp == null || tabIndex == 1)) withContext(Dispatchers.IO) { Innertube.albumPage(BrowseBody(browseId = browseId)) ?.onSuccess { currentAlbumPage -> @@ -76,18 +76,20 @@ fun AlbumScreen(browseId: String) { Database.clearAlbum(browseId) Database.upsert( - Album( + album = Album( id = browseId, title = currentAlbumPage.title, + description = currentAlbumPage.description, thumbnailUrl = currentAlbumPage.thumbnail?.url, year = currentAlbumPage.year, authorsText = currentAlbumPage.authors - ?.joinToString("") { it.name ?: "" }, + ?.joinToString("") { it.name.orEmpty() }, shareUrl = currentAlbumPage.url, timestamp = System.currentTimeMillis(), - bookmarkedAt = album?.bookmarkedAt + bookmarkedAt = album?.bookmarkedAt, + otherInfo = currentAlbumPage.otherInfo ), - currentAlbumPage + songAlbumMaps = currentAlbumPage .songsPage ?.items ?.map(Innertube.SongItem::asMediaItem) @@ -102,88 +104,79 @@ fun AlbumScreen(browseId: String) { ) } } - - } } } RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { - val headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit = - { textButton -> - if (album?.timestamp == null) { - HeaderPlaceholder( - modifier = Modifier - .shimmer() + NavHost { + val headerContent: @Composable ( + beforeContent: (@Composable () -> Unit)?, + afterContent: (@Composable () -> Unit)? + ) -> Unit = { beforeContent, afterContent -> + if (album?.timestamp == null) HeaderPlaceholder(modifier = Modifier.shimmer()) + else { + val (colorPalette) = LocalAppearance.current + val context = LocalContext.current + + Header(title = album?.title ?: stringResource(R.string.unknown)) { + beforeContent?.invoke() + + Spacer(modifier = Modifier.weight(1f)) + + afterContent?.invoke() + + HeaderIconButton( + icon = if (album?.bookmarkedAt == null) R.drawable.bookmark_outline + else R.drawable.bookmark, + color = colorPalette.accent, + onClick = { + val bookmarkedAt = + if (album?.bookmarkedAt == null) System.currentTimeMillis() else null + + query { + album + ?.copy(bookmarkedAt = bookmarkedAt) + ?.let(Database::update) + } + } ) - } else { - val (colorPalette) = LocalAppearance.current - val context = LocalContext.current - Header(title = album?.title ?: "Неизвестный") { - textButton?.invoke() - - Spacer( - modifier = Modifier - .weight(1f) - ) - - HeaderIconButton( - icon = if (album?.bookmarkedAt == null) { - R.drawable.bookmark_outline - } else { - R.drawable.bookmark - }, - color = colorPalette.accent, - onClick = { - val bookmarkedAt = - if (album?.bookmarkedAt == null) System.currentTimeMillis() else null - - query { - album - ?.copy(bookmarkedAt = bookmarkedAt) - ?.let(Database::update) + HeaderIconButton( + icon = R.drawable.share_social, + color = colorPalette.text, + onClick = { + album?.shareUrl?.let { url -> + val sendIntent = Intent().apply { + action = Intent.ACTION_SEND + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, url) } - } - ) - HeaderIconButton( - icon = R.drawable.share_social, - color = colorPalette.text, - onClick = { - album?.shareUrl?.let { url -> - val sendIntent = Intent().apply { - action = Intent.ACTION_SEND - type = "text/plain" - putExtra(Intent.EXTRA_TEXT, url) - } - - context.startActivity( - Intent.createChooser( - sendIntent, - null - ) - ) - } + context.startActivity( + Intent.createChooser(sendIntent, null) + ) } - ) - } + } + ) } } + } - val thumbnailContent = - adaptiveThumbnailContent(album?.timestamp == null, album?.thumbnailUrl) + val thumbnailContent = adaptiveThumbnailContent( + isLoading = album?.timestamp == null, + url = album?.thumbnailUrl + ) Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, tabIndex = tabIndex, - onTabChanged = { tabIndex = it }, - tabColumnContent = { Item -> - Item(0, "Песни", R.drawable.musical_notes) - Item(1, "Другие версии", R.drawable.disc) + onTabChanged = { newTab -> tabIndexState.update { newTab } }, + tabColumnContent = { item -> + item(0, stringResource(R.string.songs), R.drawable.musical_notes) + item(1, stringResource(R.string.other_versions), R.drawable.disc) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { @@ -192,39 +185,38 @@ fun AlbumScreen(browseId: String) { browseId = browseId, headerContent = headerContent, thumbnailContent = thumbnailContent, + afterHeaderContent = { + if (album == null) PlaylistInfo(playlist = albumPage) + else PlaylistInfo(playlist = album) + } ) 1 -> { - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - ItemsPage( tag = "album/$browseId/alternatives", - headerContent = headerContent, + header = headerContent, initialPlaceholderCount = 1, continuationPlaceholderCount = 1, - emptyItemsText = "Этот альбом не имеет других версий", - itemsPageProvider = albumPage?.let { - ({ + emptyItemsText = stringResource(R.string.no_alternative_version), + provider = albumPage?.let { + { Result.success( Innertube.ItemsPage( items = albumPage?.otherVersions, continuation = null ) ) - }) + } }, itemContent = { album -> AlbumItem( album = album, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable { albumRoute(album.key) } + thumbnailSize = Dimensions.thumbnails.album, + modifier = Modifier.clickable { albumRoute(album.key) } ) }, itemPlaceholderContent = { - AlbumItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) + AlbumItemPlaceholder(thumbnailSize = Dimensions.thumbnails.album) } ) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt index a4dff33..0d6fe76 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/album/AlbumSongs.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.album -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -21,6 +20,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import it.hamy.compose.persist.persistList import it.hamy.muza.Database @@ -47,13 +47,17 @@ import it.hamy.muza.utils.forcePlayFromBeginning import it.hamy.muza.utils.isLandscape import it.hamy.muza.utils.semiBold -@ExperimentalAnimationApi -@ExperimentalFoundationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun AlbumSongs( browseId: String, - headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, + headerContent: @Composable ( + beforeContent: (@Composable () -> Unit)?, + afterContent: (@Composable () -> Unit)? + ) -> Unit, thumbnailContent: @Composable () -> Unit, + modifier: Modifier = Modifier, + afterHeaderContent: (@Composable () -> Unit)? = null ) { val (colorPalette, typography) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -65,16 +69,18 @@ fun AlbumSongs( Database.albumSongs(browseId).collect { songs = it } } - val thumbnailSizeDp = Dimensions.thumbnails.song - val lazyListState = rememberLazyListState() - LayoutWithAdaptiveThumbnail(thumbnailContent = thumbnailContent) { + LayoutWithAdaptiveThumbnail( + thumbnailContent = thumbnailContent, + modifier = modifier + ) { Box { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues(), modifier = Modifier .background(colorPalette.background0) .fillMaxSize() @@ -84,19 +90,21 @@ fun AlbumSongs( contentType = 0 ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - headerContent { - SecondaryTextButton( - text = "В очередь", - enabled = songs.isNotEmpty(), - onClick = { - binder?.player?.enqueue(songs.map(Song::asMediaItem)) - } - ) - } + headerContent( + { + SecondaryTextButton( + text = stringResource(R.string.enqueue), + enabled = songs.isNotEmpty(), + onClick = { + binder?.player?.enqueue(songs.map(Song::asMediaItem)) + } + ) + }, + null + ) - if (!isLandscape) { - thumbnailContent() - } + if (!isLandscape) thumbnailContent() + afterHeaderContent?.invoke() } } @@ -108,7 +116,7 @@ fun AlbumSongs( title = song.title, authors = song.artistsText, duration = song.durationText, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.song, thumbnailContent = { BasicText( text = "${index + 1}", @@ -116,40 +124,34 @@ fun AlbumSongs( maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier - .width(thumbnailSizeDp) + .width(Dimensions.thumbnails.song) .align(Alignment.Center) ) }, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - NonQueuedMediaItemMenu( - onDismiss = menuState::hide, - mediaItem = song.asMediaItem, - ) - } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlayAtIndex( - songs.map(Song::asMediaItem), - index + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + onDismiss = menuState::hide, + mediaItem = song.asMediaItem ) } - ) + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlayAtIndex( + items = songs.map(Song::asMediaItem), + index = index + ) + } + ) ) } - if (songs.isEmpty()) { - item(key = "loading") { - ShimmerHost( - modifier = Modifier - .fillParentMaxSize() - ) { - repeat(4) { - SongItemPlaceholder(thumbnailSizeDp = Dimensions.thumbnails.song) - } + if (songs.isEmpty()) item(key = "loading") { + ShimmerHost(modifier = Modifier.fillParentMaxSize()) { + repeat(4) { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt index 65dc964..ef802ab 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistLocalSongs.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.artist -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -19,6 +18,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import it.hamy.compose.persist.persist import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets @@ -35,19 +35,18 @@ import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.forcePlayAtIndex import it.hamy.muza.utils.forcePlayFromBeginning -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun ArtistLocalSongs( browseId: String, headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, thumbnailContent: @Composable () -> Unit, + modifier: Modifier = Modifier ) { val binder = LocalPlayerServiceBinder.current val (colorPalette) = LocalAppearance.current @@ -59,17 +58,17 @@ fun ArtistLocalSongs( Database.artistSongs(browseId).collect { songs = it } } - val songThumbnailSizeDp = Dimensions.thumbnails.song - val songThumbnailSizePx = songThumbnailSizeDp.px - val lazyListState = rememberLazyListState() - LayoutWithAdaptiveThumbnail(thumbnailContent = thumbnailContent) { + LayoutWithAdaptiveThumbnail( + thumbnailContent = thumbnailContent, + modifier = modifier + ) { Box { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), modifier = Modifier .background(colorPalette.background0) .fillMaxSize() @@ -81,7 +80,7 @@ fun ArtistLocalSongs( Column(horizontalAlignment = Alignment.CenterHorizontally) { headerContent { SecondaryTextButton( - text = "В очередь", + text = stringResource(R.string.enqueue), enabled = !songs.isNullOrEmpty(), onClick = { binder?.player?.enqueue(songs!!.map(Song::asMediaItem)) @@ -99,33 +98,31 @@ fun ArtistLocalSongs( key = { _, song -> song.id } ) { index, song -> SongItem( - song = song, - thumbnailSizeDp = songThumbnailSizeDp, - thumbnailSizePx = songThumbnailSizePx, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - NonQueuedMediaItemMenu( - onDismiss = menuState::hide, - mediaItem = song.asMediaItem, - ) - } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlayAtIndex( - songs.map(Song::asMediaItem), - index + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + onDismiss = menuState::hide, + mediaItem = song.asMediaItem ) } - ) + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlayAtIndex( + items = songs.map(Song::asMediaItem), + index = index + ) + } + ), + song = song, + thumbnailSize = Dimensions.thumbnails.song ) } } ?: item(key = "loading") { ShimmerHost { repeat(4) { - SongItemPlaceholder(thumbnailSizeDp = Dimensions.thumbnails.song) + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt index 9a17ce2..9a7b21d 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistOverview.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.artist -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -13,7 +12,6 @@ import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyRow @@ -24,7 +22,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.innertube.Innertube import it.hamy.innertube.models.NavigationEndpoint @@ -33,6 +31,7 @@ import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.Attribution import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu @@ -44,16 +43,12 @@ import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.align import it.hamy.muza.utils.asMediaItem -import it.hamy.muza.utils.color import it.hamy.muza.utils.forcePlay import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun ArtistOverview( youtubeArtistPage: Innertube.ArtistPage?, @@ -63,17 +58,13 @@ fun ArtistOverview( onAlbumClick: (String) -> Unit, thumbnailContent: @Composable () -> Unit, headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, + modifier: Modifier = Modifier ) { val (colorPalette, typography) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current val menuState = LocalMenuState.current val windowInsets = LocalPlayerAwareWindowInsets.current - val songThumbnailSizeDp = Dimensions.thumbnails.song - val songThumbnailSizePx = songThumbnailSizeDp.px - val albumThumbnailSizeDp = 108.dp - val albumThumbnailSizePx = albumThumbnailSizeDp.px - val endPaddingValues = windowInsets.only(WindowInsetsSides.End).asPaddingValues() val sectionTextModifier = Modifier @@ -82,7 +73,10 @@ fun ArtistOverview( val scrollState = rememberScrollState() - LayoutWithAdaptiveThumbnail(thumbnailContent = thumbnailContent) { + LayoutWithAdaptiveThumbnail( + thumbnailContent = thumbnailContent, + modifier = modifier + ) { Box { Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -96,14 +90,11 @@ fun ArtistOverview( .asPaddingValues() ) ) { - Box( - modifier = Modifier - .padding(endPaddingValues) - ) { + Box(modifier = Modifier.padding(endPaddingValues)) { headerContent { youtubeArtistPage?.shuffleEndpoint?.let { endpoint -> SecondaryTextButton( - text = "Перемешать", + text = stringResource(R.string.shuffle), onClick = { binder?.stopRadio() binder?.playRadio(endpoint) @@ -115,7 +106,7 @@ fun ArtistOverview( thumbnailContent() - if (youtubeArtistPage != null) { + youtubeArtistPage?.let { youtubeArtistPage.songs?.let { songs -> Row( verticalAlignment = Alignment.Bottom, @@ -125,17 +116,16 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Песни", + text = stringResource(R.string.songs), style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.songsEndpoint?.let { BasicText( - text = "Все", + text = stringResource(R.string.view_all), style = typography.xs.secondary, - modifier = sectionTextModifier - .clickable(onClick = onViewAllSongsClick), + modifier = sectionTextModifier.clickable(onClick = onViewAllSongsClick) ) } } @@ -143,15 +133,14 @@ fun ArtistOverview( songs.forEach { song -> SongItem( song = song, - thumbnailSizeDp = songThumbnailSizeDp, - thumbnailSizePx = songThumbnailSizePx, + thumbnailSize = Dimensions.thumbnails.song, modifier = Modifier .combinedClickable( onLongClick = { menuState.display { NonQueuedMediaItemMenu( onDismiss = menuState::hide, - mediaItem = song.asMediaItem, + mediaItem = song.asMediaItem ) } }, @@ -178,25 +167,23 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Альбомы", + text = stringResource(R.string.albums), style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.albumsEndpoint?.let { BasicText( - text = "Все", + text = stringResource(R.string.view_all), style = typography.xs.secondary, - modifier = sectionTextModifier - .clickable(onClick = onViewAllAlbumsClick), + modifier = sectionTextModifier.clickable(onClick = onViewAllAlbumsClick) ) } } LazyRow( contentPadding = endPaddingValues, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { items( items = albums, @@ -204,11 +191,11 @@ fun ArtistOverview( ) { album -> AlbumItem( album = album, - thumbnailSizePx = albumThumbnailSizePx, - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true, - modifier = Modifier - .clickable(onClick = { onAlbumClick(album.key) }) + modifier = Modifier.clickable(onClick = { + onAlbumClick(album.key) + }) ) } } @@ -223,25 +210,23 @@ fun ArtistOverview( .padding(endPaddingValues) ) { BasicText( - text = "Синглы", + text = stringResource(R.string.singles), style = typography.m.semiBold, modifier = sectionTextModifier ) youtubeArtistPage.singlesEndpoint?.let { BasicText( - text = "Все", + text = stringResource(R.string.view_all), style = typography.xs.secondary, - modifier = sectionTextModifier - .clickable(onClick = onViewAllSinglesClick), + modifier = sectionTextModifier.clickable(onClick = onViewAllSinglesClick) ) } } LazyRow( contentPadding = endPaddingValues, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { items( items = singles, @@ -249,85 +234,38 @@ fun ArtistOverview( ) { album -> AlbumItem( album = album, - thumbnailSizePx = albumThumbnailSizePx, - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true, - modifier = Modifier - .clickable(onClick = { onAlbumClick(album.key) }) + modifier = Modifier.clickable(onClick = { onAlbumClick(album.key) }) ) } } } youtubeArtistPage.description?.let { description -> - val attributionsIndex = description.lastIndexOf("\n\nFrom Wikipedia") - - Row( + Attribution( + text = description, modifier = Modifier .padding(top = 16.dp) .padding(vertical = 16.dp, horizontal = 8.dp) - .padding(endPaddingValues) - ) { - BasicText( - text = "“", - style = typography.xxl.semiBold, - modifier = Modifier - .offset(y = (-8).dp) - .align(Alignment.Top) - ) - - BasicText( - text = if (attributionsIndex == -1) { - description - } else { - description.substring(0, attributionsIndex) - }, - style = typography.xxs.secondary, - modifier = Modifier - .padding(horizontal = 8.dp) - .weight(1f) - ) - - BasicText( - text = "„", - style = typography.xxl.semiBold, - modifier = Modifier - .offset(y = 4.dp) - .align(Alignment.Bottom) - ) - } - - if (attributionsIndex != -1) { - BasicText( - text = "From Wikipedia under Creative Commons Attribution CC-BY-SA 3.0", - style = typography.xxs.color(colorPalette.textDisabled).align(TextAlign.End), - modifier = Modifier - .padding(horizontal = 16.dp) - .padding(bottom = 16.dp) - .padding(endPaddingValues) - ) - } + ) } - } else { - ShimmerHost { + } ?: ShimmerHost { + TextPlaceholder(modifier = sectionTextModifier) + + repeat(5) { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) + } + + repeat(2) { TextPlaceholder(modifier = sectionTextModifier) - repeat(5) { - SongItemPlaceholder( - thumbnailSizeDp = songThumbnailSizeDp, - ) - } - - repeat(2) { - TextPlaceholder(modifier = sectionTextModifier) - - Row { - repeat(2) { - AlbumItemPlaceholder( - thumbnailSizeDp = albumThumbnailSizeDp, - alternative = true - ) - } + Row { + repeat(2) { + AlbumItemPlaceholder( + thumbnailSize = Dimensions.thumbnails.album, + alternative = true + ) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt index f58fd34..4de6f75 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/artist/ArtistScreen.kt @@ -1,7 +1,6 @@ package it.hamy.muza.ui.screens.artist import android.content.Intent -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable @@ -12,24 +11,25 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp +import androidx.compose.ui.res.stringResource import com.valentinilk.shimmer.shimmer import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.persist.persist +import it.hamy.compose.routing.RouteHandler import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.requests.artistPage import it.hamy.innertube.requests.itemsPage import it.hamy.innertube.utils.from -import it.hamy.compose.routing.RouteHandler import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R import it.hamy.muza.models.Artist +import it.hamy.muza.preferences.UIStatePreferences +import it.hamy.muza.preferences.UIStatePreferences.artistScreenTabIndexProperty import it.hamy.muza.query import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.themed.Header @@ -42,31 +42,30 @@ import it.hamy.muza.ui.items.AlbumItem import it.hamy.muza.ui.items.AlbumItemPlaceholder import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.screens.albumRoute -import it.hamy.muza.ui.screens.globalRoutes import it.hamy.muza.ui.screens.searchresult.ItemsPage import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.artistScreenTabIndexKey import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.forcePlay -import it.hamy.muza.utils.rememberPreference import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable fun ArtistScreen(browseId: String) { + val binder = LocalPlayerServiceBinder.current + val menuState = LocalMenuState.current + val saveableStateHolder = rememberSaveableStateHolder() - var tabIndex by rememberPreference(artistScreenTabIndexKey, defaultValue = 0) - - PersistMapCleanup(tagPrefix = "artist/$browseId/") + PersistMapCleanup(prefix = "artist/$browseId/") var artist by persist("artist/$browseId/artist") @@ -75,12 +74,15 @@ fun ArtistScreen(browseId: String) { LaunchedEffect(Unit) { Database .artist(browseId) - .combine(snapshotFlow { tabIndex }.map { it != 4 }) { artist, mustFetch -> artist to mustFetch } + .combine( + flow = artistScreenTabIndexProperty.stateFlow.map { it != 4 }, + transform = ::Pair + ) .distinctUntilChanged() .collect { (currentArtist, mustFetch) -> artist = currentArtist - if (artistPage == null && (currentArtist?.timestamp == null || mustFetch)) { + if (artistPage == null && (currentArtist?.timestamp == null || mustFetch)) withContext(Dispatchers.IO) { Innertube.artistPage(BrowseBody(browseId = browseId)) ?.onSuccess { currentArtistPage -> @@ -97,46 +99,33 @@ fun ArtistScreen(browseId: String) { ) } } - } } } RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { - val thumbnailContent = - adaptiveThumbnailContent( - artist?.timestamp == null, - artist?.thumbnailUrl, - CircleShape - ) + NavHost { + val thumbnailContent = adaptiveThumbnailContent( + isLoading = artist?.timestamp == null, + url = artist?.thumbnailUrl, + shape = CircleShape + ) val headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit = { textButton -> - if (artist?.timestamp == null) { - HeaderPlaceholder( - modifier = Modifier - .shimmer() - ) - } else { + if (artist?.timestamp == null) HeaderPlaceholder(modifier = Modifier.shimmer()) else { val (colorPalette) = LocalAppearance.current val context = LocalContext.current - Header(title = artist?.name ?: "Unknown") { + Header(title = artist?.name ?: stringResource(R.string.unknown)) { textButton?.invoke() - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) HeaderIconButton( - icon = if (artist?.bookmarkedAt == null) { - R.drawable.bookmark_outline - } else { - R.drawable.bookmark - }, + icon = if (artist?.bookmarkedAt == null) R.drawable.bookmark_outline + else R.drawable.bookmark, color = colorPalette.accent, onClick = { val bookmarkedAt = @@ -173,15 +162,15 @@ fun ArtistScreen(browseId: String) { Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, - tabIndex = tabIndex, - onTabChanged = { tabIndex = it }, - tabColumnContent = { Item -> - Item(0, "Обзор", R.drawable.sparkles) - Item(1, "Песни", R.drawable.musical_notes) - Item(2, "Альбомы", R.drawable.disc) - Item(3, "Синглы", R.drawable.disc) - Item(4, "Библиотека", R.drawable.library) - }, + tabIndex = UIStatePreferences.artistScreenTabIndex, + onTabChanged = { UIStatePreferences.artistScreenTabIndex = it }, + tabColumnContent = { item -> + item(0, stringResource(R.string.overview), R.drawable.sparkles) + item(1, stringResource(R.string.songs), R.drawable.musical_notes) + item(2, stringResource(R.string.albums), R.drawable.disc) + item(3, stringResource(R.string.singles), R.drawable.disc) + item(4, stringResource(R.string.library), R.drawable.library) + } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { when (currentTabIndex) { @@ -190,180 +179,160 @@ fun ArtistScreen(browseId: String) { thumbnailContent = thumbnailContent, headerContent = headerContent, onAlbumClick = { albumRoute(it) }, - onViewAllSongsClick = { tabIndex = 1 }, - onViewAllAlbumsClick = { tabIndex = 2 }, - onViewAllSinglesClick = { tabIndex = 3 }, + onViewAllSongsClick = { UIStatePreferences.artistScreenTabIndex = 1 }, + onViewAllAlbumsClick = { UIStatePreferences.artistScreenTabIndex = 2 }, + onViewAllSinglesClick = { UIStatePreferences.artistScreenTabIndex = 3 } ) - 1 -> { - val binder = LocalPlayerServiceBinder.current - val menuState = LocalMenuState.current - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "artist/$browseId/songs", - headerContent = headerContent, - itemsPageProvider = artistPage?.let { - ({ continuation -> - continuation?.let { + 1 -> ItemsPage( + tag = "artist/$browseId/songs", + header = headerContent, + provider = artistPage?.let { + @Suppress("SpacingAroundCurly") + { continuation -> + continuation?.let { + Innertube.itemsPage( + body = ContinuationBody(continuation = continuation), + fromMusicResponsiveListItemRenderer = Innertube.SongItem::from + ) + } ?: artistPage + ?.songsEndpoint + ?.takeIf { it.browseId != null } + ?.let { endpoint -> Innertube.itemsPage( - body = ContinuationBody(continuation = continuation), - fromMusicResponsiveListItemRenderer = Innertube.SongItem::from, + body = BrowseBody( + browseId = endpoint.browseId!!, + params = endpoint.params + ), + fromMusicResponsiveListItemRenderer = Innertube.SongItem::from ) - } ?: artistPage - ?.songsEndpoint - ?.takeIf { it.browseId != null } - ?.let { endpoint -> - Innertube.itemsPage( - body = BrowseBody( - browseId = endpoint.browseId!!, - params = endpoint.params, - ), - fromMusicResponsiveListItemRenderer = Innertube.SongItem::from, + } + ?: Result.success( + Innertube.ItemsPage( + items = artistPage?.songs, + continuation = null + ) + ) + } + }, + itemContent = { song -> + SongItem( + song = song, + thumbnailSize = Dimensions.thumbnails.song, + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + onDismiss = menuState::hide, + mediaItem = song.asMediaItem ) } - ?: Result.success( - Innertube.ItemsPage( - items = artistPage?.songs, - continuation = null - ) - ) - }) - }, - itemContent = { song -> - SongItem( - song = song, - thumbnailSizeDp = thumbnailSizeDp, - thumbnailSizePx = thumbnailSizePx, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - NonQueuedMediaItemMenu( - onDismiss = menuState::hide, - mediaItem = song.asMediaItem, - ) - } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlay(song.asMediaItem) - binder?.setupRadio(song.info?.endpoint) - } - ) + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlay(song.asMediaItem) + binder?.setupRadio(song.info?.endpoint) + } ) - }, - itemPlaceholderContent = { - SongItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) - } - ) - } + ) + }, + itemPlaceholderContent = { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) + } + ) - 2 -> { - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "artist/$browseId/albums", - headerContent = headerContent, - emptyItemsText = "Исполнитель не выпустил ни одного альбома", - itemsPageProvider = artistPage?.let { - ({ continuation -> - continuation?.let { + 2 -> ItemsPage( + tag = "artist/$browseId/albums", + header = headerContent, + emptyItemsText = stringResource(R.string.artist_has_no_albums), + provider = artistPage?.let { + @Suppress("SpacingAroundCurly") + { continuation -> + continuation?.let { + Innertube.itemsPage( + body = ContinuationBody(continuation = continuation), + fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from + ) + } ?: artistPage + ?.albumsEndpoint + ?.takeIf { it.browseId != null } + ?.let { endpoint -> Innertube.itemsPage( - body = ContinuationBody(continuation = continuation), - fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from, - ) - } ?: artistPage - ?.albumsEndpoint - ?.takeIf { it.browseId != null } - ?.let { endpoint -> - Innertube.itemsPage( - body = BrowseBody( - browseId = endpoint.browseId!!, - params = endpoint.params, - ), - fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from, - ) - } - ?: Result.success( - Innertube.ItemsPage( - items = artistPage?.albums, - continuation = null + body = BrowseBody( + browseId = endpoint.browseId!!, + params = endpoint.params + ), + fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from ) + } + ?: Result.success( + Innertube.ItemsPage( + items = artistPage?.albums, + continuation = null ) - }) - }, - itemContent = { album -> - AlbumItem( - album = album, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable(onClick = { albumRoute(album.key) }) ) - }, - itemPlaceholderContent = { - AlbumItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) } - ) - } + }, + itemContent = { album -> + AlbumItem( + album = album, + thumbnailSize = Dimensions.thumbnails.album, + modifier = Modifier.clickable(onClick = { albumRoute(album.key) }) + ) + }, + itemPlaceholderContent = { + AlbumItemPlaceholder(thumbnailSize = Dimensions.thumbnails.album) + } + ) - 3 -> { - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "artist/$browseId/singles", - headerContent = headerContent, - emptyItemsText = "Исполнитель не выпустил ни одного сингла", - itemsPageProvider = artistPage?.let { - ({ continuation -> - continuation?.let { + 3 -> ItemsPage( + tag = "artist/$browseId/singles", + header = headerContent, + emptyItemsText = stringResource(R.string.artist_has_no_singles), + provider = artistPage?.let { + @Suppress("SpacingAroundCurly") + { continuation -> + continuation?.let { + Innertube.itemsPage( + body = ContinuationBody(continuation = continuation), + fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from + ) + } ?: artistPage + ?.singlesEndpoint + ?.takeIf { it.browseId != null } + ?.let { endpoint -> Innertube.itemsPage( - body = ContinuationBody(continuation = continuation), - fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from, - ) - } ?: artistPage - ?.singlesEndpoint - ?.takeIf { it.browseId != null } - ?.let { endpoint -> - Innertube.itemsPage( - body = BrowseBody( - browseId = endpoint.browseId!!, - params = endpoint.params, - ), - fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from, - ) - } - ?: Result.success( - Innertube.ItemsPage( - items = artistPage?.singles, - continuation = null + body = BrowseBody( + browseId = endpoint.browseId!!, + params = endpoint.params + ), + fromMusicTwoRowItemRenderer = Innertube.AlbumItem::from ) + } + ?: Result.success( + Innertube.ItemsPage( + items = artistPage?.singles, + continuation = null ) - }) - }, - itemContent = { album -> - AlbumItem( - album = album, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable(onClick = { albumRoute(album.key) }) ) - }, - itemPlaceholderContent = { - AlbumItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) } - ) - } + }, + itemContent = { album -> + AlbumItem( + album = album, + thumbnailSize = Dimensions.thumbnails.album, + modifier = Modifier.clickable(onClick = { albumRoute(album.key) }) + ) + }, + itemPlaceholderContent = { + AlbumItemPlaceholder(thumbnailSize = Dimensions.thumbnails.album) + } + ) 4 -> ArtistLocalSongs( browseId = browseId, headerContent = headerContent, - thumbnailContent = thumbnailContent, + thumbnailContent = thumbnailContent ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt index 8e86543..9eabd06 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt @@ -1,51 +1,60 @@ package it.hamy.muza.ui.screens.builtinplaylist -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.res.stringResource import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.routing.RouteHandler import it.hamy.muza.R import it.hamy.muza.enums.BuiltInPlaylist +import it.hamy.muza.preferences.DataPreferences import it.hamy.muza.ui.components.themed.Scaffold -import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) { val saveableStateHolder = rememberSaveableStateHolder() val (tabIndex, onTabIndexChanged) = rememberSaveable { - mutableStateOf(when (builtInPlaylist) { - BuiltInPlaylist.Favorites -> 0 - BuiltInPlaylist.Offline -> 1 - }) + mutableIntStateOf( + when (builtInPlaylist) { + BuiltInPlaylist.Favorites -> 0 + BuiltInPlaylist.Offline -> 1 + BuiltInPlaylist.Top -> 2 + } + ) } - PersistMapCleanup(tagPrefix = "${builtInPlaylist.name}/") + PersistMapCleanup(prefix = "${builtInPlaylist.name}/") RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, tabIndex = tabIndex, onTabChanged = onTabIndexChanged, - tabColumnContent = { Item -> - Item(0, "Любимые", R.drawable.heart) - Item(1, "Сохранённые", R.drawable.airplane) + tabColumnContent = { item -> + item(0, stringResource(R.string.favorites), R.drawable.heart) + item(1, stringResource(R.string.offline), R.drawable.airplane) + item( + 2, + stringResource(R.string.format_top_playlist, DataPreferences.topListLength), + R.drawable.trending_up + ) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { when (currentTabIndex) { 0 -> BuiltInPlaylistSongs(builtInPlaylist = BuiltInPlaylist.Favorites) 1 -> BuiltInPlaylistSongs(builtInPlaylist = BuiltInPlaylist.Offline) + 2 -> BuiltInPlaylistSongs(builtInPlaylist = BuiltInPlaylist.Top) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt index cdbcae5..8f1338c 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt @@ -1,10 +1,10 @@ package it.hamy.muza.ui.screens.builtinplaylist -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues @@ -17,8 +17,11 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persistList import it.hamy.muza.Database @@ -27,59 +30,74 @@ import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R import it.hamy.muza.enums.BuiltInPlaylist import it.hamy.muza.models.Song -import it.hamy.muza.models.SongWithContentLength +import it.hamy.muza.preferences.DataPreferences import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.ValueSelectorDialog import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.forcePlayAtIndex import it.hamy.muza.utils.forcePlayFromBeginning -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.flowOn +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.cancellable +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class, ExperimentalCoroutinesApi::class) @Composable -fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) { +fun BuiltInPlaylistSongs( + builtInPlaylist: BuiltInPlaylist, + modifier: Modifier = Modifier +) = with(DataPreferences) { val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current val menuState = LocalMenuState.current var songs by persistList("${builtInPlaylist.name}/songs") - LaunchedEffect(Unit) { + LaunchedEffect(binder) { when (builtInPlaylist) { - BuiltInPlaylist.Favorites -> Database - .favorites() + BuiltInPlaylist.Favorites -> Database.favorites() - BuiltInPlaylist.Offline -> Database - .songsWithContentLength() - .flowOn(Dispatchers.IO) - .map { songs -> - songs.filter { song -> - song.contentLength?.let { - binder?.cache?.isCached(song.song.id, 0, song.contentLength) - } ?: false - }.map(SongWithContentLength::song) - } + BuiltInPlaylist.Offline -> + Database + .songsWithContentLength() + .map { songs -> + songs.filter { binder?.isCached(it) ?: false }.map { it.song } + } + + BuiltInPlaylist.Top -> combine( + flow = topListPeriodProperty.stateFlow, + flow2 = topListLengthProperty.stateFlow + ) { period, length -> period to length }.flatMapLatest { (period, length) -> + if (period.duration == null) Database + .songsByPlayTimeDesc(limit = length) + .distinctUntilChanged() + .cancellable() + else Database + .trending( + limit = length, + period = period.duration.inWholeMilliseconds + ) + .distinctUntilChanged() + .cancellable() + } }.collect { songs = it } } - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSize = thumbnailSizeDp.px - val lazyListState = rememberLazyListState() - Box { + Box(modifier = modifier) { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current @@ -88,69 +106,94 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) { .background(colorPalette.background0) .fillMaxSize() ) { - item( - key = "header", - contentType = 0 - ) { + item(key = "header", contentType = 0) { Header( title = when (builtInPlaylist) { - BuiltInPlaylist.Favorites -> "Любимые" - BuiltInPlaylist.Offline -> "Сохранённые" + BuiltInPlaylist.Favorites -> stringResource(R.string.favorites) + BuiltInPlaylist.Offline -> stringResource(R.string.offline) + BuiltInPlaylist.Top -> stringResource( + R.string.format_my_top_playlist, + topListLength + ) }, - modifier = Modifier - .padding(bottom = 8.dp) + modifier = Modifier.padding(bottom = 8.dp) ) { SecondaryTextButton( - text = "В очередь", + text = stringResource(R.string.enqueue), enabled = songs.isNotEmpty(), onClick = { binder?.player?.enqueue(songs.map(Song::asMediaItem)) } ) - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) + + if (builtInPlaylist == BuiltInPlaylist.Top) { + var dialogShowing by rememberSaveable { mutableStateOf(false) } + + SecondaryTextButton( + text = topListPeriod.displayName(), + onClick = { dialogShowing = true } + ) + + if (dialogShowing) ValueSelectorDialog( + onDismiss = { dialogShowing = false }, + title = stringResource( + R.string.format_view_top_of_header, + topListLength + ), + selectedValue = topListPeriod, + values = DataPreferences.TopListPeriod.entries.toImmutableList(), + onValueSelected = { topListPeriod = it }, + valueText = { it.displayName() } + ) + } } } itemsIndexed( items = songs, key = { _, song -> song.id }, - contentType = { _, song -> song }, + contentType = { _, song -> song } ) { index, song -> - SongItem( - song = song, - thumbnailSizeDp = thumbnailSizeDp, - thumbnailSizePx = thumbnailSize, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - when (builtInPlaylist) { - BuiltInPlaylist.Favorites -> NonQueuedMediaItemMenu( - mediaItem = song.asMediaItem, - onDismiss = menuState::hide - ) + Row { + SongItem( + modifier = Modifier + .combinedClickable( + onLongClick = { + menuState.display { + when (builtInPlaylist) { + BuiltInPlaylist.Favorites -> NonQueuedMediaItemMenu( + mediaItem = song.asMediaItem, + onDismiss = menuState::hide + ) - BuiltInPlaylist.Offline -> InHistoryMediaItemMenu( - song = song, - onDismiss = menuState::hide - ) + BuiltInPlaylist.Offline -> InHistoryMediaItemMenu( + song = song, + onDismiss = menuState::hide + ) + + BuiltInPlaylist.Top -> NonQueuedMediaItemMenu( + mediaItem = song.asMediaItem, + onDismiss = menuState::hide + ) + } } + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlayAtIndex( + items = songs.map(Song::asMediaItem), + index = index + ) } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlayAtIndex( - songs.map(Song::asMediaItem), - index - ) - } - ) - .animateItemPlacement() - ) + ) + .animateItemPlacement(), + song = song, + index = if (builtInPlaylist == BuiltInPlaylist.Top) index else null, + thumbnailSize = Dimensions.thumbnails.song + ) + } } } @@ -158,12 +201,11 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) { lazyListState = lazyListState, iconId = R.drawable.shuffle, onClick = { - if (songs.isNotEmpty()) { - binder?.stopRadio() - binder?.player?.forcePlayFromBeginning( - songs.shuffled().map(Song::asMediaItem) - ) - } + if (songs.isEmpty()) return@FloatingActionsContainerWithScrollToTop + binder?.stopRadio() + binder?.player?.forcePlayFromBeginning( + songs.shuffled().map(Song::asMediaItem) + ) } ) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt index 41b6ac8..fd527c3 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeAlbums.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.home -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween @@ -23,6 +22,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persist import it.hamy.muza.Database @@ -31,41 +31,34 @@ import it.hamy.muza.R import it.hamy.muza.enums.AlbumSortBy import it.hamy.muza.enums.SortOrder import it.hamy.muza.models.Album +import it.hamy.muza.preferences.OrderPreferences import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.albumSortByKey -import it.hamy.muza.utils.albumSortOrderKey -import it.hamy.muza.utils.rememberPreference -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable fun HomeAlbums( onAlbumClick: (Album) -> Unit, - onSearchClick: () -> Unit, -) { + onSearchClick: () -> Unit +) = with(OrderPreferences) { val (colorPalette) = LocalAppearance.current - var sortBy by rememberPreference(albumSortByKey, AlbumSortBy.DateAdded) - var sortOrder by rememberPreference(albumSortOrderKey, SortOrder.Descending) - var items by persist>(tag = "home/albums", emptyList()) - LaunchedEffect(sortBy, sortOrder) { - Database.albums(sortBy, sortOrder).collect { items = it } + LaunchedEffect(albumSortBy, albumSortOrder) { + Database.albums(albumSortBy, albumSortOrder).collect { items = it } } - val thumbnailSizeDp = Dimensions.thumbnails.song * 2 - val thumbnailSizePx = thumbnailSizeDp.px - val sortOrderIconRotation by animateFloatAsState( - targetValue = if (sortOrder == SortOrder.Ascending) 0f else 180f, - animationSpec = tween(durationMillis = 400, easing = LinearEasing) + targetValue = if (albumSortOrder == SortOrder.Ascending) 0f else 180f, + animationSpec = tween(durationMillis = 400, easing = LinearEasing), + label = "" ) val lazyListState = rememberLazyListState() @@ -83,36 +76,33 @@ fun HomeAlbums( key = "header", contentType = 0 ) { - Header(title = "Альбомы") { + Header(title = stringResource(R.string.albums)) { HeaderIconButton( icon = R.drawable.calendar, - color = if (sortBy == AlbumSortBy.Year) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = AlbumSortBy.Year } + color = if (albumSortBy == AlbumSortBy.Year) colorPalette.text else colorPalette.textDisabled, + onClick = { albumSortBy = AlbumSortBy.Year } ) HeaderIconButton( icon = R.drawable.text, - color = if (sortBy == AlbumSortBy.Title) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = AlbumSortBy.Title } + color = if (albumSortBy == AlbumSortBy.Title) colorPalette.text else colorPalette.textDisabled, + onClick = { albumSortBy = AlbumSortBy.Title } ) HeaderIconButton( icon = R.drawable.time, - color = if (sortBy == AlbumSortBy.DateAdded) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = AlbumSortBy.DateAdded } + color = if (albumSortBy == AlbumSortBy.DateAdded) colorPalette.text + else colorPalette.textDisabled, + onClick = { albumSortBy = AlbumSortBy.DateAdded } ) - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) HeaderIconButton( icon = R.drawable.arrow_up, color = colorPalette.text, - onClick = { sortOrder = !sortOrder }, - modifier = Modifier - .graphicsLayer { rotationZ = sortOrderIconRotation } + onClick = { albumSortOrder = !albumSortOrder }, + modifier = Modifier.graphicsLayer { rotationZ = sortOrderIconRotation } ) } } @@ -123,8 +113,7 @@ fun HomeAlbums( ) { album -> AlbumItem( album = album, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, modifier = Modifier .clickable(onClick = { onAlbumClick(album) }) .animateItemPlacement() diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt index 16ec07d..169e87e 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeArtists.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.home -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween @@ -27,6 +26,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persistList import it.hamy.muza.Database @@ -35,41 +35,39 @@ import it.hamy.muza.R import it.hamy.muza.enums.ArtistSortBy import it.hamy.muza.enums.SortOrder import it.hamy.muza.models.Artist +import it.hamy.muza.preferences.OrderPreferences import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.items.ArtistItem +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.artistSortByKey -import it.hamy.muza.utils.artistSortOrderKey -import it.hamy.muza.utils.rememberPreference -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable fun HomeArtistList( onArtistClick: (Artist) -> Unit, - onSearchClick: () -> Unit, -) { + onSearchClick: () -> Unit +) = with(OrderPreferences) { val (colorPalette) = LocalAppearance.current - var sortBy by rememberPreference(artistSortByKey, ArtistSortBy.DateAdded) - var sortOrder by rememberPreference(artistSortOrderKey, SortOrder.Descending) - var items by persistList("home/artists") - LaunchedEffect(sortBy, sortOrder) { - Database.artists(sortBy, sortOrder).collect { items = it } + LaunchedEffect(artistSortBy, artistSortOrder) { + Database + .artists(artistSortBy, artistSortOrder) + .collect { items = it } } - val thumbnailSizeDp = Dimensions.thumbnails.song * 2 - val thumbnailSizePx = thumbnailSizeDp.px - val sortOrderIconRotation by animateFloatAsState( - targetValue = if (sortOrder == SortOrder.Ascending) 0f else 180f, - animationSpec = tween(durationMillis = 400, easing = LinearEasing) + targetValue = if (artistSortOrder == SortOrder.Ascending) 0f else 180f, + animationSpec = tween( + durationMillis = 400, + easing = LinearEasing + ), + label = "" ) val lazyGridState = rememberLazyGridState() @@ -77,12 +75,13 @@ fun HomeArtistList( Box { LazyVerticalGrid( state = lazyGridState, - columns = GridCells.Adaptive(Dimensions.thumbnails.song * 2 + Dimensions.itemsVerticalPadding * 2), + columns = GridCells.Adaptive(Dimensions.thumbnails.song * 2 + Dimensions.items.verticalPadding * 2), contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - verticalArrangement = Arrangement.spacedBy(Dimensions.itemsVerticalPadding * 2), + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues(), + verticalArrangement = Arrangement.spacedBy(Dimensions.items.verticalPadding * 2), horizontalArrangement = Arrangement.spacedBy( - space = Dimensions.itemsVerticalPadding * 2, + space = Dimensions.items.verticalPadding * 2, alignment = Alignment.CenterHorizontally ), modifier = Modifier @@ -94,30 +93,28 @@ fun HomeArtistList( contentType = 0, span = { GridItemSpan(maxLineSpan) } ) { - Header(title = "Исполнители") { + Header(title = stringResource(R.string.artists)) { HeaderIconButton( icon = R.drawable.text, - color = if (sortBy == ArtistSortBy.Name) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = ArtistSortBy.Name } + color = if (artistSortBy == ArtistSortBy.Name) colorPalette.text + else colorPalette.textDisabled, + onClick = { artistSortBy = ArtistSortBy.Name } ) HeaderIconButton( icon = R.drawable.time, - color = if (sortBy == ArtistSortBy.DateAdded) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = ArtistSortBy.DateAdded } + color = if (artistSortBy == ArtistSortBy.DateAdded) colorPalette.text + else colorPalette.textDisabled, + onClick = { artistSortBy = ArtistSortBy.DateAdded } ) - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) HeaderIconButton( icon = R.drawable.arrow_up, color = colorPalette.text, - onClick = { sortOrder = !sortOrder }, - modifier = Modifier - .graphicsLayer { rotationZ = sortOrderIconRotation } + onClick = { artistSortOrder = !artistSortOrder }, + modifier = Modifier.graphicsLayer { rotationZ = sortOrderIconRotation } ) } } @@ -125,8 +122,7 @@ fun HomeArtistList( items(items = items, key = Artist::id) { artist -> ArtistItem( artist = artist, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.song * 2, alternative = true, modifier = Modifier .clickable(onClick = { onArtistClick(artist) }) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeDiscovery.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeDiscovery.kt new file mode 100644 index 0000000..74da549 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeDiscovery.kt @@ -0,0 +1,276 @@ +package it.hamy.muza.ui.screens.home + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.BasicText +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.times +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.requests.discoverPage +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.ui.components.NavigationAd +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.screens.Route +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.shimmer +import it.hamy.muza.utils.center +import it.hamy.muza.utils.color +import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.rememberSnapLayoutInfoProvider +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold + +@OptIn(ExperimentalFoundationApi::class) +@Route +@Composable +fun HomeDiscovery( + onMoodClick: (mood: Innertube.Mood.Item) -> Unit, + onNewReleaseAlbumClick: (String) -> Unit, + onSearchClick: () -> Unit +) { + val (colorPalette, typography) = LocalAppearance.current + val windowInsets = LocalPlayerAwareWindowInsets.current + + val scrollState = rememberScrollState() + val lazyGridState = rememberLazyGridState() + + val endPaddingValues = windowInsets.only(WindowInsetsSides.End).asPaddingValues() + + val sectionTextModifier = Modifier + .padding(horizontal = 16.dp) + .padding(top = 24.dp, bottom = 8.dp) + .padding(endPaddingValues) + + var discoverPage by persist>("home/discovery") + + LaunchedEffect(Unit) { + if (discoverPage?.isSuccess != true) + discoverPage = Innertube.discoverPage() + } + + BoxWithConstraints { + val moodItemWidthFactor = if (isLandscape && maxWidth * 0.475f >= 320.dp) 0.475f else 0.75f + + val snapLayoutInfoProvider = rememberSnapLayoutInfoProvider( + lazyGridState = lazyGridState, + positionInLayout = { layoutSize, itemSize -> + layoutSize * moodItemWidthFactor / 2f - itemSize / 2f + } + ) + + val itemWidth = maxWidth * moodItemWidthFactor + + Column( + modifier = Modifier + .background(colorPalette.background0) + .fillMaxSize() + .verticalScroll(scrollState) + .padding( + windowInsets + .only(WindowInsetsSides.Vertical) + .asPaddingValues() + ) + ) { + Header( + title = stringResource(R.string.discover), + modifier = Modifier.padding(endPaddingValues) + ) + + discoverPage?.getOrNull()?.let { page -> + if (page.moods.isNotEmpty()) { + BasicText( + text = stringResource(R.string.moods_and_genres), + style = typography.m.semiBold, + modifier = sectionTextModifier + ) + + LazyHorizontalGrid( + state = lazyGridState, + rows = GridCells.Fixed(4), + flingBehavior = rememberSnapFlingBehavior(snapLayoutInfoProvider), + contentPadding = endPaddingValues, + modifier = Modifier + .fillMaxWidth() + .height((4 * (64 + 4)).dp) + ) { + items( + items = page.moods.sortedBy { it.title }, + key = { it.endpoint.params ?: it.title } + ) { + MoodItem( + mood = it, + onClick = { it.endpoint.browseId?.let { _ -> onMoodClick(it) } }, + modifier = Modifier + .width(itemWidth) + .padding(4.dp) + ) + } + } + Box( + modifier = Modifier + .fillMaxSize() + .padding(start = 5.dp, end = 5.dp, top = 5.dp), + contentAlignment = Alignment.Center, + ) { + NavigationAd(id = "R-M-5961316-3") + } + } + + if (page.newReleaseAlbums.isNotEmpty()) { + BasicText( + text = stringResource(R.string.new_released_albums), + style = typography.m.semiBold, + modifier = sectionTextModifier + ) + + LazyRow(contentPadding = endPaddingValues) { + items(items = page.newReleaseAlbums, key = { it.key }) { + AlbumItem( + album = it, + thumbnailSize = Dimensions.thumbnails.album, + alternative = true, + modifier = Modifier.clickable(onClick = { onNewReleaseAlbumClick(it.key) }) + ) + } + } + } + } ?: discoverPage?.exceptionOrNull()?.let { + BasicText( + text = stringResource(R.string.error_message), + style = typography.s.secondary.center, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(all = 16.dp) + ) + } ?: ShimmerHost { + TextPlaceholder(modifier = sectionTextModifier) + LazyHorizontalGrid( + state = lazyGridState, + rows = GridCells.Fixed(4), + flingBehavior = rememberSnapFlingBehavior(snapLayoutInfoProvider), + contentPadding = endPaddingValues, + modifier = Modifier + .fillMaxWidth() + .height(4 * (Dimensions.items.moodHeight + 4.dp)) + ) { + items(16) { + MoodItemPlaceholder( + width = itemWidth, + modifier = Modifier.padding(4.dp) + ) + } + } + TextPlaceholder(modifier = sectionTextModifier) + Row { + repeat(2) { + AlbumItemPlaceholder( + thumbnailSize = Dimensions.thumbnails.album, + alternative = true + ) + } + } + } + } + + FloatingActionsContainerWithScrollToTop( + scrollState = scrollState, + iconId = R.drawable.search, + onClick = onSearchClick + ) + } +} + +@Composable +fun MoodItem( + mood: Innertube.Mood.Item, + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape + + val color by remember { derivedStateOf { Color(mood.stripeColor) } } + + ElevatedCard( + modifier = modifier.height(Dimensions.items.moodHeight), + shape = thumbnailShape, + colors = CardDefaults.elevatedCardColors(containerColor = color) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .clickable { onClick() }, + contentAlignment = Alignment.CenterStart + ) { + BasicText( + text = mood.title, + style = typography.xs.semiBold.color( + if (color.luminance() >= 0.5f) Color.Black else Color.White + ), + modifier = Modifier.padding(start = 24.dp) + ) + } + } +} + +@Composable +fun MoodItemPlaceholder( + width: Dp, + modifier: Modifier = Modifier +) = Spacer( + modifier = modifier + .background( + color = LocalAppearance.current.colorPalette.shimmer, + shape = LocalAppearance.current.thumbnailShape + ) + .size( + width = width, + height = Dimensions.items.moodHeight + ) +) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeLocalSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeLocalSongs.kt new file mode 100644 index 0000000..07fa93d --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeLocalSongs.kt @@ -0,0 +1,185 @@ +package it.hamy.muza.ui.screens.home + +import android.Manifest +import android.content.ContentUris +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.provider.MediaStore +import android.provider.Settings +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import it.hamy.muza.Database +import it.hamy.muza.R +import it.hamy.muza.models.Song +import it.hamy.muza.preferences.OrderPreferences +import it.hamy.muza.service.LOCAL_KEY_PREFIX +import it.hamy.muza.transaction +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.screens.Route +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.get +import it.hamy.muza.utils.hasPermission +import it.hamy.muza.utils.isAtLeastAndroid10 +import it.hamy.muza.utils.isAtLeastAndroid13 +import it.hamy.muza.utils.isCompositionLaunched +import kotlinx.coroutines.CoroutineName +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.currentCoroutineContext +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.isActive +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.seconds + +private val permission = if (isAtLeastAndroid13) Manifest.permission.READ_MEDIA_AUDIO +else Manifest.permission.READ_EXTERNAL_STORAGE + +@Route +@Composable +fun HomeLocalSongs(onSearchClick: () -> Unit) = with(OrderPreferences) { + val context = LocalContext.current + val (_, typography) = LocalAppearance.current + + var hasPermission by remember(isCompositionLaunched()) { + mutableStateOf(context.applicationContext.hasPermission(permission)) + } + val launcher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission(), + onResult = { hasPermission = it } + ) + + LaunchedEffect(hasPermission) { + context.musicFilesAsFlow().collect() + } + + if (hasPermission) HomeSongs( + onSearchClick = onSearchClick, + songProvider = { + Database.songs( + sortBy = localSongSortBy, + sortOrder = localSongSortOrder, + isLocal = true + ).map { songs -> songs.filter { it.durationText != "0:00" } } + }, + sortBy = localSongSortBy, + setSortBy = { localSongSortBy = it }, + sortOrder = localSongSortOrder, + setSortOrder = { localSongSortOrder = it }, + title = stringResource(R.string.local) + ) else { + LaunchedEffect(Unit) { launcher.launch(permission) } + + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(2.dp, Alignment.CenterVertically), + horizontalAlignment = Alignment.CenterHorizontally + ) { + BasicText( + text = stringResource(R.string.media_permission_declined), + modifier = Modifier.fillMaxWidth(0.5f), + style = typography.s + ) + SecondaryTextButton( + text = stringResource(R.string.open_settings), + onClick = { + context.startActivity( + Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + setData(Uri.fromParts("package", context.packageName, null)) + } + ) + } + ) + } + } +} + +private val mediaScope = CoroutineScope(Dispatchers.IO + CoroutineName("MediaStore worker")) +fun Context.musicFilesAsFlow(): StateFlow> = flow { + var version: String? = null + + while (currentCoroutineContext().isActive) { + val newVersion = MediaStore.getVersion(applicationContext) + if (version != newVersion) { + version = newVersion + val collection = + if (isAtLeastAndroid10) MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL) + else MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + val projection = arrayOf( + MediaStore.Audio.Media.IS_MUSIC, + MediaStore.Audio.Media._ID, + MediaStore.Audio.Media.DISPLAY_NAME, + MediaStore.Audio.Media.DURATION, + MediaStore.Audio.Media.ARTIST, + MediaStore.Audio.Media.ALBUM_ID + ) + val sortOrder = "${MediaStore.Audio.Media.DISPLAY_NAME} ASC" + val albumUriBase = Uri.parse("content://media/external/audio/albumart") + + contentResolver.query(collection, projection, null, null, sortOrder) + ?.use { cursor -> + val isMusicIdx = cursor[MediaStore.Audio.Media.IS_MUSIC] + val idIdx = cursor[MediaStore.Audio.Media._ID] + val nameIdx = cursor[MediaStore.Audio.Media.DISPLAY_NAME] + val durationIdx = cursor[MediaStore.Audio.Media.DURATION] + val artistIdx = cursor[MediaStore.Audio.Media.ARTIST] + val albumIdIdx = cursor[MediaStore.Audio.Media.ALBUM_ID] + + buildList { + while (cursor.moveToNext()) { + if (cursor.getInt(isMusicIdx) == 0) continue + val id = cursor.getLong(idIdx) + val name = cursor.getString(nameIdx) + val duration = cursor.getInt(durationIdx) + if (duration == 0) continue + val artist = cursor.getString(artistIdx) + val albumId = cursor.getLong(albumIdIdx) + + val albumUri = ContentUris.withAppendedId(albumUriBase, albumId) + val durationText = + duration.milliseconds.toComponents { minutes, seconds, _ -> + "$minutes:${seconds.toString().padStart(2, '0')}" + } + + add( + Song( + id = "$LOCAL_KEY_PREFIX$id", + title = name, + artistsText = artist, + durationText = durationText, + thumbnailUrl = albumUri.toString() + ) + ) + } + } + }?.let { emit(it) } + } + delay(5.seconds) + } +}.distinctUntilChanged() + .onEach { songs -> transaction { songs.forEach(Database::insert) } } + .stateIn(mediaScope, SharingStarted.Eagerly, listOf()) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt index 8cf70e9..fd47099 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomePlaylists.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.home -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween @@ -9,14 +8,11 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.GridItemSpan @@ -32,207 +28,257 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import it.hamy.compose.persist.persist import it.hamy.compose.persist.persistList +import it.hamy.piped.Piped +import it.hamy.piped.models.Session import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.R import it.hamy.muza.enums.BuiltInPlaylist import it.hamy.muza.enums.PlaylistSortBy import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.PipedSession import it.hamy.muza.models.Playlist import it.hamy.muza.models.PlaylistPreview +import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.preferences.OrderPreferences import it.hamy.muza.query -import it.hamy.muza.ui.components.YandexAdsBanner import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.components.themed.SecondaryTextButton import it.hamy.muza.ui.components.themed.TextFieldDialog import it.hamy.muza.ui.items.PlaylistItem +import it.hamy.muza.ui.screens.Route +import it.hamy.muza.ui.screens.settings.SettingsEntryGroupText +import it.hamy.muza.ui.screens.settings.SettingsGroupSpacer import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.playlistSortByKey -import it.hamy.muza.utils.playlistSortOrderKey -import it.hamy.muza.utils.rememberPreference +import kotlinx.coroutines.async +import it.hamy.piped.models.PlaylistPreview as PipedPlaylistPreview +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import it.hamy.muza.ui.components.PlaylistAd - -@ExperimentalAnimationApi -@ExperimentalFoundationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable - fun HomePlaylists( onBuiltInPlaylist: (BuiltInPlaylist) -> Unit, onPlaylistClick: (Playlist) -> Unit, - onSearchClick: () -> Unit, -) { + onPipedPlaylistClick: (Session, PipedPlaylistPreview) -> Unit, + onSearchClick: () -> Unit +) = with(OrderPreferences) { val (colorPalette) = LocalAppearance.current - var isCreatingANewPlaylist by rememberSaveable { - mutableStateOf(false) - } + var isCreatingANewPlaylist by rememberSaveable { mutableStateOf(false) } - - - if (isCreatingANewPlaylist) { - TextFieldDialog( - hintText = "Введите название плейлиста", - onDismiss = { - isCreatingANewPlaylist = false - }, - onDone = { text -> - query { - Database.insert(Playlist(name = text)) - } + if (isCreatingANewPlaylist) TextFieldDialog( + hintText = stringResource(R.string.enter_playlist_name_prompt), + onDismiss = { isCreatingANewPlaylist = false }, + onDone = { text -> + query { + Database.insert(Playlist(name = text)) } - ) + } + ) + var items by persistList("home/playlists") + var pipedSessions by persist?>>("home/piped") + + LaunchedEffect(playlistSortBy, playlistSortOrder) { + Database.playlistPreviews(playlistSortBy, playlistSortOrder).collect { items = it } } - var sortBy by rememberPreference(playlistSortByKey, PlaylistSortBy.DateAdded) - var sortOrder by rememberPreference(playlistSortOrderKey, SortOrder.Descending) - - var items by persistList("home/playlists") - - LaunchedEffect(sortBy, sortOrder) { - Database.playlistPreviews(sortBy, sortOrder).collect { items = it } + LaunchedEffect(Unit) { + Database.pipedSessions().collect { sessions -> + pipedSessions = sessions.associateWith { session -> + async { + Piped.playlist.list(session = session.toApiSession())?.getOrNull() + } + }.mapValues { (_, value) -> value.await() } + } } val sortOrderIconRotation by animateFloatAsState( - targetValue = if (sortOrder == SortOrder.Ascending) 0f else 180f, - animationSpec = tween(durationMillis = 400, easing = LinearEasing) + targetValue = if (playlistSortOrder == SortOrder.Ascending) 0f else 180f, + animationSpec = tween(durationMillis = 400, easing = LinearEasing), + label = "" ) - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - val lazyGridState = rememberLazyGridState() - Box(modifier = Modifier.fillMaxSize()) { - Column( + Box { + LazyVerticalGrid( + state = lazyGridState, + columns = GridCells.Adaptive(Dimensions.thumbnails.song * 2 + Dimensions.items.verticalPadding * 2), + contentPadding = LocalPlayerAwareWindowInsets.current + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues(), + verticalArrangement = Arrangement.spacedBy(Dimensions.items.verticalPadding * 2), + horizontalArrangement = Arrangement.spacedBy( + space = Dimensions.items.verticalPadding * 2, + alignment = Alignment.CenterHorizontally + ), modifier = Modifier .fillMaxSize() + .background(colorPalette.background0) ) { - LazyVerticalGrid( - state = lazyGridState, - columns = GridCells.Adaptive(Dimensions.thumbnails.song * 2 + Dimensions.itemsVerticalPadding * 2), - contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - verticalArrangement = Arrangement.spacedBy(Dimensions.itemsVerticalPadding * 2), - horizontalArrangement = Arrangement.spacedBy( - space = Dimensions.itemsVerticalPadding * 2, - alignment = Alignment.CenterHorizontally - ), - modifier = Modifier - .fillMaxWidth() - .background(colorPalette.background0) - ) { - item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) { - Header(title = "Плейлисты") { - SecondaryTextButton( - text = "Новый плейлист", - onClick = { isCreatingANewPlaylist = true } - ) + item(key = "header", contentType = 0, span = { GridItemSpan(maxLineSpan) }) { + Header(title = stringResource(R.string.playlists)) { + SecondaryTextButton( + text = stringResource(R.string.new_playlist), + onClick = { isCreatingANewPlaylist = true } + ) - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) - HeaderIconButton( - icon = R.drawable.medical, - color = if (sortBy == PlaylistSortBy.SongCount) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = PlaylistSortBy.SongCount } - ) + HeaderIconButton( + icon = R.drawable.medical, + color = if (playlistSortBy == PlaylistSortBy.SongCount) colorPalette.text + else colorPalette.textDisabled, + onClick = { playlistSortBy = PlaylistSortBy.SongCount } + ) - HeaderIconButton( - icon = R.drawable.text, - color = if (sortBy == PlaylistSortBy.Name) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = PlaylistSortBy.Name } - ) + HeaderIconButton( + icon = R.drawable.text, + color = if (playlistSortBy == PlaylistSortBy.Name) colorPalette.text + else colorPalette.textDisabled, + onClick = { playlistSortBy = PlaylistSortBy.Name } + ) - HeaderIconButton( - icon = R.drawable.time, - color = if (sortBy == PlaylistSortBy.DateAdded) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = PlaylistSortBy.DateAdded } - ) + HeaderIconButton( + icon = R.drawable.time, + color = if (playlistSortBy == PlaylistSortBy.DateAdded) colorPalette.text + else colorPalette.textDisabled, + onClick = { playlistSortBy = PlaylistSortBy.DateAdded } + ) - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) - HeaderIconButton( - icon = R.drawable.arrow_up, - color = colorPalette.text, - onClick = { sortOrder = !sortOrder }, - modifier = Modifier - .graphicsLayer { rotationZ = sortOrderIconRotation } - ) - } - } - - - - - - item(key = "favorites") { - PlaylistItem( - icon = R.drawable.heart, - colorTint = colorPalette.red, - name = "Любимые", - songCount = null, - thumbnailSizeDp = thumbnailSizeDp, - alternative = true, - modifier = Modifier - .clickable(onClick = { onBuiltInPlaylist(BuiltInPlaylist.Favorites) }) - .animateItemPlacement() + HeaderIconButton( + icon = R.drawable.arrow_up, + color = colorPalette.text, + onClick = { playlistSortOrder = !playlistSortOrder }, + modifier = Modifier.graphicsLayer { rotationZ = sortOrderIconRotation } ) } - - item(key = "offline") { - PlaylistItem( - icon = R.drawable.airplane, - colorTint = colorPalette.blue, - name = "Сохранённые", - songCount = null, - thumbnailSizeDp = thumbnailSizeDp, - alternative = true, - modifier = Modifier - .clickable(onClick = { onBuiltInPlaylist(BuiltInPlaylist.Offline) }) - .animateItemPlacement() - ) - } - - items(items = items, key = { it.playlist.id }) { playlistPreview -> - PlaylistItem( - playlist = playlistPreview, - thumbnailSizeDp = thumbnailSizeDp, - thumbnailSizePx = thumbnailSizePx, - alternative = true, - modifier = Modifier - .clickable(onClick = { onPlaylistClick(playlistPreview.playlist) }) - .animateItemPlacement() - ) - } - - item { - Box( - modifier = Modifier - .fillMaxSize() - .padding(start = 14.dp, end = 10.dp, top = 20.dp) - .align(Alignment.CenterHorizontally), - contentAlignment = Alignment.Center, - ) { - YandexAdsBanner(id = "R-M-5961316-1") - } - } - } + item(key = "favorites") { + PlaylistItem( + icon = R.drawable.heart, + colorTint = colorPalette.red, + name = stringResource(R.string.favorites), + songCount = null, + thumbnailSize = Dimensions.thumbnails.playlist, + alternative = true, + modifier = Modifier + .clickable(onClick = { onBuiltInPlaylist(BuiltInPlaylist.Favorites) }) + .animateItemPlacement() + ) + } + item(key = "offline") { + PlaylistItem( + icon = R.drawable.airplane, + colorTint = colorPalette.blue, + name = stringResource(R.string.offline), + songCount = null, + thumbnailSize = Dimensions.thumbnails.playlist, + alternative = true, + modifier = Modifier + .clickable(onClick = { onBuiltInPlaylist(BuiltInPlaylist.Offline) }) + .animateItemPlacement() + ) + } + item(key = "top") { + PlaylistItem( + icon = R.drawable.trending, + colorTint = colorPalette.red, + name = stringResource( + R.string.format_my_top_playlist, + DataPreferences.topListLength + ), + songCount = null, + thumbnailSize = Dimensions.thumbnails.playlist, + alternative = true, + modifier = Modifier + .clickable(onClick = { onBuiltInPlaylist(BuiltInPlaylist.Top) }) + .animateItemPlacement() + ) + } + + items( + items = items, + key = { it.playlist.id } + ) { playlistPreview -> + PlaylistItem( + playlist = playlistPreview, + thumbnailSize = Dimensions.thumbnails.playlist, + alternative = true, + modifier = Modifier + .clickable(onClick = { onPlaylistClick(playlistPreview.playlist) }) + .animateItemPlacement() + ) + } + + item { + Box( + modifier = Modifier + .fillMaxSize() + .padding(start = 5.dp, end = 5.dp, top = 5.dp), + contentAlignment = Alignment.Center, + ) { + PlaylistAd(id = "R-M-5961316-1") + } + } + + pipedSessions + ?.ifEmpty { null } + ?.filter { it.value?.isNotEmpty() == true } + ?.forEach { (session, playlists) -> + item( + key = "piped-header-${session.username}", + contentType = 0, + span = { GridItemSpan(maxLineSpan) } + ) { + SettingsGroupSpacer() + SettingsEntryGroupText(title = session.username) + } + + playlists?.let { + items( + items = playlists, + key = { "piped-${session.username}-${it.id}" } + ) { playlist -> + PlaylistItem( + name = playlist.name, + songCount = playlist.videoCount, + channelName = null, + thumbnailUrl = playlist.thumbnailUrl.toString(), + thumbnailSize = Dimensions.thumbnails.playlist, + alternative = true, + modifier = Modifier + .clickable(onClick = { + onPipedPlaylistClick( + session.toApiSession(), + playlist + ) + }) + .animateItemPlacement() + ) + } + } + } } + FloatingActionsContainerWithScrollToTop( lazyGridState = lazyGridState, iconId = R.drawable.search, diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeQuickPicks.kt similarity index 74% rename from app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt rename to app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeQuickPicks.kt index e11104e..044fbb9 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/QuickPicks.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeQuickPicks.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.home -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -32,12 +31,14 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persist import it.hamy.innertube.Innertube @@ -49,10 +50,11 @@ import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R import it.hamy.muza.models.Song +import it.hamy.muza.preferences.DataPreferences import it.hamy.muza.query import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.QuickpicksAd import it.hamy.muza.ui.components.ShimmerHost -import it.hamy.muza.ui.components.YandexAdsBannerQuickPicksCenter import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu @@ -65,27 +67,26 @@ import it.hamy.muza.ui.items.PlaylistItem import it.hamy.muza.ui.items.PlaylistItemPlaceholder import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.SnapLayoutInfoProvider import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.center import it.hamy.muza.utils.forcePlay import it.hamy.muza.utils.isLandscape +import it.hamy.muza.utils.rememberSnapLayoutInfoProvider import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import kotlinx.coroutines.flow.distinctUntilChanged -import it.hamy.muza.preferences.DataPreferences -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable fun QuickPicks( onAlbumClick: (String) -> Unit, onArtistClick: (String) -> Unit, onPlaylistClick: (String) -> Unit, - onSearchClick: () -> Unit, + onSearchClick: () -> Unit ) { val (colorPalette, typography) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -96,33 +97,21 @@ fun QuickPicks( var relatedPageResult by persist?>(tag = "home/relatedPageResult") - LaunchedEffect(Unit) { - Database.trending().distinctUntilChanged().collect { song -> - if ((song == null && relatedPageResult == null) || trending?.id != song?.id) { - relatedPageResult = - Innertube.relatedPage(NextBody(videoId = (song?.id ?: "J7p4bzqLvCw"))) - } - trending = song - } - } - - LaunchedEffect(DataPreferences.quickPicksSource) { suspend fun handleSong(song: Song?) { if (relatedPageResult == null || trending?.id != song?.id) relatedPageResult = Innertube.relatedPage( - NextBody( - videoId = (song?.id ?: "J7p4bzqLvCw") - ) + body = NextBody(videoId = (song?.id ?: "J7p4bzqLvCw")) ) trending = song } + when (DataPreferences.quickPicksSource) { DataPreferences.QuickPicksSource.Trending -> Database .trending() .distinctUntilChanged() - .collect { handleSong(it) } + .collect { handleSong(it.firstOrNull()) } DataPreferences.QuickPicksSource.LastInteraction -> Database @@ -132,15 +121,6 @@ fun QuickPicks( } } - val songThumbnailSizeDp = Dimensions.thumbnails.song - val songThumbnailSizePx = songThumbnailSizeDp.px - val albumThumbnailSizeDp = 108.dp - val albumThumbnailSizePx = albumThumbnailSizeDp.px - val artistThumbnailSizeDp = 92.dp - val artistThumbnailSizePx = artistThumbnailSizeDp.px - val playlistThumbnailSizeDp = 108.dp - val playlistThumbnailSizePx = playlistThumbnailSizeDp.px - val scrollState = rememberScrollState() val quickPicksLazyGridState = rememberLazyGridState() @@ -152,20 +132,16 @@ fun QuickPicks( .padding(endPaddingValues) BoxWithConstraints { - val quickPicksLazyGridItemWidthFactor = if (isLandscape && maxWidth * 0.475f >= 320.dp) { - 0.475f - } else { - 0.9f - } - val snapLayoutInfoProvider = remember(quickPicksLazyGridState) { - SnapLayoutInfoProvider( - lazyGridState = quickPicksLazyGridState, - positionInLayout = { layoutSize, itemSize -> - (layoutSize * quickPicksLazyGridItemWidthFactor / 2f - itemSize / 2f) - } - ) - } + val quickPicksLazyGridItemWidthFactor = + if (isLandscape && maxWidth * 0.475f >= 320.dp) 0.475f else 0.85f + + val snapLayoutInfoProvider = rememberSnapLayoutInfoProvider( + lazyGridState = quickPicksLazyGridState, + positionInLayout = { layoutSize, itemSize -> + (layoutSize * quickPicksLazyGridItemWidthFactor / 2f - itemSize / 2f) + } + ) val itemInHorizontalGridWidth = maxWidth * quickPicksLazyGridItemWidthFactor @@ -181,9 +157,8 @@ fun QuickPicks( ) ) { Header( - title = "Обзор", - modifier = Modifier - .padding(endPaddingValues) + title = stringResource(R.string.quick_picks), + modifier = Modifier.padding(endPaddingValues) ) relatedPageResult?.getOrNull()?.let { related -> @@ -194,23 +169,11 @@ fun QuickPicks( contentPadding = endPaddingValues, modifier = Modifier .fillMaxWidth() - .height((songThumbnailSizeDp + Dimensions.itemsVerticalPadding * 2) * 4) + .height((Dimensions.thumbnails.song + Dimensions.items.verticalPadding * 2) * 4) ) { trending?.let { song -> item { SongItem( - song = song, - thumbnailSizePx = songThumbnailSizePx, - thumbnailSizeDp = songThumbnailSizeDp, - trailingContent = { - Image( - painter = painterResource(R.drawable.star), - contentDescription = null, - colorFilter = ColorFilter.tint(colorPalette.accent), - modifier = Modifier - .size(16.dp) - ) - }, modifier = Modifier .combinedClickable( onLongClick = { @@ -236,8 +199,17 @@ fun QuickPicks( } ) .animateItemPlacement() - .width(itemInHorizontalGridWidth) - ) + .width(itemInHorizontalGridWidth), + song = song, + thumbnailSize = Dimensions.thumbnails.song + ) { + Image( + painter = painterResource(R.drawable.star), + contentDescription = null, + colorFilter = ColorFilter.tint(colorPalette.accent), + modifier = Modifier.size(16.dp) + ) + } } } @@ -248,8 +220,7 @@ fun QuickPicks( ) { song -> SongItem( song = song, - thumbnailSizePx = songThumbnailSizePx, - thumbnailSizeDp = songThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.song, modifier = Modifier .combinedClickable( onLongClick = { @@ -273,21 +244,21 @@ fun QuickPicks( .width(itemInHorizontalGridWidth) ) } - } + } Box( modifier = Modifier .fillMaxSize() - .padding(start = 0.dp, end = 0.dp, top = 15.dp) - .align(Alignment.CenterHorizontally), + .padding(start = 5.dp, end = 5.dp, top = 15.dp), contentAlignment = Alignment.Center, ) { - YandexAdsBannerQuickPicksCenter(id = "R-M-5961316-5") + QuickpicksAd(id = "R-M-5961316-5") } + related.albums?.let { albums -> BasicText( - text = "Похожие альбомы", + text = stringResource(R.string.related_albums), style = typography.m.semiBold, modifier = sectionTextModifier ) @@ -299,19 +270,18 @@ fun QuickPicks( ) { album -> AlbumItem( album = album, - thumbnailSizePx = albumThumbnailSizePx, - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true, - modifier = Modifier - .clickable(onClick = { onAlbumClick(album.key) }) + modifier = Modifier.clickable(onClick = { onAlbumClick(album.key) }) ) } } } + related.artists?.let { artists -> BasicText( - text = "Похожие исполнители", + text = stringResource(R.string.similar_artists), style = typography.m.semiBold, modifier = sectionTextModifier ) @@ -319,15 +289,13 @@ fun QuickPicks( LazyRow(contentPadding = endPaddingValues) { items( items = artists, - key = Innertube.ArtistItem::key, + key = Innertube.ArtistItem::key ) { artist -> ArtistItem( artist = artist, - thumbnailSizePx = artistThumbnailSizePx, - thumbnailSizeDp = artistThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.artist, alternative = true, - modifier = Modifier - .clickable(onClick = { onArtistClick(artist.key) }) + modifier = Modifier.clickable(onClick = { onArtistClick(artist.key) }) ) } } @@ -335,7 +303,7 @@ fun QuickPicks( related.playlists?.let { playlists -> BasicText( - text = "Плейлисты, которые вам понравятся", + text = stringResource(R.string.recommended_playlists), style = typography.m.semiBold, modifier = Modifier .padding(horizontal = 16.dp) @@ -345,15 +313,13 @@ fun QuickPicks( LazyRow(contentPadding = endPaddingValues) { items( items = playlists, - key = Innertube.PlaylistItem::key, + key = Innertube.PlaylistItem::key ) { playlist -> PlaylistItem( playlist = playlist, - thumbnailSizePx = playlistThumbnailSizePx, - thumbnailSizeDp = playlistThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.playlist, alternative = true, - modifier = Modifier - .clickable(onClick = { onPlaylistClick(playlist.key) }) + modifier = Modifier.clickable(onClick = { onPlaylistClick(playlist.key) }) ) } } @@ -362,7 +328,7 @@ fun QuickPicks( Unit } ?: relatedPageResult?.exceptionOrNull()?.let { BasicText( - text = "Упс, тут какая-то ошЫбочка...", + text = stringResource(R.string.error_message), style = typography.s.secondary.center, modifier = Modifier .align(Alignment.CenterHorizontally) @@ -370,9 +336,7 @@ fun QuickPicks( ) } ?: ShimmerHost { repeat(4) { - SongItemPlaceholder( - thumbnailSizeDp = songThumbnailSizeDp, - ) + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) } TextPlaceholder(modifier = sectionTextModifier) @@ -380,7 +344,7 @@ fun QuickPicks( Row { repeat(2) { AlbumItemPlaceholder( - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true ) } @@ -391,7 +355,7 @@ fun QuickPicks( Row { repeat(2) { ArtistItemPlaceholder( - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true ) } @@ -402,7 +366,7 @@ fun QuickPicks( Row { repeat(2) { PlaylistItemPlaceholder( - thumbnailSizeDp = albumThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.album, alternative = true ) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt index 92aa3a6..64f45c0 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeScreen.kt @@ -1,10 +1,9 @@ package it.hamy.muza.ui.screens.home import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.routing.RouteHandler import it.hamy.compose.routing.defaultStacking @@ -16,15 +15,21 @@ import it.hamy.compose.routing.isUnstacking import it.hamy.muza.Database import it.hamy.muza.R import it.hamy.muza.models.SearchQuery +import it.hamy.muza.models.toUiMood +import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.preferences.UIStatePreferences import it.hamy.muza.query import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.screens.albumRoute import it.hamy.muza.ui.screens.artistRoute import it.hamy.muza.ui.screens.builtInPlaylistRoute import it.hamy.muza.ui.screens.builtinplaylist.BuiltInPlaylistScreen -import it.hamy.muza.ui.screens.globalRoutes import it.hamy.muza.ui.screens.localPlaylistRoute import it.hamy.muza.ui.screens.localplaylist.LocalPlaylistScreen +import it.hamy.muza.ui.screens.moodRoute +import it.hamy.muza.ui.screens.pipedPlaylistRoute import it.hamy.muza.ui.screens.playlistRoute import it.hamy.muza.ui.screens.search.SearchScreen import it.hamy.muza.ui.screens.searchResultRoute @@ -32,13 +37,9 @@ import it.hamy.muza.ui.screens.searchRoute import it.hamy.muza.ui.screens.searchresult.SearchResultScreen import it.hamy.muza.ui.screens.settings.SettingsScreen import it.hamy.muza.ui.screens.settingsRoute -import it.hamy.muza.utils.homeScreenTabIndexKey -import it.hamy.muza.utils.pauseSearchHistoryKey -import it.hamy.muza.utils.preferences -import it.hamy.muza.utils.rememberPreference -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalAnimationApi::class) +@Route @Composable fun HomeScreen(onPlaylistUrl: (String) -> Unit) { val saveableStateHolder = rememberSaveableStateHolder() @@ -61,7 +62,7 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { } } ) { - globalRoutes() + GlobalRoutes() settingsRoute { SettingsScreen() @@ -82,77 +83,86 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { searchResultRoute { query -> SearchResultScreen( query = query, - onSearchAgain = { - searchRoute(query) - } + onSearchAgain = { searchRoute(query) } ) } searchRoute { initialTextInput -> - val context = LocalContext.current - SearchScreen( initialTextInput = initialTextInput, onSearch = { query -> pop() searchResultRoute(query) - if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) { - query { - Database.insert(SearchQuery(query = query)) - } + if (!DataPreferences.pauseSearchHistory) query { + Database.insert(SearchQuery(query = query)) } }, onViewPlaylist = onPlaylistUrl ) } - host { - val (tabIndex, onTabChanged) = rememberPreference( - homeScreenTabIndexKey, - defaultValue = 0 - ) - + NavHost { Scaffold( - topIconButtonId = R.drawable.equalizer, + topIconButtonId = R.drawable.settings, onTopIconButtonClick = { settingsRoute() }, - tabIndex = tabIndex, - onTabChanged = onTabChanged, - tabColumnContent = { Item -> - Item(0, "Обзор", R.drawable.sparkles) - Item(1, "Песни", R.drawable.musical_notes) - Item(2, "Плейлисты", R.drawable.playlist) - Item(3, "Исполнители", R.drawable.person) - Item(4, "Альбомы", R.drawable.disc) + tabIndex = UIStatePreferences.homeScreenTabIndex, + onTabChanged = { UIStatePreferences.homeScreenTabIndex = it }, + tabColumnContent = { item -> + item(0, stringResource(R.string.quick_picks), R.drawable.sparkles) + item(1, stringResource(R.string.discover), R.drawable.globe) + item(2, stringResource(R.string.songs), R.drawable.musical_notes) + item(3, stringResource(R.string.playlists), R.drawable.playlist) + item(4, stringResource(R.string.artists), R.drawable.person) + item(5, stringResource(R.string.albums), R.drawable.disc) + item(6, stringResource(R.string.local), R.drawable.download) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { + val onSearchClick = { searchRoute("") } when (currentTabIndex) { 0 -> QuickPicks( onAlbumClick = { albumRoute(it) }, onArtistClick = { artistRoute(it) }, onPlaylistClick = { playlistRoute(it) }, - onSearchClick = { searchRoute("") } + onSearchClick = onSearchClick ) - 1 -> HomeSongs( - onSearchClick = { searchRoute("") } + 1 -> HomeDiscovery( + onMoodClick = { mood -> moodRoute(mood.toUiMood()) }, + onNewReleaseAlbumClick = { albumRoute(it) }, + onSearchClick = onSearchClick ) - 2 -> HomePlaylists( + 2 -> HomeSongs( + onSearchClick = onSearchClick + ) + + 3 -> HomePlaylists( onBuiltInPlaylist = { builtInPlaylistRoute(it) }, onPlaylistClick = { localPlaylistRoute(it.id) }, - onSearchClick = { searchRoute("") } + onPipedPlaylistClick = { session, playlist -> + pipedPlaylistRoute( + p0 = session.apiBaseUrl.toString(), + p1 = session.token, + p2 = playlist.id.toString() + ) + }, + onSearchClick = onSearchClick ) - 3 -> HomeArtistList( + 4 -> HomeArtistList( onArtistClick = { artistRoute(it.id) }, - onSearchClick = { searchRoute("") } + onSearchClick = onSearchClick ) - 4 -> HomeAlbums( + 5 -> HomeAlbums( onAlbumClick = { albumRoute(it.id) }, - onSearchClick = { searchRoute("") } + onSearchClick = onSearchClick + ) + + 6 -> HomeLocalSongs( + onSearchClick = onSearchClick ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt index fb1913f..867b51c 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/home/HomeSongs.kt @@ -1,6 +1,7 @@ package it.hamy.muza.ui.screens.home -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.annotation.OptIn +import androidx.compose.animation.AnimatedContent import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween @@ -8,6 +9,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues @@ -17,20 +19,36 @@ import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.text.BasicText +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.pluralStringResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import androidx.media3.common.util.UnstableApi import it.hamy.compose.persist.persistList import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets @@ -39,51 +57,105 @@ import it.hamy.muza.R import it.hamy.muza.enums.SongSortBy import it.hamy.muza.enums.SortOrder import it.hamy.muza.models.Song +import it.hamy.muza.preferences.AppearancePreferences +import it.hamy.muza.preferences.OrderPreferences +import it.hamy.muza.service.isLocal +import it.hamy.muza.transaction import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.components.themed.InHistoryMediaItemMenu +import it.hamy.muza.ui.components.themed.TextField import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.modifiers.swipeToClose +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.onOverlay import it.hamy.muza.ui.styling.overlay -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.center import it.hamy.muza.utils.color import it.hamy.muza.utils.forcePlayAtIndex -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold -import it.hamy.muza.utils.songSortByKey -import it.hamy.muza.utils.songSortOrderKey +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +private val Song.formattedTotalPlayTime: String + @Composable get() { + val seconds = totalPlayTimeMs / 1000 + + val hours = seconds / 3600 + + return when { + hours == 0L -> stringResource(id = R.string.format_minutes, seconds / 60) + hours < 24L -> stringResource(id = R.string.format_hours, hours) + else -> stringResource(id = R.string.format_days, hours / 24) + } + } -@ExperimentalFoundationApi -@ExperimentalAnimationApi @Composable fun HomeSongs( onSearchClick: () -> Unit +) = with(OrderPreferences) { + HomeSongs( + onSearchClick = onSearchClick, + songProvider = { + Database.songs(songSortBy, songSortOrder) + .map { songs -> songs.filter { it.totalPlayTimeMs > 0L } } + }, + sortBy = songSortBy, + setSortBy = { songSortBy = it }, + sortOrder = songSortOrder, + setSortOrder = { songSortOrder = it }, + title = stringResource(R.string.songs) + ) +} + +@kotlin.OptIn(ExperimentalFoundationApi::class) +@OptIn(UnstableApi::class) +@Route +@Composable +fun HomeSongs( + onSearchClick: () -> Unit, + songProvider: () -> Flow>, + sortBy: SongSortBy, + setSortBy: (SongSortBy) -> Unit, + sortOrder: SortOrder, + setSortOrder: (SortOrder) -> Unit, + title: String ) { - val (colorPalette, typography, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape + val binder = LocalPlayerServiceBinder.current val menuState = LocalMenuState.current + val focusManager = LocalFocusManager.current + val keyboardController = LocalSoftwareKeyboardController.current - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - - var sortBy by rememberPreference(songSortByKey, SongSortBy.DateAdded) - var sortOrder by rememberPreference(songSortOrderKey, SortOrder.Descending) - + var filter: String? by rememberSaveable { mutableStateOf(null) } var items by persistList("home/songs") + val filteredItems by remember { + derivedStateOf { + filter?.lowercase()?.ifBlank { null }?.let { f -> + items.filter { + f in it.title.lowercase() || f in it.artistsText?.lowercase().orEmpty() + }.sortedBy { it.title } + } ?: items + } + } LaunchedEffect(sortBy, sortOrder) { - Database.songs(sortBy, sortOrder).collect { items = it } + songProvider().collect { items = it } } val sortOrderIconRotation by animateFloatAsState( targetValue = if (sortOrder == SortOrder.Ascending) 0f else 180f, - animationSpec = tween(durationMillis = 400, easing = LinearEasing) + animationSpec = tween(durationMillis = 400, easing = LinearEasing), + label = "" ) val lazyListState = rememberLazyListState() @@ -96,75 +168,110 @@ fun HomeSongs( LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues() ) { item( key = "header", contentType = 0 ) { - Header(title = "Песни") { + Header(title = title) { + var searching by rememberSaveable { mutableStateOf(false) } + + AnimatedContent( + targetState = searching, + label = "" + ) { state -> + if (state) { + val focusRequester = remember { FocusRequester() } + + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + TextField( + value = filter.orEmpty(), + onValueChange = { filter = it }, + singleLine = true, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), + keyboardActions = KeyboardActions(onSearch = { + if (filter.isNullOrBlank()) filter = "" + focusManager.clearFocus() + searching = false + }), + hintText = stringResource(R.string.filter_placeholder), + modifier = Modifier + .focusRequester(focusRequester) + .onFocusChanged { + if (!it.hasFocus) { + keyboardController?.hide() + if (filter?.isBlank() == true) { + filter = null + searching = false + } + } + } + ) + } else Row(verticalAlignment = Alignment.CenterVertically) { + HeaderIconButton( + onClick = { searching = true }, + icon = R.drawable.search, + color = colorPalette.text + ) + + Spacer(modifier = Modifier.width(8.dp)) + + if (items.isNotEmpty()) BasicText( + text = pluralStringResource( + R.plurals.song_count_plural, + items.size, + items.size + ), + style = typography.xs.secondary.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + } + + Spacer(modifier = Modifier.weight(1f)) + HeaderIconButton( icon = R.drawable.trending, color = if (sortBy == SongSortBy.PlayTime) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = SongSortBy.PlayTime } + onClick = { setSortBy(SongSortBy.PlayTime) } ) HeaderIconButton( icon = R.drawable.text, color = if (sortBy == SongSortBy.Title) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = SongSortBy.Title } + onClick = { setSortBy(SongSortBy.Title) } ) HeaderIconButton( icon = R.drawable.time, color = if (sortBy == SongSortBy.DateAdded) colorPalette.text else colorPalette.textDisabled, - onClick = { sortBy = SongSortBy.DateAdded } - ) - - Spacer( - modifier = Modifier - .width(2.dp) + onClick = { setSortBy(SongSortBy.DateAdded) } ) HeaderIconButton( icon = R.drawable.arrow_up, color = colorPalette.text, - onClick = { sortOrder = !sortOrder }, - modifier = Modifier - .graphicsLayer { rotationZ = sortOrderIconRotation } + onClick = { setSortOrder(!sortOrder) }, + modifier = Modifier.graphicsLayer { rotationZ = sortOrderIconRotation } ) } } - itemsIndexed( - items = items, - key = { _, song -> song.id } - ) { index, song -> + items( + items = filteredItems, + key = { song -> song.id } + ) { song -> SongItem( - song = song, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - onThumbnailContent = if (sortBy == SongSortBy.PlayTime) ({ - BasicText( - text = song.formattedTotalPlayTime, - style = typography.xxs.semiBold.center.color(colorPalette.onOverlay), - maxLines = 2, - overflow = TextOverflow.Ellipsis, - modifier = Modifier - .fillMaxWidth() - .background( - brush = Brush.verticalGradient( - colors = listOf(Color.Transparent, colorPalette.overlay) - ), - shape = thumbnailShape - ) - .padding(horizontal = 8.dp, vertical = 4.dp) - .align(Alignment.BottomCenter) - ) - }) else null, modifier = Modifier .combinedClickable( onLongClick = { + keyboardController?.hide() menuState.display { InHistoryMediaItemMenu( song = song, @@ -173,14 +280,52 @@ fun HomeSongs( } }, onClick = { + keyboardController?.hide() binder?.stopRadio() binder?.player?.forcePlayAtIndex( items.map(Song::asMediaItem), - index + items.indexOf(song) ) } ) .animateItemPlacement() + .let { + if (!song.isLocal && AppearancePreferences.swipeToHideSong) it.swipeToClose( + key = filteredItems, + onClose = { animationJob -> + binder?.cache?.removeResource(song.id) + transaction { + Database.delete(song) + } + animationJob.join() + } + ) else it + }, + song = song, + thumbnailSize = Dimensions.thumbnails.song, + onThumbnailContent = if (sortBy == SongSortBy.PlayTime) { + { + BasicText( + text = song.formattedTotalPlayTime, + style = typography.xxs.semiBold.center.color(colorPalette.onOverlay), + maxLines = 2, + overflow = TextOverflow.Ellipsis, + modifier = Modifier + .fillMaxWidth() + .background( + brush = Brush.verticalGradient( + colors = listOf(Color.Transparent, colorPalette.overlay) + ), + shape = thumbnailShape.copy( + topStart = CornerSize(0.dp), + topEnd = CornerSize(0.dp) + ) + ) + .padding(horizontal = 8.dp, vertical = 4.dp) + .align(Alignment.BottomCenter) + ) + } + } else null ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt index 11118a0..a057edd 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistScreen.kt @@ -1,34 +1,33 @@ package it.hamy.muza.ui.screens.localplaylist -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.res.stringResource import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.routing.RouteHandler import it.hamy.muza.R import it.hamy.muza.ui.components.themed.Scaffold -import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable fun LocalPlaylistScreen(playlistId: Long) { val saveableStateHolder = rememberSaveableStateHolder() - PersistMapCleanup(tagPrefix = "localPlaylist/$playlistId/") + PersistMapCleanup(prefix = "localPlaylist/$playlistId/") RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, tabIndex = 0, onTabChanged = { }, - tabColumnContent = { Item -> - Item(0, "Песни", R.drawable.musical_notes) + tabColumnContent = { item -> + item(0, stringResource(R.string.songs), R.drawable.musical_notes) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt index 943e63f..e41a411 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/localplaylist/LocalPlaylistSongs.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.localplaylist -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -11,10 +10,9 @@ import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -22,21 +20,23 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.LookaheadScope +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persist -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.bodies.BrowseBody -import it.hamy.innertube.requests.playlistPage -import it.hamy.compose.reordering.ReorderingLazyColumn import it.hamy.compose.reordering.animateItemPlacement import it.hamy.compose.reordering.draggedItem import it.hamy.compose.reordering.rememberReorderingState -import it.hamy.compose.reordering.reorder +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.requests.playlistPage import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R -import it.hamy.muza.models.PlaylistWithSongs +import it.hamy.muza.models.Playlist import it.hamy.muza.models.Song import it.hamy.muza.models.SongPlaylistMap import it.hamy.muza.query @@ -46,48 +46,66 @@ import it.hamy.muza.ui.components.themed.ConfirmationDialog import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.HeaderIconButton -import it.hamy.muza.ui.components.themed.IconButton import it.hamy.muza.ui.components.themed.InPlaylistMediaItemMenu import it.hamy.muza.ui.components.themed.Menu import it.hamy.muza.ui.components.themed.MenuEntry +import it.hamy.muza.ui.components.themed.ReorderHandle import it.hamy.muza.ui.components.themed.SecondaryTextButton import it.hamy.muza.ui.components.themed.TextFieldDialog import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.PlaylistDownloadIcon import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.completed import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.forcePlayAtIndex import it.hamy.muza.utils.forcePlayFromBeginning +import it.hamy.muza.utils.launchYouTubeMusic +import it.hamy.muza.utils.toast +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext -@ExperimentalAnimationApi -@ExperimentalFoundationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun LocalPlaylistSongs( playlistId: Long, onDelete: () -> Unit, + modifier: Modifier = Modifier ) { val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current val menuState = LocalMenuState.current + val uriHandler = LocalUriHandler.current + val context = LocalContext.current - var playlistWithSongs by persist("localPlaylist/$playlistId/playlistWithSongs") + var playlist by persist("localPlaylist/$playlistId/playlist") + var songs by persist?>("localPlaylist/$playlistId/Songs") LaunchedEffect(Unit) { - Database.playlistWithSongs(playlistId).filterNotNull().collect { playlistWithSongs = it } + Database + .playlist(playlistId) + .filterNotNull() + .distinctUntilChanged() + .collect { playlist = it } + } + + LaunchedEffect(Unit) { + Database + .playlistSongs(playlistId) + .filterNotNull() + .distinctUntilChanged() + .collect { songs = it } } val lazyListState = rememberLazyListState() val reorderingState = rememberReorderingState( lazyListState = lazyListState, - key = playlistWithSongs?.songs ?: emptyList(), + key = songs ?: emptyList(), onDragEnd = { fromIndex, toIndex -> query { Database.move(playlistId, fromIndex, toIndex) @@ -96,186 +114,210 @@ fun LocalPlaylistSongs( extraItemCount = 1 ) - var isRenaming by rememberSaveable { - mutableStateOf(false) - } + var isRenaming by rememberSaveable { mutableStateOf(false) } - if (isRenaming) { - TextFieldDialog( - hintText = "Введите название плейлиста", - initialTextInput = playlistWithSongs?.playlist?.name ?: "", - onDismiss = { isRenaming = false }, - onDone = { text -> - query { - playlistWithSongs?.playlist?.copy(name = text)?.let(Database::update) - } + if (isRenaming) TextFieldDialog( + hintText = stringResource(R.string.enter_playlist_name_prompt), + initialTextInput = playlist?.name.orEmpty(), + onDismiss = { isRenaming = false }, + onDone = { text -> + query { + playlist?.copy(name = text)?.let(Database::update) } - ) - } + } + ) - var isDeleting by rememberSaveable { - mutableStateOf(false) - } + var isDeleting by rememberSaveable { mutableStateOf(false) } - if (isDeleting) { - ConfirmationDialog( - text = "Вы реально хотите удалить этот плейлист?", - onDismiss = { isDeleting = false }, - onConfirm = { - query { - playlistWithSongs?.playlist?.let(Database::delete) - } - onDelete() + if (isDeleting) ConfirmationDialog( + text = stringResource(R.string.confirm_delete_playlist), + onDismiss = { isDeleting = false }, + onConfirm = { + query { + playlist?.let(Database::delete) } - ) - } + onDelete() + } + ) - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - - val rippleIndication = rememberRipple(bounded = false) - - Box { - ReorderingLazyColumn( - reorderingState = reorderingState, - contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - ) { - item( - key = "header", - contentType = 0 + Box(modifier = modifier) { + LookaheadScope { + LazyColumn( + state = reorderingState.lazyListState, + contentPadding = LocalPlayerAwareWindowInsets.current + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + modifier = Modifier + .background(colorPalette.background0) + .fillMaxSize() ) { - Header( - title = playlistWithSongs?.playlist?.name ?: "Неизвестный", - modifier = Modifier - .padding(bottom = 8.dp) + item( + key = "header", + contentType = 0 ) { - SecondaryTextButton( - text = "Enqueue", - enabled = playlistWithSongs?.songs?.isNotEmpty() == true, - onClick = { - playlistWithSongs?.songs - ?.map(Song::asMediaItem) - ?.let { mediaItems -> - binder?.player?.enqueue(mediaItems) - } - } - ) + Header( + title = playlist?.name + ?: stringResource(R.string.unknown), + modifier = Modifier.padding(bottom = 8.dp) + ) { + SecondaryTextButton( + text = stringResource(R.string.enqueue), + enabled = songs?.isNotEmpty() == true, + onClick = { + songs?.map(Song::asMediaItem) + ?.let { mediaItems -> + binder?.player?.enqueue(mediaItems) + } + } + ) - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) - HeaderIconButton( - icon = R.drawable.ellipsis_horizontal, - color = colorPalette.text, - onClick = { - menuState.display { - Menu { - playlistWithSongs?.playlist?.browseId?.let { browseId -> - MenuEntry( - icon = R.drawable.sync, - text = "Синхр.", - onClick = { - menuState.hide() - transaction { - runBlocking(Dispatchers.IO) { - withContext(Dispatchers.IO) { - Innertube.playlistPage(BrowseBody(browseId = browseId)) - ?.completed() - } - }?.getOrNull()?.let { remotePlaylist -> - Database.clearPlaylist(playlistId) + songs?.map(Song::asMediaItem) + ?.let { PlaylistDownloadIcon(songs = it.toImmutableList()) } - remotePlaylist.songsPage - ?.items - ?.map(Innertube.SongItem::asMediaItem) - ?.onEach(Database::insert) - ?.mapIndexed { position, mediaItem -> - SongPlaylistMap( - songId = mediaItem.mediaId, - playlistId = playlistId, - position = position + HeaderIconButton( + icon = R.drawable.ellipsis_horizontal, + color = colorPalette.text, + onClick = { + menuState.display { + Menu { + playlist?.browseId?.let { browseId -> + MenuEntry( + icon = R.drawable.sync, + text = stringResource(R.string.sync), + onClick = { + menuState.hide() + transaction { + runBlocking(Dispatchers.IO) { + Innertube.playlistPage( + BrowseBody( + browseId = browseId ) - }?.let(Database::insertSongPlaylistMaps) + )?.completed() + }?.getOrNull()?.let { remotePlaylist -> + Database.clearPlaylist(playlistId) + + remotePlaylist.songsPage + ?.items + ?.map(Innertube.SongItem::asMediaItem) + ?.onEach(Database::insert) + ?.mapIndexed { position, mediaItem -> + SongPlaylistMap( + songId = mediaItem.mediaId, + playlistId = playlistId, + position = position + ) + } + ?.let(Database::insertSongPlaylistMaps) + } } } + ) + + songs?.firstOrNull()?.id?.let { firstSongId -> + MenuEntry( + icon = R.drawable.play, + text = stringResource(R.string.watch_playlist_on_youtube), + onClick = { + menuState.hide() + binder?.player?.pause() + uriHandler.openUri( + "https://youtube.com/watch?v=$firstSongId&list=${ + playlist?.browseId + ?.drop(2) + }" + ) + } + ) + + MenuEntry( + icon = R.drawable.musical_notes, + text = stringResource(R.string.open_in_youtube_music), + onClick = { + menuState.hide() + binder?.player?.pause() + if ( + !launchYouTubeMusic( + context = context, + endpoint = "watch?v=$firstSongId&list=${ + playlist?.browseId + ?.drop(2) + }" + ) + ) context.toast( + context.getString(R.string.youtube_music_not_installed) + ) + } + ) + } + } + + MenuEntry( + icon = R.drawable.pencil, + text = stringResource(R.string.rename), + onClick = { + menuState.hide() + isRenaming = true + } + ) + + MenuEntry( + icon = R.drawable.trash, + text = stringResource(R.string.delete), + onClick = { + menuState.hide() + isDeleting = true } ) } - - MenuEntry( - icon = R.drawable.pencil, - text = "Переименовать", - onClick = { - menuState.hide() - isRenaming = true - } - ) - - MenuEntry( - icon = R.drawable.trash, - text = "Удалить", - onClick = { - menuState.hide() - isDeleting = true - } - ) } } - } - ) + ) + } } - } - itemsIndexed( - items = playlistWithSongs?.songs ?: emptyList(), - key = { _, song -> song.id }, - contentType = { _, song -> song }, - ) { index, song -> - SongItem( - song = song, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - trailingContent = { - IconButton( - icon = R.drawable.reorder, - color = colorPalette.textDisabled, - indication = rippleIndication, - onClick = {}, - modifier = Modifier - .reorder(reorderingState = reorderingState, index = index) - .size(18.dp) - ) - }, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - InPlaylistMediaItemMenu( - playlistId = playlistId, - positionInPlaylist = index, - song = song, - onDismiss = menuState::hide - ) - } - }, - onClick = { - playlistWithSongs?.songs - ?.map(Song::asMediaItem) - ?.let { mediaItems -> - binder?.stopRadio() - binder?.player?.forcePlayAtIndex(mediaItems, index) + itemsIndexed( + items = songs ?: emptyList(), + key = { _, song -> song.id }, + contentType = { _, song -> song } + ) { index, song -> + SongItem( + modifier = Modifier + .combinedClickable( + onLongClick = { + menuState.display { + InPlaylistMediaItemMenu( + playlistId = playlistId, + positionInPlaylist = index, + song = song, + onDismiss = menuState::hide + ) } - } + }, + onClick = { + songs + ?.map(Song::asMediaItem) + ?.let { mediaItems -> + binder?.stopRadio() + binder?.player?.forcePlayAtIndex(mediaItems, index) + } + } + ) + .animateItemPlacement(reorderingState) + .draggedItem( + reorderingState = reorderingState, + index = index + ) + .background(colorPalette.background0), + song = song, + thumbnailSize = Dimensions.thumbnails.song + ) { + ReorderHandle( + reorderingState = reorderingState, + index = index ) - .animateItemPlacement(reorderingState = reorderingState) - .draggedItem(reorderingState = reorderingState, index = index) - ) + } + } } } @@ -284,7 +326,7 @@ fun LocalPlaylistSongs( iconId = R.drawable.shuffle, visible = !reorderingState.isDragging, onClick = { - playlistWithSongs?.songs?.let { songs -> + songs?.let { songs -> if (songs.isNotEmpty()) { binder?.stopRadio() binder?.player?.forcePlayFromBeginning( diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodList.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodList.kt new file mode 100644 index 0000000..06a592e --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodList.kt @@ -0,0 +1,177 @@ +package it.hamy.muza.ui.screens.mood + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.text.BasicText +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.valentinilk.shimmer.shimmer +import it.hamy.compose.persist.persist +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.requests.BrowseResult +import it.hamy.innertube.requests.browse +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R +import it.hamy.muza.models.Mood +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.items.AlbumItem +import it.hamy.muza.ui.items.AlbumItemPlaceholder +import it.hamy.muza.ui.items.ArtistItem +import it.hamy.muza.ui.items.PlaylistItem +import it.hamy.muza.ui.screens.albumRoute +import it.hamy.muza.ui.screens.artistRoute +import it.hamy.muza.ui.screens.playlistRoute +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.center +import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.semiBold + +internal const val DEFAULT_BROWSE_ID = "FEmusic_moods_and_genres_category" + +@Composable +fun MoodList( + mood: Mood, + modifier: Modifier = Modifier +) { + val (colorPalette, typography) = LocalAppearance.current + val windowInsets = LocalPlayerAwareWindowInsets.current + + val browseId = mood.browseId ?: DEFAULT_BROWSE_ID + var moodPage by persist>("playlist/$browseId${mood.params?.let { "/$it" }.orEmpty()}") + + LaunchedEffect(Unit) { + if (moodPage?.isSuccess != true) + moodPage = Innertube.browse(BrowseBody(browseId = browseId, params = mood.params)) + } + + val lazyListState = rememberLazyListState() + + val endPaddingValues = windowInsets.only(WindowInsetsSides.End).asPaddingValues() + + val sectionTextModifier = Modifier + .padding(horizontal = 16.dp) + .padding(top = 24.dp, bottom = 8.dp) + .padding(endPaddingValues) + + Column(modifier = modifier) { + moodPage?.getOrNull()?.let { moodResult -> + LazyColumn( + state = lazyListState, + contentPadding = LocalPlayerAwareWindowInsets.current + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + modifier = Modifier + .background(colorPalette.background0) + .fillMaxSize() + ) { + item( + key = "header", + contentType = 0 + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Header(title = mood.name) + } + } + + moodResult.items.forEach { item -> + item { + BasicText( + text = item.title, + style = typography.m.semiBold, + modifier = sectionTextModifier + ) + } + item { + LazyRow { + items(items = item.items, key = { it.key }) { childItem -> + if (childItem.key == DEFAULT_BROWSE_ID) return@items + when (childItem) { + is Innertube.AlbumItem -> AlbumItem( + album = childItem, + thumbnailSize = Dimensions.thumbnails.album, + alternative = true, + modifier = Modifier.clickable { + childItem.info?.endpoint?.browseId?.let { + albumRoute.global(it) + } + } + ) + + is Innertube.ArtistItem -> ArtistItem( + artist = childItem, + thumbnailSize = Dimensions.thumbnails.album, + alternative = true, + modifier = Modifier.clickable { + childItem.info?.endpoint?.browseId?.let { + artistRoute.global(it) + } + } + ) + + is Innertube.PlaylistItem -> PlaylistItem( + playlist = childItem, + thumbnailSize = Dimensions.thumbnails.album, + alternative = true, + modifier = Modifier.clickable { + childItem.info?.endpoint?.let { endpoint -> + playlistRoute.global( + p0 = endpoint.browseId, + p1 = endpoint.params, + p2 = childItem.songCount?.let { it / 100 } + ) + } + } + ) + + else -> {} + } + } + } + } + } + } + } ?: moodPage?.exceptionOrNull()?.let { + BasicText( + text = stringResource(R.string.error_message), + style = typography.s.secondary.center, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(all = 16.dp) + ) + } ?: ShimmerHost { + HeaderPlaceholder(modifier = Modifier.shimmer()) + repeat(4) { + TextPlaceholder(modifier = sectionTextModifier) + Row { + repeat(6) { + AlbumItemPlaceholder( + thumbnailSize = Dimensions.thumbnails.album, + alternative = true + ) + } + } + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodScreen.kt new file mode 100644 index 0000000..06dc955 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/mood/MoodScreen.kt @@ -0,0 +1,42 @@ +package it.hamy.muza.ui.screens.mood + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.res.stringResource +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.R +import it.hamy.muza.models.Mood +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route + +@Route +@Composable +fun MoodScreen(mood: Mood) { + val saveableStateHolder = rememberSaveableStateHolder() + + PersistMapCleanup(prefix = "playlist/$DEFAULT_BROWSE_ID") + + RouteHandler(listenToGlobalEmitter = true) { + GlobalRoutes() + + NavHost { + Scaffold( + topIconButtonId = R.drawable.chevron_back, + onTopIconButtonClick = pop, + tabIndex = 0, + onTabChanged = { }, + tabColumnContent = { item -> + item(0, stringResource(R.string.mood), R.drawable.disc) + } + ) { currentTabIndex -> + saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { + when (currentTabIndex) { + 0 -> MoodList(mood = mood) + } + } + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistScreen.kt new file mode 100644 index 0000000..558e585 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistScreen.kt @@ -0,0 +1,55 @@ +package it.hamy.muza.ui.screens.pipedplaylist + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.res.stringResource +import io.ktor.http.Url +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.routing.RouteHandler +import it.hamy.piped.models.authenticatedWith +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route +import java.util.UUID + +@Route +@Composable +fun PipedPlaylistScreen( + apiBaseUrl: Url, + sessionToken: String, + playlistId: UUID +) { + val saveableStateHolder = rememberSaveableStateHolder() + val session by remember { derivedStateOf { apiBaseUrl authenticatedWith sessionToken } } + + PersistMapCleanup(prefix = "pipedplaylist/$playlistId") + + RouteHandler(listenToGlobalEmitter = true) { + GlobalRoutes() + + NavHost { + Scaffold( + topIconButtonId = R.drawable.chevron_back, + onTopIconButtonClick = pop, + tabIndex = 0, + onTabChanged = { }, + tabColumnContent = { item -> + item(0, stringResource(R.string.songs), R.drawable.musical_notes) + } + ) { currentTabIndex -> + saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { + when (currentTabIndex) { + 0 -> PipedPlaylistSongList( + session = session, + playlistId = playlistId + ) + } + } + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistSongList.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistSongList.kt new file mode 100644 index 0000000..0abcd44 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/pipedplaylist/PipedPlaylistSongList.kt @@ -0,0 +1,166 @@ +package it.hamy.muza.ui.screens.pipedplaylist + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import com.valentinilk.shimmer.shimmer +import it.hamy.compose.persist.persist +import it.hamy.piped.Piped +import it.hamy.piped.models.Playlist +import it.hamy.piped.models.Session +import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.ShimmerHost +import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.HeaderPlaceholder +import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail +import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent +import it.hamy.muza.ui.items.SongItem +import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.styling.Dimensions +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.enqueue +import it.hamy.muza.utils.forcePlayAtIndex +import it.hamy.muza.utils.forcePlayFromBeginning +import it.hamy.muza.utils.isLandscape +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.util.UUID + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun PipedPlaylistSongList( + session: Session, + playlistId: UUID, + modifier: Modifier = Modifier +) { + val (colorPalette) = LocalAppearance.current + val binder = LocalPlayerServiceBinder.current + val menuState = LocalMenuState.current + + var playlist by persist(tag = "pipedplaylist/$playlistId/playlistPage") + + LaunchedEffect(Unit) { + playlist = withContext(Dispatchers.IO) { + Piped.playlist.songs( + session = session, + id = playlistId + )?.getOrNull() + } + } + + val lazyListState = rememberLazyListState() + + val thumbnailContent = adaptiveThumbnailContent( + isLoading = playlist == null, + url = playlist?.thumbnailUrl?.toString() + ) + + LayoutWithAdaptiveThumbnail( + thumbnailContent = thumbnailContent, + modifier = modifier + ) { + Box { + LazyColumn( + state = lazyListState, + contentPadding = LocalPlayerAwareWindowInsets.current + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + modifier = Modifier + .background(colorPalette.background0) + .fillMaxSize() + ) { + item( + key = "header", + contentType = 0 + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + if (playlist == null) HeaderPlaceholder(modifier = Modifier.shimmer()) + else Header(title = playlist?.name ?: stringResource(R.string.unknown)) { + SecondaryTextButton( + text = stringResource(R.string.enqueue), + enabled = playlist?.videos?.isNotEmpty() == true, + onClick = { + playlist?.videos?.mapNotNull(Playlist.Video::asMediaItem) + ?.let { mediaItems -> binder?.player?.enqueue(mediaItems) } + } + ) + } + + if (!isLandscape) thumbnailContent() + } + } + + itemsIndexed(items = playlist?.videos ?: emptyList()) { index, song -> + song.asMediaItem?.let { mediaItem -> + SongItem( + song = mediaItem, + thumbnailSize = Dimensions.thumbnails.song, + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + onDismiss = menuState::hide, + mediaItem = mediaItem + ) + } + }, + onClick = { + playlist?.videos?.mapNotNull(Playlist.Video::asMediaItem) + ?.let { mediaItems -> + binder?.stopRadio() + binder?.player?.forcePlayAtIndex(mediaItems, index) + } + } + ) + ) + } + } + + if (playlist == null) item(key = "loading") { + ShimmerHost(modifier = Modifier.fillParentMaxSize()) { + repeat(4) { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) + } + } + } + } + + FloatingActionsContainerWithScrollToTop( + lazyListState = lazyListState, + iconId = R.drawable.shuffle, + onClick = { + playlist?.videos?.let { songs -> + if (songs.isNotEmpty()) { + binder?.stopRadio() + binder?.player?.forcePlayFromBeginning( + songs.shuffled().mapNotNull(Playlist.Video::asMediaItem) + ) + } + } + } + ) + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt index 2fb759c..b3ab6fa 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Controls.kt @@ -1,214 +1,176 @@ package it.hamy.muza.ui.screens.player +import androidx.annotation.DrawableRes +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateDp +import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.animation.core.updateTransition +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.togetherWith import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import androidx.media3.common.C +import androidx.compose.ui.util.fastForEachIndexed import androidx.media3.common.Player import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R +import it.hamy.muza.models.Info import it.hamy.muza.models.Song +import it.hamy.muza.models.ui.UiMedia +import it.hamy.muza.preferences.PlayerPreferences import it.hamy.muza.query +import it.hamy.muza.transaction import it.hamy.muza.ui.components.SeekBar +import it.hamy.muza.ui.components.themed.BigIconButton import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.modifiers.horizontalFadingEdge +import it.hamy.muza.ui.screens.artistRoute import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.favoritesIcon import it.hamy.muza.utils.bold import it.hamy.muza.utils.forceSeekToNext import it.hamy.muza.utils.forceSeekToPrevious -import it.hamy.muza.utils.formatAsDuration -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.px import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold -import it.hamy.muza.utils.trackLoopEnabledKey -import kotlinx.coroutines.flow.distinctUntilChanged -import it.hamy.muza.models.Info -import it.hamy.muza.ui.screens.artistRoute import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +private const val FORWARD_BACKWARD_OFFSET = 16f + @Composable fun Controls( - mediaId: String, - title: String?, - artist: String?, + media: UiMedia, shouldBePlaying: Boolean, position: Long, - duration: Long, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + layout: PlayerPreferences.PlayerLayout = PlayerPreferences.playerLayout ) { - val (colorPalette, typography) = LocalAppearance.current + var likedAt by remember { mutableStateOf(null) } - val binder = LocalPlayerServiceBinder.current - binder?.player ?: return - - var trackLoopEnabled by rememberPreference(trackLoopEnabledKey, defaultValue = false) - - var scrubbingPosition by remember(mediaId) { - mutableStateOf(null) - } - - var likedAt by rememberSaveable { - mutableStateOf(null) - } - - var artistsInfo: List? by remember { mutableStateOf(null) } - - LaunchedEffect(Unit, mediaId) { - withContext(Dispatchers.IO) { - if (artistsInfo == null) artistsInfo = Database.songArtistInfo(mediaId) - - Database.likedAt(mediaId).distinctUntilChanged().collect { likedAt = it } - } + LaunchedEffect(media) { + Database.likedAt(media.id).distinctUntilChanged().collect { likedAt = it } } val shouldBePlayingTransition = updateTransition(shouldBePlaying, label = "shouldBePlaying") - val playPauseRoundness by shouldBePlayingTransition.animateDp( + val playButtonRadius by shouldBePlayingTransition.animateDp( transitionSpec = { tween(durationMillis = 100, easing = LinearEasing) }, label = "playPauseRoundness", - targetValueByState = { if (it) 32.dp else 16.dp } + targetValueByState = { if (it) 16.dp else 32.dp } ) + when (layout) { + PlayerPreferences.PlayerLayout.Classic -> ClassicControls( + media = media, + shouldBePlaying = shouldBePlaying, + position = position, + likedAt = likedAt, + playButtonRadius = playButtonRadius, + modifier = modifier + ) + + PlayerPreferences.PlayerLayout.New -> ModernControls( + media = media, + shouldBePlaying = shouldBePlaying, + position = position, + likedAt = likedAt, + playButtonRadius = playButtonRadius, + modifier = modifier + ) + } +} + +@Composable +private fun ClassicControls( + media: UiMedia, + shouldBePlaying: Boolean, + position: Long, + likedAt: Long?, + playButtonRadius: Dp, + modifier: Modifier = Modifier +) = with(PlayerPreferences) { + val (colorPalette) = LocalAppearance.current + val binder = LocalPlayerServiceBinder.current ?: return + Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = modifier .fillMaxWidth() .padding(horizontal = 32.dp) ) { - Spacer( - modifier = Modifier - .weight(1f) - ) - - BasicText( - text = title ?: "", - style = typography.l.bold, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - - BasicText( - text = artist ?: "", - style = typography.s.semiBold.secondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier.clickable { - val goTo = artistRoute::global - goTo(artistsInfo?.get(0)?.id) - } - ) - - Spacer( - modifier = Modifier - .weight(0.5f) - ) - + Spacer(modifier = Modifier.weight(1f)) + MediaInfo(media) + Spacer(modifier = Modifier.weight(1f)) SeekBar( - value = scrubbingPosition ?: position, - minimumValue = 0, - maximumValue = duration, - onDragStart = { - scrubbingPosition = it - }, - onDrag = { delta -> - scrubbingPosition = if (duration != C.TIME_UNSET) { - scrubbingPosition?.plus(delta)?.coerceIn(0, duration) - } else { - null - } - }, - onDragEnd = { - scrubbingPosition?.let(binder.player::seekTo) - scrubbingPosition = null - }, - color = colorPalette.text, - backgroundColor = colorPalette.background2, - shape = RoundedCornerShape(8.dp) - ) - - Spacer( - modifier = Modifier - .height(8.dp) - ) - - Row( - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .fillMaxWidth() - ) { - BasicText( - text = formatAsDuration(scrubbingPosition ?: position), - style = typography.xxs.semiBold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - - if (duration != C.TIME_UNSET) { - BasicText( - text = formatAsDuration(duration), - style = typography.xxs.semiBold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - } - } - - Spacer( - modifier = Modifier - .weight(1f) + binder = binder, + position = position, + media = media, + alwaysShowDuration = true ) + Spacer(modifier = Modifier.weight(1f)) Row( verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .fillMaxWidth() + modifier = Modifier.fillMaxWidth() ) { IconButton( icon = if (likedAt == null) R.drawable.heart_outline else R.drawable.heart, color = colorPalette.favoritesIcon, onClick = { val currentMediaItem = binder.player.currentMediaItem + query { - if (Database.like( - mediaId, + if ( + Database.like( + media.id, if (likedAt == null) System.currentTimeMillis() else null ) == 0 ) { currentMediaItem - ?.takeIf { it.mediaId == mediaId } + ?.takeIf { it.mediaId == media.id } ?.let { Database.insert(currentMediaItem, Song::toggleLike) } @@ -229,21 +191,14 @@ fun Controls( .size(24.dp) ) - Spacer( - modifier = Modifier - .width(8.dp) - ) + Spacer(modifier = Modifier.width(8.dp)) Box( modifier = Modifier - .clip(RoundedCornerShape(playPauseRoundness)) + .clip(RoundedCornerShape(playButtonRadius)) .clickable { - if (shouldBePlaying) { - binder.player.pause() - } else { - if (binder.player.playbackState == Player.STATE_IDLE) { - binder.player.prepare() - } + if (shouldBePlaying) binder.player.pause() else { + if (binder.player.playbackState == Player.STATE_IDLE) binder.player.prepare() binder.player.play() } } @@ -260,10 +215,7 @@ fun Controls( ) } - Spacer( - modifier = Modifier - .width(8.dp) - ) + Spacer(modifier = Modifier.width(8.dp)) IconButton( icon = R.drawable.play_skip_forward, @@ -284,9 +236,227 @@ fun Controls( ) } - Spacer( + Spacer(modifier = Modifier.weight(1f)) + } +} + +@Composable +private fun ModernControls( + media: UiMedia, + shouldBePlaying: Boolean, + position: Long, + likedAt: Long?, + playButtonRadius: Dp, + modifier: Modifier = Modifier, + controlHeight: Dp = 64.dp +) { + val binder = LocalPlayerServiceBinder.current ?: return + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 32.dp) + ) { + Spacer(modifier = Modifier.weight(1f)) + MediaInfo(media) + Spacer(modifier = Modifier.weight(1f)) + + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(15.dp) + ) { + + SkipButton( + iconId = R.drawable.play_skip_back, + onClick = binder.player::forceSeekToPrevious, + modifier = Modifier.weight(1f), + offsetOnPress = -FORWARD_BACKWARD_OFFSET + ) + PlayButton( + radius = playButtonRadius, + shouldBePlaying = shouldBePlaying, + modifier = Modifier + .height(controlHeight) + .weight(2f) + ) + SkipButton( + iconId = R.drawable.play_skip_forward, + onClick = binder.player::forceSeekToNext, + modifier = Modifier.weight(1f) + ) + } + Spacer(modifier = Modifier.weight(1f)) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + if (PlayerPreferences.showLike) BigIconButton( + iconId = if (likedAt == null) R.drawable.heart_outline else R.drawable.heart, + onClick = { + transaction { + Database.like( + songId = media.id, + likedAt = if (likedAt == null) System.currentTimeMillis() else null + ) + } + }, + modifier = Modifier.weight(1.2f) + ) + + Column(modifier = Modifier.weight(4f)) { + SeekBar( + binder = binder, + position = position, + media = media + ) + } + } + + Spacer(modifier = Modifier.weight(1f)) + } +} + +@Composable +private fun SkipButton( + @DrawableRes iconId: Int, + onClick: () -> Unit, + modifier: Modifier = Modifier, + offsetOnPress: Float = FORWARD_BACKWARD_OFFSET +) { + val scope = rememberCoroutineScope() + val offsetDp = remember { Animatable(0f) } + val density = LocalDensity.current + + BigIconButton( + iconId = iconId, + onClick = { + onClick() + scope.launch { offsetDp.animateTo(offsetOnPress) } + }, + onPress = { scope.launch { offsetDp.animateTo(offsetOnPress) } }, + onCancel = { scope.launch { offsetDp.animateTo(0f) } }, + modifier = modifier.graphicsLayer { + with(density) { + translationX = offsetDp.value.dp.toPx() + } + } + ) +} + +@Composable +private fun PlayButton( + radius: Dp, + shouldBePlaying: Boolean, + modifier: Modifier = Modifier +) { + val colorPalette = LocalAppearance.current.colorPalette + val binder = LocalPlayerServiceBinder.current + + Box( + modifier = modifier + .clip(RoundedCornerShape(radius)) + .clickable { + if (shouldBePlaying) binder?.player?.pause() else { + if (binder?.player?.playbackState == Player.STATE_IDLE) binder.player.prepare() + binder?.player?.play() + } + } + .background(colorPalette.accent) + ) { + Image( + painter = painterResource(if (shouldBePlaying) R.drawable.pause else R.drawable.play), + contentDescription = null, + colorFilter = ColorFilter.tint(colorPalette.text), modifier = Modifier - .weight(1f) + .align(Alignment.Center) + .size(28.dp) ) } } + +@Composable +private inline fun MediaInfoEntry( + maxHeight: Dp? = null, + content: @Composable RowScope.() -> Unit +) { + val scrollState = rememberScrollState() + val alphaLeft by animateFloatAsState( + targetValue = if (scrollState.canScrollBackward) 1f else 0f, + label = "" + ) + val alphaRight by animateFloatAsState( + targetValue = if (scrollState.canScrollForward) 1f else 0f, + label = "" + ) + + Row( + modifier = Modifier + .fillMaxWidth(0.75f) + .let { if (maxHeight == null) it else it.heightIn(max = maxHeight) } + .horizontalFadingEdge(right = false, alpha = alphaLeft, middle = 10) + .horizontalFadingEdge(left = false, alpha = alphaRight, middle = 10) + .horizontalScroll(scrollState), + horizontalArrangement = Arrangement.Center, + content = content + ) +} + +@Composable +private fun MediaInfo(media: UiMedia) { + val typography = LocalAppearance.current.typography + + var artistInfo: List? by remember { mutableStateOf(null) } + var maxHeight by rememberSaveable { mutableIntStateOf(0) } + + LaunchedEffect(media) { + artistInfo = withContext(Dispatchers.IO) { + Database.songArtistInfo(media.id).takeIf { it.isNotEmpty() } + } + } + + Column(horizontalAlignment = Alignment.CenterHorizontally) { + MediaInfoEntry { + BasicText( + text = media.title, + style = typography.l.bold, + maxLines = 1 + ) + } + + AnimatedContent( + targetState = artistInfo, + transitionSpec = { fadeIn() togetherWith fadeOut() }, + label = "" + ) { state -> + state?.let { artists -> + MediaInfoEntry(maxHeight = maxHeight.px.dp) { + artists.fastForEachIndexed { i, artist -> + if (i == artists.lastIndex && artists.size > 1) BasicText( + text = " & ", + style = typography.s.semiBold.secondary + ) + BasicText( + text = artist.name.orEmpty(), + style = typography.s.semiBold.secondary, + modifier = Modifier.clickable { artistRoute.global(artist.id) } + ) + if (i != artists.lastIndex && i + 1 != artists.lastIndex) BasicText( + text = ", ", + style = typography.s.semiBold.secondary + ) + } + } + } ?: MediaInfoEntry { + BasicText( + text = media.artist, + style = typography.s.semiBold.secondary, + maxLines = 1, + modifier = Modifier.onGloballyPositioned { maxHeight = it.size.height } + ) + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt index 37b208c..fdc8e9c 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Lyrics.kt @@ -13,11 +13,13 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -31,6 +33,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -44,6 +47,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.media3.common.C @@ -53,16 +57,24 @@ import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.NextBody import it.hamy.innertube.requests.lyrics import it.hamy.kugou.KuGou +import it.hamy.lrclib.LrcLib +import it.hamy.lrclib.models.Track import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R import it.hamy.muza.models.Lyrics +import it.hamy.muza.preferences.PlayerPreferences import it.hamy.muza.query +import it.hamy.muza.transaction import it.hamy.muza.ui.components.LocalMenuState +import it.hamy.muza.ui.components.themed.CircularProgressIndicator +import it.hamy.muza.ui.components.themed.DefaultDialog import it.hamy.muza.ui.components.themed.Menu import it.hamy.muza.ui.components.themed.MenuEntry import it.hamy.muza.ui.components.themed.TextFieldDialog import it.hamy.muza.ui.components.themed.TextPlaceholder +import it.hamy.muza.ui.components.themed.ValueSelectorDialogBody +import it.hamy.muza.ui.modifiers.verticalFadingEdge import it.hamy.muza.ui.styling.DefaultDarkColorPalette import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.PureBlackColorPalette @@ -70,145 +82,214 @@ import it.hamy.muza.ui.styling.onOverlayShimmer import it.hamy.muza.utils.SynchronizedLyrics import it.hamy.muza.utils.center import it.hamy.muza.utils.color -import it.hamy.muza.utils.isShowingSynchronizedLyricsKey import it.hamy.muza.utils.medium -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.toast -import it.hamy.muza.utils.verticalFadingEdge +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.withContext -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import androidx.core.content.ContextCompat -import androidx.core.content.ContextCompat.getSystemService +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.seconds @Composable fun Lyrics( mediaId: String, isDisplayed: Boolean, onDismiss: () -> Unit, - size: Dp, + height: Dp, mediaMetadataProvider: () -> MediaMetadata, durationProvider: () -> Long, ensureSongInserted: () -> Unit, - modifier: Modifier = Modifier -) { - - - - + modifier: Modifier = Modifier, + onMenuLaunched: () -> Unit = { } +) = with(PlayerPreferences) { AnimatedVisibility( visible = isDisplayed, enter = fadeIn(), - exit = fadeOut(), + exit = fadeOut() ) { val (colorPalette, typography) = LocalAppearance.current val context = LocalContext.current val menuState = LocalMenuState.current val currentView = LocalView.current + val binder = LocalPlayerServiceBinder.current - var isShowingSynchronizedLyrics by rememberPreference(isShowingSynchronizedLyricsKey, false) - - var isEditing by remember(mediaId, isShowingSynchronizedLyrics) { - mutableStateOf(false) - } - - var lyrics by remember { - mutableStateOf(null) - } - + var isEditing by remember(mediaId, isShowingSynchronizedLyrics) { mutableStateOf(false) } + var isPicking by remember(mediaId, isShowingSynchronizedLyrics) { mutableStateOf(false) } + var lyrics by remember { mutableStateOf(null) } val text = if (isShowingSynchronizedLyrics) lyrics?.synced else lyrics?.fixed - - var isError by remember(mediaId, isShowingSynchronizedLyrics) { - mutableStateOf(false) - } - - - val clipboardManager = ContextCompat.getSystemService(context, ClipboardManager::class.java) + var isError by remember(mediaId, isShowingSynchronizedLyrics) { mutableStateOf(false) } + var invalidLrc by remember(mediaId, isShowingSynchronizedLyrics) { mutableStateOf(false) } LaunchedEffect(mediaId, isShowingSynchronizedLyrics) { - withContext(Dispatchers.IO) { - Database.lyrics(mediaId).collect { - if (isShowingSynchronizedLyrics && it?.synced == null) { - val mediaMetadata = mediaMetadataProvider() + runCatching { + withContext(Dispatchers.IO) { + Database.lyrics(mediaId).collect { currentLyrics -> + when { + isShowingSynchronizedLyrics && currentLyrics?.synced == null -> { + lyrics = null + val mediaMetadata = mediaMetadataProvider() + var duration = withContext(Dispatchers.Main) { durationProvider() } - var duration = withContext(Dispatchers.Main) { - durationProvider() - } + while (duration == C.TIME_UNSET) { + delay(100) + duration = withContext(Dispatchers.Main) { durationProvider() } + } - while (duration == C.TIME_UNSET) { - delay(100) - duration = withContext(Dispatchers.Main) { - durationProvider() + val album = mediaMetadata.albumTitle?.toString() + val artist = mediaMetadata.artist?.toString().orEmpty() + val title = mediaMetadata.title?.toString().orEmpty() + + LrcLib.lyrics( + artist = artist, + title = title, + duration = duration.milliseconds, + album = album + )?.onSuccess { + Database.upsert( + Lyrics( + songId = mediaId, + fixed = currentLyrics?.fixed, + synced = it?.text.orEmpty() + ) + ) + }?.onFailure { + KuGou.lyrics( + artist = artist, + title = title, + duration = duration / 1000 + )?.onSuccess { + Database.upsert( + Lyrics( + songId = mediaId, + fixed = currentLyrics?.fixed, + synced = it?.value.orEmpty() + ) + ) + }?.onFailure { + isError = true + } + } } - } - KuGou.lyrics( - artist = mediaMetadata.artist?.toString() ?: "", - title = mediaMetadata.title?.toString() ?: "", - duration = duration / 1000 - )?.onSuccess { syncedLyrics -> - Database.upsert( - Lyrics( - songId = mediaId, - fixed = it?.fixed, - synced = syncedLyrics?.value ?: "" - ) - ) - }?.onFailure { - isError = true + !isShowingSynchronizedLyrics && currentLyrics?.fixed == null -> { + lyrics = null + Innertube.lyrics(NextBody(videoId = mediaId))?.onSuccess { + Database.upsert( + Lyrics( + songId = mediaId, + fixed = it.orEmpty(), + synced = currentLyrics?.synced + ) + ) + }?.onFailure { + isError = true + } + } + + else -> lyrics = currentLyrics } - } else if (!isShowingSynchronizedLyrics && it?.fixed == null) { - Innertube.lyrics(NextBody(videoId = mediaId))?.onSuccess { fixedLyrics -> - Database.upsert( - Lyrics( - songId = mediaId, - fixed = fixedLyrics ?: "", - synced = it?.synced - ) - ) - }?.onFailure { - isError = true - } - } else { - lyrics = it } } + }.exceptionOrNull()?.let { if (it !is CancellationException) it.printStackTrace() } + } + + if (isEditing) TextFieldDialog( + hintText = stringResource(R.string.enter_lyrics), + initialTextInput = text.orEmpty(), + singleLine = false, + maxLines = 10, + isTextInputValid = { true }, + onDismiss = { isEditing = false }, + onDone = { + query { + ensureSongInserted() + Database.upsert( + Lyrics( + songId = mediaId, + fixed = if (isShowingSynchronizedLyrics) lyrics?.fixed else it, + synced = if (isShowingSynchronizedLyrics) it else lyrics?.synced + ) + ) + } + } + ) + + if (isPicking && isShowingSynchronizedLyrics) DefaultDialog( + onDismiss = { + isPicking = false + }, + horizontalPadding = 0.dp + ) { + val tracks = remember { mutableStateListOf() } + var loading by remember { mutableStateOf(true) } + var error by remember { mutableStateOf(false) } + + LaunchedEffect(Unit) { + val mediaMetadata = mediaMetadataProvider() + + LrcLib.lyrics( + artist = mediaMetadata.artist?.toString().orEmpty(), + title = mediaMetadata.title?.toString().orEmpty() + )?.onSuccess { + tracks.clear() + tracks.addAll(it) + loading = false + error = false + }?.onFailure { + loading = false + error = true + } ?: run { loading = false } + } + + when { + loading -> CircularProgressIndicator( + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + + error || tracks.isEmpty() -> BasicText( + text = stringResource(R.string.no_lyrics_found), + style = typography.s.semiBold.center, + modifier = Modifier + .padding(all = 24.dp) + .align(Alignment.CenterHorizontally) + ) + + else -> ValueSelectorDialogBody( + onDismiss = { isPicking = false }, + title = stringResource(R.string.choose_lyric_track), + selectedValue = null, + values = tracks.toImmutableList(), + onValueSelected = { + transaction { + Database.upsert( + Lyrics( + songId = mediaId, + fixed = lyrics?.fixed, + synced = it.syncedLyrics.orEmpty() + ) + ) + isPicking = false + } + }, + valueText = { + "${it.artistName} - ${it.trackName} (${ + it.duration.seconds.toComponents { minutes, seconds, _ -> + "$minutes:${seconds.toString().padStart(2, '0')}" + } + })" + } + ) } } - if (isEditing) { - TextFieldDialog( - hintText = "Введите текст песни", - initialTextInput = text ?: "", - singleLine = false, - maxLines = 10, - isTextInputValid = { true }, - onDismiss = { isEditing = false }, - onDone = { - query { - ensureSongInserted() - Database.upsert( - Lyrics( - songId = mediaId, - fixed = if (isShowingSynchronizedLyrics) lyrics?.fixed else it, - synced = if (isShowingSynchronizedLyrics) it else lyrics?.synced, - ) - ) - } - } - ) - } - - if (isShowingSynchronizedLyrics) { - DisposableEffect(Unit) { - currentView.keepScreenOn = true - onDispose { - currentView.keepScreenOn = false - } + if (isShowingSynchronizedLyrics) DisposableEffect(Unit) { + currentView.keepScreenOn = true + onDispose { + currentView.keepScreenOn = false } } @@ -216,9 +297,7 @@ fun Lyrics( contentAlignment = Alignment.Center, modifier = modifier .pointerInput(Unit) { - detectTapGestures( - onTap = { onDismiss() } - ) + detectTapGestures(onTap = { onDismiss() }) } .fillMaxSize() .background(Color.Black.copy(0.8f)) @@ -227,11 +306,11 @@ fun Lyrics( visible = isError && text == null, enter = slideInVertically { -it }, exit = slideOutVertically { -it }, - modifier = Modifier - .align(Alignment.TopCenter) + modifier = Modifier.align(Alignment.TopCenter) ) { BasicText( - text = "Произошла ошибка при синхронизации ${if (isShowingSynchronizedLyrics) "синхронизирован " else ""}текст песни", + text = if (isShowingSynchronizedLyrics) stringResource(R.string.error_load_synchronized_lyrics) + else stringResource(R.string.error_load_lyrics), style = typography.xs.center.medium.color(PureBlackColorPalette.text), modifier = Modifier .background(Color.Black.copy(0.4f)) @@ -241,14 +320,30 @@ fun Lyrics( } AnimatedVisibility( - visible = text?.let(String::isEmpty) ?: false, + visible = text?.isEmpty() ?: false, enter = slideInVertically { -it }, exit = slideOutVertically { -it }, - modifier = Modifier - .align(Alignment.TopCenter) + modifier = Modifier.align(Alignment.TopCenter) ) { BasicText( - text = "${if (isShowingSynchronizedLyrics) "Синхронизированный т" else "Т"}екст не доступен", + text = if (isShowingSynchronizedLyrics) stringResource(R.string.synchronized_lyrics_not_available) + else stringResource(R.string.lyrics_not_available), + style = typography.xs.center.medium.color(PureBlackColorPalette.text), + modifier = Modifier + .background(Color.Black.copy(0.4f)) + .padding(all = 8.dp) + .fillMaxWidth() + ) + } + + AnimatedVisibility( + visible = invalidLrc && isShowingSynchronizedLyrics, + enter = slideInVertically { -it }, + exit = slideOutVertically { -it }, + modifier = Modifier.align(Alignment.TopCenter) + ) { + BasicText( + text = stringResource(R.string.invalid_synchronized_lyrics), style = typography.xs.center.medium.color(PureBlackColorPalette.text), modifier = Modifier .background(Color.Black.copy(0.4f)) @@ -260,76 +355,92 @@ fun Lyrics( if (text?.isNotEmpty() == true) { if (isShowingSynchronizedLyrics) { val density = LocalDensity.current - val player = LocalPlayerServiceBinder.current?.player - ?: return@AnimatedVisibility + val player = + LocalPlayerServiceBinder.current?.player ?: return@AnimatedVisibility val synchronizedLyrics = remember(text) { - SynchronizedLyrics(KuGou.Lyrics(text).sentences) { - player.currentPosition + 50 - } - } + val sentences = LrcLib.Lyrics(text).sentences - val lazyListState = rememberLazyListState( - synchronizedLyrics.index, - with(density) { size.roundToPx() } / 6) - - LaunchedEffect(synchronizedLyrics) { - val center = with(density) { size.roundToPx() } / 6 - - while (isActive) { - delay(50) - if (synchronizedLyrics.update()) { - lazyListState.animateScrollToItem( - synchronizedLyrics.index, - center - ) + if (sentences == null) { + invalidLrc = true + null + } else { + invalidLrc = false + SynchronizedLyrics(sentences) { + player.currentPosition + 50L - (lyrics?.startTime ?: 0L) } } } - LazyColumn( - state = lazyListState, - userScrollEnabled = false, - contentPadding = PaddingValues(vertical = size / 2), - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .verticalFadingEdge() - ) { - itemsIndexed(items = synchronizedLyrics.sentences) { index, sentence -> - BasicText( - text = sentence.second, - style = typography.xs.center.medium.color(if (index == synchronizedLyrics.index) PureBlackColorPalette.text else PureBlackColorPalette.textDisabled), - modifier = Modifier - .padding(vertical = 4.dp, horizontal = 32.dp) + if (synchronizedLyrics != null) { + val lazyListState = rememberLazyListState() + + LaunchedEffect(synchronizedLyrics, density) { + val centerOffset = with(density) { (-height / 3).roundToPx() } + + lazyListState.animateScrollToItem( + index = synchronizedLyrics.index + 1, + scrollOffset = centerOffset ) + + while (isActive) { + delay(50) + if (!synchronizedLyrics.update()) continue + + lazyListState.animateScrollToItem( + index = synchronizedLyrics.index + 1, + scrollOffset = centerOffset + ) + } + } + + LazyColumn( + state = lazyListState, + userScrollEnabled = false, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + modifier = Modifier.verticalFadingEdge() + ) { + item(key = "header", contentType = 0) { + Spacer(modifier = Modifier.height(height)) + } + itemsIndexed( + items = synchronizedLyrics.sentences.values.toImmutableList() + ) { index, sentence -> + BasicText( + text = sentence, + style = typography.xs.center.medium.color( + if (index == synchronizedLyrics.index) PureBlackColorPalette.text + else PureBlackColorPalette.textDisabled + ), + modifier = Modifier.padding(vertical = 4.dp, horizontal = 32.dp) + ) + } + item(key = "footer", contentType = 0) { + Spacer(modifier = Modifier.height(height)) + } } } - } else { - BasicText( - text = text, - style = typography.xs.center.medium.color(PureBlackColorPalette.text), - modifier = Modifier - .verticalFadingEdge() - .verticalScroll(rememberScrollState()) - .fillMaxWidth() - .padding(vertical = size / 4, horizontal = 32.dp) - ) - } + } else BasicText( + text = text, + style = typography.xs.center.medium.color(PureBlackColorPalette.text), + modifier = Modifier + .verticalFadingEdge() + .verticalScroll(rememberScrollState()) + .fillMaxWidth() + .padding(vertical = height / 4, horizontal = 32.dp) + ) } - if (text == null && !isError) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .shimmer() - ) { - repeat(4) { - TextPlaceholder( - color = colorPalette.onOverlayShimmer, - modifier = Modifier - .alpha(1f - it * 0.2f) - ) - } + if (text == null && !isError) Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.shimmer() + ) { + repeat(4) { + TextPlaceholder( + color = colorPalette.onOverlayShimmer, + modifier = Modifier.alpha(1f - it * 0.2f) + ) } } @@ -343,12 +454,16 @@ fun Lyrics( indication = rememberRipple(bounded = false), interactionSource = remember { MutableInteractionSource() }, onClick = { + onMenuLaunched() menuState.display { Menu { MenuEntry( icon = R.drawable.time, - text = "Показать ${if (isShowingSynchronizedLyrics) "не" else ""}синхронизированный текст", - secondaryText = if (isShowingSynchronizedLyrics) null else "при помощи kugou.com", + text = if (isShowingSynchronizedLyrics) + stringResource(R.string.show_unsynchronized_lyrics) + else stringResource(R.string.show_synchronized_lyrics), + secondaryText = if (isShowingSynchronizedLyrics) null + else stringResource(R.string.provided_lyrics_by), onClick = { menuState.hide() isShowingSynchronizedLyrics = @@ -358,25 +473,16 @@ fun Lyrics( MenuEntry( icon = R.drawable.pencil, - text = "Изменить текст песни", + text = stringResource(R.string.edit_lyrics), onClick = { menuState.hide() isEditing = true } ) - MenuEntry( - icon = R.drawable.text, - text = "Скопировать текст", - onClick = { - menuState.hide() - clipboardManager?.setPrimaryClip(ClipData.newPlainText("Lyrics", lyrics?.fixed)) - } - ) - MenuEntry( icon = R.drawable.search, - text = "Искать текст в интернете", + text = stringResource(R.string.search_lyrics_online), onClick = { menuState.hide() val mediaMetadata = mediaMetadataProvider() @@ -386,33 +492,65 @@ fun Lyrics( Intent(Intent.ACTION_WEB_SEARCH).apply { putExtra( SearchManager.QUERY, - "${mediaMetadata.title} ${mediaMetadata.artist} текст песни" + "${mediaMetadata.title} ${mediaMetadata.artist} lyrics" ) } ) } catch (e: ActivityNotFoundException) { - context.toast("На вашем смартфоне не установлен поисковик!") + context.toast(context.getString(R.string.no_browser_installed)) } } ) MenuEntry( - icon = R.drawable.download, - text = "Обновить текст песни", + icon = R.drawable.sync, + text = stringResource(R.string.refetch_lyrics), enabled = lyrics != null, onClick = { menuState.hide() + val fixed = + if (isShowingSynchronizedLyrics) lyrics?.fixed else null + val synced = + if (isShowingSynchronizedLyrics) null else lyrics?.synced + query { Database.upsert( Lyrics( songId = mediaId, - fixed = if (isShowingSynchronizedLyrics) lyrics?.fixed else null, - synced = if (isShowingSynchronizedLyrics) null else lyrics?.synced, + fixed = fixed, + synced = synced ) ) } } ) + + if (isShowingSynchronizedLyrics) { + MenuEntry( + icon = R.drawable.download, + text = stringResource(R.string.pick_from_lrclib), + onClick = { + menuState.hide() + isPicking = true + } + ) + MenuEntry( + icon = R.drawable.play_skip_forward, + text = stringResource(R.string.set_lyrics_start_offset), + secondaryText = stringResource( + R.string.set_lyrics_start_offset_description + ), + onClick = { + menuState.hide() + lyrics?.let { + val startTime = binder?.player?.currentPosition + query { + Database.upsert(it.copy(startTime = startTime)) + } + } + } + ) + } } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/LyricsDialog.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/LyricsDialog.kt new file mode 100644 index 0000000..35892ce --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/LyricsDialog.kt @@ -0,0 +1,123 @@ +package it.hamy.muza.ui.screens.player + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.ContentTransform +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import coil.compose.AsyncImage +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.service.isLocal +import it.hamy.muza.ui.modifiers.PinchDirection +import it.hamy.muza.ui.modifiers.onSwipe +import it.hamy.muza.ui.modifiers.pinchToToggle +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.forceSeekToNext +import it.hamy.muza.utils.forceSeekToPrevious +import it.hamy.muza.utils.px +import it.hamy.muza.utils.thumbnail + +@Composable +fun LyricsDialog( + onDismiss: () -> Unit, + modifier: Modifier = Modifier +) = Dialog(onDismissRequest = onDismiss) { + val appearance = LocalAppearance.current + val (colorPalette) = appearance + val thumbnailShape = appearance.thumbnailShape + + val player = LocalPlayerServiceBinder.current?.player ?: return@Dialog + val (window, error) = currentWindow() + + LaunchedEffect(window, error) { + if (window == null || window.mediaItem.isLocal || error != null) onDismiss() + } + + window ?: return@Dialog + + AnimatedContent( + targetState = window, + transitionSpec = { + if (initialState.mediaItem.mediaId == targetState.mediaItem.mediaId) + return@AnimatedContent ContentTransform( + targetContentEnter = EnterTransition.None, + initialContentExit = ExitTransition.None + ) + + val direction = if (targetState.firstPeriodIndex > initialState.firstPeriodIndex) + AnimatedContentTransitionScope.SlideDirection.Left + else AnimatedContentTransitionScope.SlideDirection.Right + + ContentTransform( + targetContentEnter = slideIntoContainer( + towards = direction, + animationSpec = tween(500) + ), + initialContentExit = slideOutOfContainer( + towards = direction, + animationSpec = tween(500) + ), + sizeTransform = null + ) + }, + label = "" + ) { currentWindow -> + BoxWithConstraints( + modifier = modifier + .padding(all = 36.dp) + .padding(vertical = 32.dp) + .clip(thumbnailShape) + .fillMaxSize() + .background(colorPalette.background1) + .pinchToToggle( + direction = PinchDirection.In, + threshold = 0.9f, + onPinch = { onDismiss() } + ) + .onSwipe( + onSwipeLeft = { + player.forceSeekToNext() + }, + onSwipeRight = { + player.seekToDefaultPosition() + player.forceSeekToPrevious() + } + ) + ) { + val thumbnailHeight = maxHeight + + if (currentWindow.mediaItem.mediaMetadata.artworkUri != null) AsyncImage( + model = currentWindow.mediaItem.mediaMetadata.artworkUri.thumbnail((thumbnailHeight - 64.dp).px), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .fillMaxSize() + .background(colorPalette.background0) + ) + + Lyrics( + mediaId = currentWindow.mediaItem.mediaId, + isDisplayed = true, + onDismiss = { }, + height = thumbnailHeight, + mediaMetadataProvider = currentWindow.mediaItem::mediaMetadata, + durationProvider = player::getDuration, + ensureSongInserted = { Database.insert(currentWindow.mediaItem) }, + onMenuLaunched = onDismiss + ) + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt index d8e2c03..2df0246 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/PlaybackError.kt @@ -1,6 +1,8 @@ package it.hamy.muza.ui.screens.player +import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.ContentTransform import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInVertically @@ -14,14 +16,14 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp -import it.hamy.muza.ui.styling.PureBlackColorPalette import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.styling.PureBlackColorPalette import it.hamy.muza.utils.center import it.hamy.muza.utils.color import it.hamy.muza.utils.medium @@ -29,47 +31,46 @@ import it.hamy.muza.utils.medium @Composable fun PlaybackError( isDisplayed: Boolean, - messageProvider: () -> String, + messageProvider: @Composable () -> String, onDismiss: () -> Unit, modifier: Modifier = Modifier -) { - val (_, typography) = LocalAppearance.current +) = Box(modifier = modifier) { + val message by rememberUpdatedState(newValue = messageProvider()) - Box { - AnimatedVisibility( - visible = isDisplayed, - enter = fadeIn(), - exit = fadeOut(), - ) { - Spacer( - modifier = modifier - .pointerInput(Unit) { - detectTapGestures( - onTap = { - onDismiss() - } - ) - } - .fillMaxSize() - .background(Color.Black.copy(0.8f)) - ) - } - - AnimatedVisibility( - visible = isDisplayed, - enter = slideInVertically { -it }, - exit = slideOutVertically { -it }, + AnimatedVisibility( + visible = isDisplayed, + enter = fadeIn(), + exit = fadeOut() + ) { + Spacer( modifier = Modifier - .align(Alignment.TopCenter) - ) { - BasicText( - text = remember { messageProvider() }, - style = typography.xs.center.medium.color(PureBlackColorPalette.text), - modifier = Modifier - .background(Color.Black.copy(0.4f)) - .padding(all = 8.dp) - .fillMaxWidth() + .pointerInput(Unit) { + detectTapGestures(onTap = { onDismiss() }) + } + .fillMaxSize() + .background(Color.Black.copy(0.8f)) + ) + } + + AnimatedContent( + targetState = message.takeIf { isDisplayed }, + transitionSpec = { + ContentTransform( + targetContentEnter = slideInVertically { -it }, + initialContentExit = slideOutVertically { -it }, + sizeTransform = null ) - } + }, + label = "", + modifier = Modifier.fillMaxWidth() + ) { currentMessage -> + if (currentMessage != null) BasicText( + text = currentMessage, + style = LocalAppearance.current.typography.xs.center.medium.color(PureBlackColorPalette.text), + modifier = Modifier + .background(Color.Black.copy(0.4f)) + .padding(all = 8.dp) + .fillMaxWidth() + ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt index 55bda0f..ec000a1 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Player.kt @@ -5,8 +5,12 @@ import android.content.Intent import android.media.audiofx.AudioEffect import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.annotation.OptIn +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.togetherWith import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -25,9 +29,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.neverEqualPolicy import androidx.compose.runtime.remember @@ -41,48 +48,71 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.coerceAtMost import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem import androidx.media3.common.Player +import androidx.media3.common.util.UnstableApi import coil.compose.AsyncImage -import it.hamy.innertube.models.NavigationEndpoint import it.hamy.compose.routing.OnGlobalRoute +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R +import it.hamy.muza.enums.ThumbnailRoundness +import it.hamy.muza.models.ui.toUiMedia +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.roundedShape import it.hamy.muza.service.PlayerService +import it.hamy.muza.transaction import it.hamy.muza.ui.components.BottomSheet import it.hamy.muza.ui.components.BottomSheetState import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.rememberBottomSheetState import it.hamy.muza.ui.components.themed.BaseMediaItemMenu import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.SliderDialog +import it.hamy.muza.ui.modifiers.PinchDirection +import it.hamy.muza.ui.modifiers.onSwipe +import it.hamy.muza.ui.modifiers.pinchToToggle import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.collapsedPlayerProgressBar -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.DisposableListener import it.hamy.muza.utils.forceSeekToNext +import it.hamy.muza.utils.forceSeekToPrevious import it.hamy.muza.utils.isLandscape import it.hamy.muza.utils.positionAndDurationState +import it.hamy.muza.utils.px import it.hamy.muza.utils.seamlessPlay import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.shouldBePlaying import it.hamy.muza.utils.thumbnail import it.hamy.muza.utils.toast +import kotlinx.coroutines.flow.distinctUntilChanged import kotlin.math.absoluteValue -@ExperimentalFoundationApi -@ExperimentalAnimationApi +private fun onDismiss(binder: PlayerService.Binder) { + binder.stopRadio() + binder.player.clearMediaItems() +} + @Composable fun Player( layoutState: BottomSheetState, modifier: Modifier = Modifier, + shape: RoundedCornerShape = RoundedCornerShape( + topStart = 12.dp, + topEnd = 12.dp + ) ) { val menuState = LocalMenuState.current - val (colorPalette, typography, thumbnailShape) = LocalAppearance.current + val (colorPalette, typography, thumbnailCornerSize) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current binder?.player ?: return @@ -127,15 +157,24 @@ fun Player( BottomSheet( state = layoutState, modifier = modifier, - onDismiss = { - binder.stopRadio() - binder.player.clearMediaItems() - }, + onDismiss = { onDismiss(binder) }, + indication = null, collapsedContent = { Row( horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.Top, modifier = Modifier + .let { + if (PlayerPreferences.horizontalSwipeToClose) it.onSwipe( + animateOffset = true, + onSwipeOut = { animationJob -> + animationJob.join() + layoutState.dismiss() + onDismiss(binder) + } + ) else it + } + .clip(shape) .background(colorPalette.background1) .fillMaxSize() .padding(horizontalBottomPaddingValues) @@ -151,22 +190,19 @@ fun Player( ) } ) { - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) Box( contentAlignment = Alignment.Center, - modifier = Modifier - .height(Dimensions.collapsedPlayer) + modifier = Modifier.height(Dimensions.items.collapsedPlayerHeight) ) { AsyncImage( model = mediaItem.mediaMetadata.artworkUri.thumbnail(Dimensions.thumbnails.song.px), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier - .clip(thumbnailShape) + .clip(thumbnailCornerSize.coerceAtMost(ThumbnailRoundness.Heavy.dp).roundedShape) + .background(colorPalette.background0) .size(48.dp) ) } @@ -174,44 +210,61 @@ fun Player( Column( verticalArrangement = Arrangement.Center, modifier = Modifier - .height(Dimensions.collapsedPlayer) + .height(Dimensions.items.collapsedPlayerHeight) .weight(1f) ) { - BasicText( - text = mediaItem.mediaMetadata.title?.toString() ?: "", - style = typography.xs.semiBold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - BasicText( - text = mediaItem.mediaMetadata.artist?.toString() ?: "", - style = typography.xs.semiBold.secondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) + AnimatedContent( + targetState = mediaItem.mediaMetadata.title?.toString().orEmpty(), + label = "", + transitionSpec = { fadeIn() togetherWith fadeOut() } + ) { text -> + BasicText( + text = text, + style = typography.xs.semiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + AnimatedVisibility(visible = mediaItem.mediaMetadata.artist != null) { + AnimatedContent( + targetState = mediaItem.mediaMetadata.artist?.toString().orEmpty(), + label = "", + transitionSpec = { fadeIn() togetherWith fadeOut() } + ) { text -> + BasicText( + text = text, + style = typography.xs.semiBold.secondary, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + } } - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) Row( - horizontalArrangement = Arrangement.spacedBy(12.dp), + horizontalArrangement = Arrangement.spacedBy(25.dp), verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .height(Dimensions.collapsedPlayer) + modifier = Modifier.height(Dimensions.items.collapsedPlayerHeight) ) { + AnimatedVisibility(visible = PlayerPreferences.isShowingPrevButtonCollapsed) { + IconButton( + icon = R.drawable.play_skip_back, + color = colorPalette.text, + onClick = binder.player::forceSeekToPrevious, + modifier = Modifier + .padding(horizontal = 4.dp, vertical = 8.dp) + .size(20.dp) + ) + } + IconButton( icon = if (shouldBePlaying) R.drawable.pause else R.drawable.play, color = colorPalette.text, onClick = { - if (shouldBePlaying) { - binder.player.pause() - } else { - if (binder.player.playbackState == Player.STATE_IDLE) { - binder.player.prepare() - } + if (shouldBePlaying) binder.player.pause() else { + if (binder.player.playbackState == Player.STATE_IDLE) binder.player.prepare() binder.player.play() } }, @@ -230,27 +283,22 @@ fun Player( ) } - Spacer( - modifier = Modifier - .width(2.dp) - ) + Spacer(modifier = Modifier.width(2.dp)) } } ) { - var isShowingLyrics by rememberSaveable { - mutableStateOf(false) - } + var isShowingStatsForNerds by rememberSaveable { mutableStateOf(false) } + var isShowingLyricsDialog by rememberSaveable { mutableStateOf(false) } - var isShowingStatsForNerds by rememberSaveable { - mutableStateOf(false) - } + if (isShowingLyricsDialog) LyricsDialog(onDismiss = { isShowingLyricsDialog = false }) val playerBottomSheetState = rememberBottomSheetState( - 64.dp + horizontalBottomPaddingValues.calculateBottomPadding(), - layoutState.expandedBound + dismissedBound = 64.dp + horizontalBottomPaddingValues.calculateBottomPadding(), + expandedBound = layoutState.expandedBound ) val containerModifier = Modifier + .clip(shape) .background(colorPalette.background1) .padding( windowInsets @@ -259,92 +307,163 @@ fun Player( ) .padding(bottom = playerBottomSheetState.collapsedBound) - val thumbnailContent: @Composable (modifier: Modifier) -> Unit = { modifier -> + val thumbnailContent: @Composable (modifier: Modifier) -> Unit = { innerModifier -> Thumbnail( - isShowingLyrics = isShowingLyrics, - onShowLyrics = { isShowingLyrics = it }, + isShowingLyrics = PlayerPreferences.isShowingLyrics, + onShowLyrics = { PlayerPreferences.isShowingLyrics = it }, isShowingStatsForNerds = isShowingStatsForNerds, onShowStatsForNerds = { isShowingStatsForNerds = it }, - modifier = modifier + modifier = innerModifier .nestedScroll(layoutState.preUpPostDownNestedScrollConnection) + .pinchToToggle( + key = isShowingLyricsDialog, + direction = PinchDirection.Out, + threshold = 1.05f, + onPinch = { + if (PlayerPreferences.isShowingLyrics) isShowingLyricsDialog = true + } + ) ) } - val controlsContent: @Composable (modifier: Modifier) -> Unit = { modifier -> + val controlsContent: @Composable (modifier: Modifier) -> Unit = { innerModifier -> + val media = mediaItem.toUiMedia(positionAndDuration.second) + Controls( - mediaId = mediaItem.mediaId, - title = mediaItem.mediaMetadata.title?.toString(), - artist = mediaItem.mediaMetadata.artist?.toString(), + media = media, shouldBePlaying = shouldBePlaying, position = positionAndDuration.first, - duration = positionAndDuration.second, - modifier = modifier + modifier = innerModifier ) } - if (isLandscape) { - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = containerModifier - .padding(top = 32.dp) + if (isLandscape) Row( + verticalAlignment = Alignment.CenterVertically, + modifier = containerModifier.padding(top = 32.dp) + ) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .weight(0.66f) + .padding(bottom = 16.dp) ) { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .weight(0.66f) - .padding(bottom = 16.dp) - ) { - thumbnailContent( - modifier = Modifier - .padding(horizontal = 16.dp) - ) - } - - controlsContent( - modifier = Modifier - .padding(vertical = 8.dp) - .fillMaxHeight() - .weight(1f) - ) + thumbnailContent(Modifier.padding(horizontal = 16.dp)) } - } else { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = containerModifier - .padding(top = 54.dp) + + controlsContent( + Modifier + .padding(vertical = 8.dp) + .fillMaxHeight() + .weight(1f) + ) + } else Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = containerModifier.padding(top = 54.dp) + ) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.weight(1.25f) + ) { + thumbnailContent(Modifier.padding(horizontal = 32.dp, vertical = 8.dp)) + } + + controlsContent( + Modifier + .padding(vertical = 8.dp) + .fillMaxWidth() + .weight(1f) + ) + } + + var speedDialogOpen by rememberSaveable { mutableStateOf(false) } + + if (speedDialogOpen) { + SliderDialog( + onDismiss = { speedDialogOpen = false }, + title = stringResource(R.string.playback_speed), + provideState = { + remember(PlayerPreferences.speed) { + mutableFloatStateOf(PlayerPreferences.speed) + } + }, + onSlideCompleted = { PlayerPreferences.speed = it }, + min = 0f, + max = 2f, + toDisplay = { + if (it <= 0.01f) stringResource(R.string.minimum_speed_value) + else stringResource(R.string.format_speed_multiplier, "%.2f".format(it)) + } ) { Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .weight(1.25f) + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center ) { - thumbnailContent( - modifier = Modifier - .padding(horizontal = 32.dp, vertical = 8.dp) + SecondaryTextButton( + text = stringResource(R.string.reset), + onClick = { + PlayerPreferences.speed = 1f + } ) } - - controlsContent( - modifier = Modifier - .padding(vertical = 8.dp) - .fillMaxWidth() - .weight(1f) - ) } } + var boostDialogOpen by rememberSaveable { mutableStateOf(false) } - Queue( - layoutState = playerBottomSheetState, - content = { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.End, - modifier = Modifier - .align(Alignment.BottomEnd) - .padding(horizontal = 8.dp) - .fillMaxHeight() + if (boostDialogOpen) { + fun submit(state: Float) = transaction { + Database.setLoudnessBoost( + songId = mediaItem.mediaId, + loudnessBoost = state.takeUnless { it == 0f } + ) + } + + SliderDialog( + onDismiss = { boostDialogOpen = false }, + title = stringResource(R.string.song_volume_boost), + provideState = { + val state = remember { mutableFloatStateOf(0f) } + + LaunchedEffect(mediaItem.mediaId) { + Database + .loudnessBoost(mediaItem.mediaId) + .distinctUntilChanged() + .collect { state.floatValue = it ?: 0f } + } + + state + }, + onSlideCompleted = { submit(it) }, + min = -20f, + max = 20f, + toDisplay = { stringResource(R.string.format_db, "%.2f".format(it)) } + ) { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center ) { + SecondaryTextButton( + text = stringResource(R.string.reset), + onClick = { submit(0f) } + ) + } + } + } + + with(PlayerPreferences) { + Queue( + layoutState = playerBottomSheetState, + beforeContent = { + if (playerLayout == PlayerPreferences.PlayerLayout.New) IconButton( + onClick = { trackLoopEnabled = !trackLoopEnabled }, + icon = R.drawable.infinite, + color = if (trackLoopEnabled) colorPalette.text else colorPalette.textDisabled, + modifier = Modifier + .padding(vertical = 8.dp) + .size(20.dp) + ) else Spacer(modifier = Modifier.width(20.dp)) + }, + afterContent = { IconButton( icon = R.drawable.ellipsis_horizontal, color = colorPalette.text, @@ -353,34 +472,34 @@ fun Player( PlayerMenu( onDismiss = menuState::hide, mediaItem = mediaItem, - binder = binder + binder = binder, + onShowSpeedDialog = { speedDialogOpen = true }, + onShowNormalizationDialog = + if (volumeNormalization) ({ boostDialogOpen = true }) else null ) } }, modifier = Modifier - .padding(horizontal = 4.dp, vertical = 8.dp) + .padding(vertical = 8.dp) .size(20.dp) ) - - Spacer( - modifier = Modifier - .width(4.dp) - ) - } - }, - backgroundColorProvider = { colorPalette.background2 }, - modifier = Modifier - .align(Alignment.BottomCenter) - ) + }, + backgroundColorProvider = { colorPalette.background2 }, + modifier = Modifier.align(Alignment.BottomCenter), + shape = shape + ) + } } } -@ExperimentalAnimationApi @Composable +@OptIn(UnstableApi::class) private fun PlayerMenu( binder: PlayerService.Binder, mediaItem: MediaItem, - onDismiss: () -> Unit + onDismiss: () -> Unit, + onShowSpeedDialog: (() -> Unit)? = null, + onShowNormalizationDialog: (() -> Unit)? = null ) { val context = LocalContext.current @@ -404,10 +523,12 @@ private fun PlayerMenu( } ) } catch (e: ActivityNotFoundException) { - context.toast("На вашем смартфоне не найдено эквалайзера") + context.toast(context.getString(R.string.no_equalizer_installed)) } }, onShowSleepTimer = {}, - onDismiss = onDismiss + onDismiss = onDismiss, + onShowSpeedDialog = onShowSpeedDialog, + onShowNormalizationDialog = onShowNormalizationDialog ) } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt index b997880..f7673ff 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Queue.kt @@ -1,13 +1,8 @@ package it.hamy.muza.ui.screens.player -import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope +import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.ContentTransform import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.animateContentSize -import androidx.compose.animation.core.Animatable -import androidx.compose.animation.core.VectorConverter import androidx.compose.animation.core.tween import androidx.compose.animation.core.updateTransition import androidx.compose.animation.fadeIn @@ -17,145 +12,187 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.gestures.draggable -import androidx.compose.foundation.gestures.rememberDraggableState +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicText -import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.drawBehind -import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.layout.LookaheadScope import androidx.compose.ui.res.painterResource -import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.res.pluralStringResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.common.Timeline import com.valentinilk.shimmer.shimmer -import it.hamy.compose.reordering.ReorderingLazyColumn +import it.hamy.compose.persist.PersistMapCleanup +import it.hamy.compose.persist.persist import it.hamy.compose.reordering.animateItemPlacement import it.hamy.compose.reordering.draggedItem import it.hamy.compose.reordering.rememberReorderingState -import it.hamy.compose.reordering.reorder +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.bodies.NextBody +import it.hamy.innertube.requests.nextPage +import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R +import it.hamy.muza.enums.PlaylistSortBy +import it.hamy.muza.enums.SortOrder +import it.hamy.muza.models.Playlist +import it.hamy.muza.models.SongPlaylistMap +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.transaction import it.hamy.muza.ui.components.BottomSheet import it.hamy.muza.ui.components.BottomSheetState import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.MusicBars +import it.hamy.muza.ui.components.themed.BaseMediaItemMenu import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop +import it.hamy.muza.ui.components.themed.HorizontalDivider import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.components.themed.Menu +import it.hamy.muza.ui.components.themed.MenuEntry import it.hamy.muza.ui.components.themed.QueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.ReorderHandle +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.TextFieldDialog +import it.hamy.muza.ui.components.themed.TextToggle import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder +import it.hamy.muza.ui.modifiers.swipeToClose import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.onOverlay -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.addNext +import it.hamy.muza.utils.asMediaItem +import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.medium -import it.hamy.muza.utils.queueLoopEnabledKey -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.onFirst +import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.shouldBePlaying import it.hamy.muza.utils.shuffleQueue import it.hamy.muza.utils.smoothScrollToTop import it.hamy.muza.utils.windows +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import kotlin.math.roundToInt +import kotlinx.coroutines.withContext +import kotlin.time.Duration.Companion.milliseconds -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalAnimationApi::class, ExperimentalFoundationApi::class) @Composable fun Queue( backgroundColorProvider: () -> Color, layoutState: BottomSheetState, + beforeContent: @Composable RowScope.() -> Unit, + afterContent: @Composable RowScope.() -> Unit, modifier: Modifier = Modifier, - content: @Composable BoxScope.() -> Unit, + shape: RoundedCornerShape = RoundedCornerShape( + topStart = 12.dp, + topEnd = 12.dp + ) ) { - val (colorPalette, typography, thumbnailShape) = LocalAppearance.current + val colorPalette = LocalAppearance.current.colorPalette + val typography = LocalAppearance.current.typography + val thumbnailShape = LocalAppearance.current.thumbnailShape val windowInsets = WindowInsets.systemBars val horizontalBottomPaddingValues = windowInsets - .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom).asPaddingValues() + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom) + .asPaddingValues() + + var suggestions by persist?>?>(tag = "queue/suggestions") + + PersistMapCleanup(prefix = "queue/suggestions") BottomSheet( state = layoutState, modifier = modifier, collapsedContent = { - Box( + Row( modifier = Modifier + .clip(shape) .drawBehind { drawRect(backgroundColorProvider()) } .fillMaxSize() - .padding(horizontalBottomPaddingValues) + .padding(horizontalBottomPaddingValues), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) ) { + Spacer(modifier = Modifier.width(4.dp)) + beforeContent() + Spacer(modifier = Modifier.weight(1f)) Image( painter = painterResource(R.drawable.playlist), contentDescription = null, colorFilter = ColorFilter.tint(colorPalette.text), - modifier = Modifier - .align(Alignment.Center) - .size(18.dp) + modifier = Modifier.size(18.dp) ) - - content() + Spacer(modifier = Modifier.weight(1f)) + afterContent() + Spacer(modifier = Modifier.width(4.dp)) } } ) { val binder = LocalPlayerServiceBinder.current + val menuState = LocalMenuState.current binder?.player ?: return@BottomSheet val player = binder.player - var queueLoopEnabled by rememberPreference(queueLoopEnabledKey, defaultValue = true) - - val menuState = LocalMenuState.current - - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - var mediaItemIndex by remember { - mutableStateOf(if (player.mediaItemCount == 0) -1 else player.currentMediaItemIndex) + mutableIntStateOf(if (player.mediaItemCount == 0) -1 else player.currentMediaItemIndex) } - var windows by remember { - mutableStateOf(player.currentTimeline.windows) - } + var windows by remember { mutableStateOf(player.currentTimeline.windows) } + var shouldBePlaying by remember { mutableStateOf(player.shouldBePlaying) } - var shouldBePlaying by remember { - mutableStateOf(binder.player.shouldBePlaying) + val visibleSuggestions by remember(suggestions) { + derivedStateOf { + suggestions + ?.getOrNull() + .orEmpty() + .filter { windows.none { window -> window.mediaItem.mediaId == it.mediaId } } + } } player.DisposableListener { @@ -181,179 +218,195 @@ fun Queue( } } + LaunchedEffect(mediaItemIndex) { + withContext(Dispatchers.IO) { + suggestions = runCatching { + Innertube.nextPage( + NextBody( + videoId = windows[mediaItemIndex].mediaItem.mediaId + ) + )?.mapCatching { it.itemsPage?.items?.map(Innertube.SongItem::asMediaItem) } + }.getOrNull() + } + } + val reorderingState = rememberReorderingState( - lazyListState = rememberLazyListState(initialFirstVisibleItemIndex = mediaItemIndex), + lazyListState = rememberLazyListState(), key = windows, onDragEnd = player::moveMediaItem, extraItemCount = 0 ) - val rippleIndication = rememberRipple(bounded = false) - - val musicBarsTransition = updateTransition(targetState = mediaItemIndex, label = "") - - val deleteHistory = remember { - mutableStateListOf() + LaunchedEffect(Unit) { + reorderingState.lazyListState.scrollToItem(index = mediaItemIndex.coerceAtLeast(0)) } + val scrollConnection = remember { + layoutState.preUpPostDownNestedScrollConnection + } + + val musicBarsTransition = updateTransition( + targetState = if (reorderingState.isDragging) -1L else mediaItemIndex, + label = "" + ) + Column { Box( modifier = Modifier + .clip(shape) .background(colorPalette.background1) .weight(1f) ) { - ReorderingLazyColumn( - reorderingState = reorderingState, - contentPadding = windowInsets - .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) - .asPaddingValues(), - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .nestedScroll(layoutState.preUpPostDownNestedScrollConnection) + LookaheadScope { + LazyColumn( + state = reorderingState.lazyListState, + contentPadding = windowInsets + .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) + .asPaddingValues(), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.nestedScroll(scrollConnection) + ) { + itemsIndexed( + items = windows, + key = { _, window -> window.uid.hashCode() } + ) { i, window -> + val isPlayingThisMediaItem = mediaItemIndex == window.firstPeriodIndex - ) { - items( - items = windows, - key = { it.uid.hashCode() } - ) { window -> - val isPlayingThisMediaItem = mediaItemIndex == window.firstPeriodIndex - val offsetX = remember { Animatable(Offset(0f, 0f), Offset.VectorConverter) } - SongItem( - song = window.mediaItem, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - onThumbnailContent = { - musicBarsTransition.AnimatedVisibility( - visible = { it == window.firstPeriodIndex }, - enter = fadeIn(tween(800)), - exit = fadeOut(tween(800)), - ) { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .background( - color = Color.Black.copy(alpha = 0.25f), - shape = thumbnailShape - ) - .size(Dimensions.thumbnails.song) + SongItem( + song = window.mediaItem, + thumbnailSize = Dimensions.thumbnails.song, + onThumbnailContent = { + musicBarsTransition.AnimatedVisibility( + visible = { it == window.firstPeriodIndex }, + enter = fadeIn(tween(800)), + exit = fadeOut(tween(800)) ) { - if (shouldBePlaying) { - MusicBars( + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .background( + color = Color.Black.copy(alpha = 0.25f), + shape = thumbnailShape + ) + .size(Dimensions.thumbnails.song) + ) { + if (shouldBePlaying) MusicBars( color = colorPalette.onOverlay, - modifier = Modifier - .height(24.dp) - ) - } else { - Image( + modifier = Modifier.height(24.dp) + ) else Image( painter = painterResource(R.drawable.play), contentDescription = null, colorFilter = ColorFilter.tint(colorPalette.onOverlay), - modifier = Modifier - .size(24.dp) + modifier = Modifier.size(24.dp) ) } } + }, + trailingContent = { + ReorderHandle( + reorderingState = reorderingState, + index = i + ) + }, + modifier = Modifier + .combinedClickable( + onLongClick = { + menuState.display { + QueuedMediaItemMenu( + mediaItem = window.mediaItem, + indexInQueue = if (isPlayingThisMediaItem) null + else window.firstPeriodIndex, + onDismiss = menuState::hide + ) + } + }, + onClick = { + if (isPlayingThisMediaItem) { + if (shouldBePlaying) player.pause() else player.play() + } else { + player.seekToDefaultPosition(window.firstPeriodIndex) + player.playWhenReady = true + } + } + ) + .animateItemPlacement(reorderingState) + .draggedItem( + reorderingState = reorderingState, + index = i + ) + .background(colorPalette.background1) + .let { + if (PlayerPreferences.horizontalSwipeToRemoveItem && !isPlayingThisMediaItem) + it.swipeToClose( + key = windows, + delay = 100.milliseconds, + onClose = { player.removeMediaItem(window.firstPeriodIndex) } + ) + else it + } + ) + } + + item { + if (visibleSuggestions.isNotEmpty()) HorizontalDivider( + modifier = Modifier.padding(start = 28.dp + Dimensions.thumbnails.song) + ) + } + + items(visibleSuggestions) { + SongItem( + song = it, + thumbnailSize = Dimensions.thumbnails.song, + modifier = Modifier.clickable { + menuState.display { + BaseMediaItemMenu( + onDismiss = { menuState.hide() }, + mediaItem = it, + onEnqueue = { binder.player.enqueue(it) }, + onPlayNext = { binder.player.addNext(it) } + ) + } } - }, - trailingContent = { - IconButton( - icon = R.drawable.reorder, - color = colorPalette.textDisabled, - indication = rippleIndication, - onClick = {}, - modifier = Modifier - .reorder( - reorderingState = reorderingState, - index = window.firstPeriodIndex - ) - .size(18.dp) - ) - }, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - QueuedMediaItemMenu( - mediaItem = window.mediaItem, - indexInQueue = if (isPlayingThisMediaItem) null else window.firstPeriodIndex, - onDismiss = menuState::hide - ) - } - }, - onClick = { - if (isPlayingThisMediaItem) { - if (shouldBePlaying) { - player.pause() - } else { - player.play() - } - } else { - player.seekToDefaultPosition(window.firstPeriodIndex) - player.playWhenReady = true - } - } - ) - .animateItemPlacement(reorderingState = reorderingState) - .draggedItem( - reorderingState = reorderingState, - index = window.firstPeriodIndex - ) - .draggable( - orientation = Orientation.Horizontal, - state = rememberDraggableState(onDelta = { delta -> - if (isPlayingThisMediaItem) return@rememberDraggableState - runBlocking { - offsetX.snapTo(offsetX.value + Offset(delta, 0f)) - } - }), - onDragStopped = { _ -> - if (offsetX.value.x >= 200.0f || offsetX.value.x <= -200.0f) { - val currentIndex = window.firstPeriodIndex - val mediaId = window.mediaItem.mediaId - - if (deleteHistory.indexOf(mediaId) != -1) return@draggable - deleteHistory.add(mediaId) - - var indexToDelete = currentIndex - for (i in 0 until currentIndex) { - if (deleteHistory.indexOf(windows.elementAt(i).mediaItem.mediaId) != -1) { - indexToDelete-- - } - } - - if (offsetX.value.x < 0) { - offsetX.animateTo(Offset(-1500.0f, offsetX.value.y)) - } else { - offsetX.animateTo(Offset(1500.0f, offsetX.value.y)) - } - - binder.player.removeMediaItem(indexToDelete) - deleteHistory.removeFirst() - } else { - offsetX.animateTo(Offset(0f, offsetX.value.y)) - } - } - ) - .offset { IntOffset(offsetX.value.x.roundToInt(), 0) } - ) - } - - item { - if (binder.isLoadingRadio) { - Column( - modifier = Modifier - .shimmer() ) { - repeat(3) { index -> - SongItemPlaceholder( - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .alpha(1f - index * 0.125f) - .fillMaxWidth() + Row( + horizontalArrangement = Arrangement.spacedBy( + space = 12.dp, + alignment = Alignment.End + ) + ) { + IconButton( + icon = R.drawable.play_skip_forward, + color = colorPalette.text, + onClick = { + binder.player.addNext(it) + }, + modifier = Modifier.size(18.dp) + ) + IconButton( + icon = R.drawable.enqueue, + color = colorPalette.text, + onClick = { + binder.player.enqueue(it) + }, + modifier = Modifier.size(18.dp) ) } } } + + item { + if (binder.isLoadingRadio || suggestions == null) + Column(modifier = Modifier.shimmer()) { + repeat(3) { index -> + SongItemPlaceholder( + thumbnailSize = Dimensions.thumbnails.song, + modifier = Modifier + .alpha(1f - index * 0.125f) + .fillMaxWidth() + ) + } + } + } } } @@ -372,69 +425,139 @@ fun Queue( ) } - - Box( + Row( modifier = Modifier .clickable(onClick = layoutState::collapseSoft) .background(colorPalette.background2) .fillMaxWidth() .padding(horizontal = 12.dp) .padding(horizontalBottomPaddingValues) - .height(64.dp) + .height(64.dp), + verticalAlignment = Alignment.CenterVertically ) { - BasicText( - text = "${windows.size}", - style = typography.xxs.medium, - modifier = Modifier - .background( - color = colorPalette.background1, - shape = RoundedCornerShape(16.dp) - ) - .align(Alignment.CenterStart) - .padding(all = 8.dp) + TextToggle( + state = PlayerPreferences.queueLoopEnabled, + toggleState = { + PlayerPreferences.queueLoopEnabled = !PlayerPreferences.queueLoopEnabled + }, + name = stringResource(R.string.queue_loop) ) + Spacer(modifier = Modifier.weight(1f)) Image( painter = painterResource(R.drawable.chevron_down), contentDescription = null, colorFilter = ColorFilter.tint(colorPalette.text), - modifier = Modifier - .align(Alignment.Center) - .size(18.dp) + modifier = Modifier.size(18.dp) ) + Spacer(modifier = Modifier.weight(1f)) - Row( + BasicText( + text = pluralStringResource( + id = R.plurals.song_count_plural, + count = windows.size, + windows.size + ), + style = typography.xxs.medium, modifier = Modifier .clip(RoundedCornerShape(16.dp)) - .clickable { queueLoopEnabled = !queueLoopEnabled } + .clickable { + fun addToPlaylist(playlist: Playlist, index: Int) = transaction { + val playlistId = Database + .insert(playlist) + .takeIf { it != -1L } ?: playlist.id + + windows.forEachIndexed { i, window -> + val mediaItem = window.mediaItem + + Database.insert(mediaItem) + Database.insert( + SongPlaylistMap( + songId = mediaItem.mediaId, + playlistId = playlistId, + position = index + i + ) + ) + } + } + + menuState.display { + var isCreatingNewPlaylist by rememberSaveable { mutableStateOf(false) } + + val playlistPreviews by remember { + Database + .playlistPreviews( + sortBy = PlaylistSortBy.DateAdded, + sortOrder = SortOrder.Descending + ) + .onFirst { isCreatingNewPlaylist = it.isEmpty() } + }.collectAsState(initial = null, context = Dispatchers.IO) + + if (isCreatingNewPlaylist) TextFieldDialog( + hintText = stringResource(R.string.enter_playlist_name_prompt), + onDismiss = { isCreatingNewPlaylist = false }, + onDone = { text -> + menuState.hide() + addToPlaylist(Playlist(name = text), 0) + } + ) + + BackHandler { menuState.hide() } + + Menu { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(horizontal = 24.dp, vertical = 8.dp) + .fillMaxWidth() + ) { + BasicText( + text = stringResource(R.string.add_queue_to_playlist), + style = typography.m.semiBold, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + modifier = Modifier.weight(weight = 2f, fill = false) + ) + + Spacer(modifier = Modifier.width(8.dp)) + + SecondaryTextButton( + text = stringResource(R.string.new_playlist), + onClick = { isCreatingNewPlaylist = true }, + alternative = true, + modifier = Modifier.weight(weight = 1f, fill = false) + ) + } + + if (playlistPreviews?.isEmpty() == true) + Spacer(modifier = Modifier.height(160.dp)) + + playlistPreviews?.forEach { playlistPreview -> + MenuEntry( + icon = R.drawable.playlist, + text = playlistPreview.playlist.name, + secondaryText = pluralStringResource( + id = R.plurals.song_count_plural, + count = playlistPreview.songCount, + playlistPreview.songCount + ), + onClick = { + menuState.hide() + addToPlaylist( + playlistPreview.playlist, + playlistPreview.songCount + ) + } + ) + } + } + } + } .background(colorPalette.background1) .padding(horizontal = 16.dp, vertical = 8.dp) - .align(Alignment.CenterEnd) - .animateContentSize() - ) { - BasicText( - text = "Повтор ", - style = typography.xxs.medium, - ) - - AnimatedContent( - targetState = queueLoopEnabled, - transitionSpec = { - val slideDirection = if (targetState) AnimatedContentScope.SlideDirection.Up else AnimatedContentScope.SlideDirection.Down - - ContentTransform( - targetContentEnter = slideIntoContainer(slideDirection) + fadeIn(), - initialContentExit = slideOutOfContainer(slideDirection) + fadeOut(), - ) - } - ) { - BasicText( - text = if (it) "вкл." else "откл.", - style = typography.xxs.medium, - ) - } - } + ) } } } -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt index 12881c1..2202178 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/StatsForNerds.kt @@ -1,6 +1,7 @@ package it.hamy.muza.ui.screens.player import android.text.format.Formatter +import androidx.annotation.OptIn import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -17,6 +18,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -24,7 +26,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.media3.common.util.UnstableApi import androidx.media3.datasource.cache.Cache import androidx.media3.datasource.cache.CacheSpan import it.hamy.innertube.Innertube @@ -32,19 +36,21 @@ import it.hamy.innertube.models.bodies.PlayerBody import it.hamy.innertube.requests.player import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R import it.hamy.muza.models.Format import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.ui.styling.onOverlay import it.hamy.muza.ui.styling.overlay import it.hamy.muza.utils.color import it.hamy.muza.utils.medium -import kotlin.math.roundToInt import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.withContext +import kotlin.math.roundToInt +@OptIn(UnstableApi::class) @Composable fun StatsForNerds( mediaId: String, @@ -59,43 +65,40 @@ fun StatsForNerds( AnimatedVisibility( visible = isDisplayed, enter = fadeIn(), - exit = fadeOut(), + exit = fadeOut() ) { var cachedBytes by remember(mediaId) { - mutableStateOf(binder.cache.getCachedBytes(mediaId, 0, -1)) + mutableLongStateOf(binder.cache.getCachedBytes(mediaId, 0, -1)) } - var format by remember { - mutableStateOf(null) - } + var format by remember { mutableStateOf(null) } LaunchedEffect(mediaId) { Database.format(mediaId).distinctUntilChanged().collectLatest { currentFormat -> - if (currentFormat?.itag == null) { - binder.player.currentMediaItem?.takeIf { it.mediaId == mediaId }?.let { mediaItem -> + if (currentFormat?.itag == null) binder.player.currentMediaItem + ?.takeIf { it.mediaId == mediaId } + ?.let { mediaItem -> withContext(Dispatchers.IO) { delay(2000) - Innertube.player(PlayerBody(videoId = mediaId))?.onSuccess { response -> - response.streamingData?.highestQualityFormat?.let { format -> - Database.insert(mediaItem) - Database.insert( - Format( - songId = mediaId, - itag = format.itag, - mimeType = format.mimeType, - bitrate = format.bitrate, - loudnessDb = response.playerConfig?.audioConfig?.normalizedLoudnessDb, - contentLength = format.contentLength, - lastModified = format.lastModified + Innertube.player(PlayerBody(videoId = mediaId)) + ?.onSuccess { response -> + response.streamingData?.highestQualityFormat?.let { format -> + Database.insert(mediaItem) + Database.insert( + Format( + songId = mediaId, + itag = format.itag, + mimeType = format.mimeType, + bitrate = format.bitrate, + loudnessDb = response.playerConfig?.audioConfig?.normalizedLoudnessDb, + contentLength = format.contentLength, + lastModified = format.lastModified + ) ) - ) + } } - } } - } - } else { - format = currentFormat - } + } else format = currentFormat } } @@ -123,11 +126,7 @@ fun StatsForNerds( Box( modifier = modifier .pointerInput(Unit) { - detectTapGestures( - onTap = { - onDismiss() - } - ) + detectTapGestures(onTap = { onDismiss() }) } .background(colorPalette.overlay) .fillMaxSize() @@ -138,70 +137,54 @@ fun StatsForNerds( .align(Alignment.Center) .padding(all = 16.dp) ) { + @Composable + fun Text(text: String) = BasicText( + text = text, + maxLines = 1, + style = typography.xs.medium.color(colorPalette.onOverlay) + ) + Column(horizontalAlignment = Alignment.End) { - BasicText( - text = "Id", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = "Itag", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = "Bitrate", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = "Size", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = "Cached", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = "Loudness", - style = typography.xs.medium.color(colorPalette.onOverlay) - ) + Text(text = stringResource(R.string.id)) + Text(text = stringResource(R.string.itag)) + Text(text = stringResource(R.string.bitrate)) + Text(text = stringResource(R.string.size)) + Text(text = stringResource(R.string.cached)) + Text(text = stringResource(R.string.loudness)) } Column { - BasicText( - text = mediaId, - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) + Text(text = mediaId) + Text(text = format?.itag?.toString() ?: stringResource(R.string.unknown)) + Text( + text = format?.bitrate?.let { + stringResource( + R.string.format_kbps, + it / 1000 + ) + } ?: stringResource(R.string.unknown) ) - BasicText( - text = format?.itag?.toString() ?: "Unknown", - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( - text = format?.bitrate?.let { "${it / 1000} kbps" } ?: "Unknown", - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) - ) - BasicText( + Text( text = format?.contentLength - ?.let { Formatter.formatShortFileSize(context, it) } ?: "Unknown", - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) + ?.let { Formatter.formatShortFileSize(context, it) } + ?: stringResource(R.string.unknown) ) - BasicText( + Text( text = buildString { append(Formatter.formatShortFileSize(context, cachedBytes)) format?.contentLength?.let { append(" (${(cachedBytes.toFloat() / it * 100).roundToInt()}%)") } - }, - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) + } ) - BasicText( - text = format?.loudnessDb?.let { "%.2f dB".format(it) } ?: "Unknown", - maxLines = 1, - style = typography.xs.medium.color(colorPalette.onOverlay) + Text( + text = format?.loudnessDb?.let { + stringResource( + R.string.format_db, + "%.2f".format(it) + ) + } ?: stringResource(R.string.unknown) ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt index 914a963..d3e80a2 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/Thumbnail.kt @@ -1,51 +1,54 @@ package it.hamy.muza.ui.screens.player import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope +import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.ContentTransform -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.SizeTransform +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.media3.common.MediaItem -import androidx.media3.common.PlaybackException -import androidx.media3.common.Player import coil.compose.AsyncImage import it.hamy.muza.Database import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R import it.hamy.muza.service.LoginRequiredException import it.hamy.muza.service.PlayableFormatNotFoundException import it.hamy.muza.service.UnplayableException import it.hamy.muza.service.VideoIdMismatchException +import it.hamy.muza.service.isLocal +import it.hamy.muza.ui.modifiers.onSwipe import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px -import it.hamy.muza.utils.currentWindow -import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.forceSeekToNext +import it.hamy.muza.utils.forceSeekToPrevious +import it.hamy.muza.utils.px import it.hamy.muza.utils.thumbnail import java.net.UnknownHostException import java.nio.channels.UnresolvedAddressException -@ExperimentalAnimationApi @Composable fun Thumbnail( isShowingLyrics: Boolean, @@ -57,42 +60,26 @@ fun Thumbnail( val binder = LocalPlayerServiceBinder.current val player = binder?.player ?: return - val (thumbnailSizeDp, thumbnailSizePx) = Dimensions.thumbnails.player.song.let { - it to (it - 64.dp).px - } - - var nullableWindow by remember { - mutableStateOf(player.currentWindow) - } - - var error by remember { - mutableStateOf(player.playerError) - } - - player.DisposableListener { - object : Player.Listener { - override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { - nullableWindow = player.currentWindow - } - - override fun onPlaybackStateChanged(playbackState: Int) { - error = player.playerError - } - - override fun onPlayerError(playbackException: PlaybackException) { - error = playbackException - } - } - } + val (colorPalette) = LocalAppearance.current + val thumbnailShape = LocalAppearance.current.thumbnailShape + val thumbnailSize = Dimensions.thumbnails.player.song + val (nullableWindow, error) = currentWindow() val window = nullableWindow ?: return AnimatedContent( targetState = window, transitionSpec = { + if (initialState.mediaItem.mediaId == targetState.mediaItem.mediaId) + return@AnimatedContent ContentTransform( + EnterTransition.None, + ExitTransition.None + ) + val duration = 500 - val slideDirection = - if (targetState.firstPeriodIndex > initialState.firstPeriodIndex) AnimatedContentScope.SlideDirection.Left else AnimatedContentScope.SlideDirection.Right + val slideDirection = if (targetState.firstPeriodIndex > initialState.firstPeriodIndex) + AnimatedContentTransitionScope.SlideDirection.Left + else AnimatedContentTransitionScope.SlideDirection.Right ContentTransform( targetContentEnter = slideIntoContainer( @@ -113,19 +100,41 @@ fun Thumbnail( targetScale = 0.85f, animationSpec = tween(duration) ), - sizeTransform = SizeTransform(clip = false) + sizeTransform = null ) }, - contentAlignment = Alignment.Center - ) {currentWindow -> + modifier = modifier.onSwipe( + onSwipeLeft = { + binder.player.forceSeekToNext() + }, + onSwipeRight = { + binder.player.seekToDefaultPosition() + binder.player.forceSeekToPrevious() + } + ), + contentAlignment = Alignment.Center, + label = "" + ) { currentWindow -> + val shadowElevation by animateDpAsState( + targetValue = if (window == currentWindow) 8.dp else 0.dp, + animationSpec = tween(durationMillis = 1000, easing = LinearEasing), + label = "" + ) + Box( - modifier = modifier + modifier = Modifier .aspectRatio(1f) - .clip(LocalAppearance.current.thumbnailShape) - .size(thumbnailSizeDp) + .size(thumbnailSize) + .shadow( + elevation = shadowElevation, + shape = thumbnailShape, + clip = false + ) + .clip(thumbnailShape) ) { - AsyncImage( - model = currentWindow.mediaItem.mediaMetadata.artworkUri.thumbnail(thumbnailSizePx), + if (currentWindow.mediaItem.mediaMetadata.artworkUri != null) AsyncImage( + model = currentWindow.mediaItem.mediaMetadata.artworkUri.thumbnail((thumbnailSize - 64.dp).px), + error = painterResource(id = R.drawable.ic_launcher_foreground), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier @@ -136,16 +145,25 @@ fun Thumbnail( ) } .fillMaxSize() + .background(colorPalette.background0) + ) else Icon( + painter = painterResource(id = R.drawable.ic_launcher_foreground), + contentDescription = null, + modifier = Modifier + .pointerInput(Unit) { + detectTapGestures(onLongPress = { onShowStatsForNerds(true) }) + } + .fillMaxSize() ) - Lyrics( + if (!currentWindow.mediaItem.isLocal) Lyrics( mediaId = currentWindow.mediaItem.mediaId, isDisplayed = isShowingLyrics && error == null, onDismiss = { onShowLyrics(false) }, ensureSongInserted = { Database.insert(currentWindow.mediaItem) }, - size = thumbnailSizeDp, + height = thumbnailSize, mediaMetadataProvider = currentWindow.mediaItem::mediaMetadata, - durationProvider = player::getDuration, + durationProvider = player::getDuration ) StatsForNerds( @@ -157,14 +175,17 @@ fun Thumbnail( PlaybackError( isDisplayed = error != null, messageProvider = { - when (error?.cause?.cause) { - is UnresolvedAddressException, is UnknownHostException -> "A network error has occurred" - is PlayableFormatNotFoundException -> "Couldn't find a playable audio format" - is UnplayableException -> "The original video source of this song has been deleted" - is LoginRequiredException -> "This song cannot be played due to server restrictions" - is VideoIdMismatchException -> "The returned video id doesn't match the requested one" - else -> "An unknown playback error has occurred" - } + if (currentWindow.mediaItem.isLocal) stringResource(R.string.error_local_music_deleted) else + when (error?.cause?.cause) { + is UnresolvedAddressException, is UnknownHostException -> + stringResource(R.string.error_network) + + is PlayableFormatNotFoundException -> stringResource(R.string.error_unplayable) + is UnplayableException -> stringResource(R.string.error_source_deleted) + is LoginRequiredException -> stringResource(R.string.error_server_restrictions) + is VideoIdMismatchException -> stringResource(R.string.error_id_mismatch) + else -> stringResource(R.string.error_unknown_playback) + } }, onDismiss = player::prepare ) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/player/WindowState.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/WindowState.kt new file mode 100644 index 0000000..077777e --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/player/WindowState.kt @@ -0,0 +1,39 @@ +package it.hamy.muza.ui.screens.player + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.common.Timeline +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.utils.DisposableListener +import it.hamy.muza.utils.currentWindow + +@Composable +fun currentWindow(): Pair { + val player = LocalPlayerServiceBinder.current?.player ?: return null to null + var window by remember { mutableStateOf(player.currentWindow) } + var error by remember { mutableStateOf(player.playerError) } + + player.DisposableListener { + object : Player.Listener { + override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { + window = player.currentWindow + } + + override fun onPlaybackStateChanged(playbackState: Int) { + error = player.playerError + } + + override fun onPlayerError(playbackException: PlaybackException) { + error = playbackException + } + } + } + + return window to error +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt index d9db75c..9589b45 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistScreen.kt @@ -1,38 +1,45 @@ package it.hamy.muza.ui.screens.playlist -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder +import androidx.compose.ui.res.stringResource import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.routing.RouteHandler import it.hamy.muza.R import it.hamy.muza.ui.components.themed.Scaffold -import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable -fun PlaylistScreen(browseId: String) { +fun PlaylistScreen( + browseId: String, + params: String?, + maxDepth: Int? = null +) { val saveableStateHolder = rememberSaveableStateHolder() - PersistMapCleanup(tagPrefix = "playlist/$browseId") + PersistMapCleanup(prefix = "playlist/$browseId") RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, tabIndex = 0, onTabChanged = { }, - tabColumnContent = { Item -> - Item(0, "Песни", R.drawable.musical_notes) + tabColumnContent = { item -> + item(0, stringResource(R.string.songs), R.drawable.musical_notes) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { when (currentTabIndex) { - 0 -> PlaylistSongList(browseId = browseId) + 0 -> PlaylistSongList( + browseId = browseId, + params = params, + maxDepth = maxDepth + ) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt index e055e2a..b682108 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/playlist/PlaylistSongList.kt @@ -1,7 +1,6 @@ package it.hamy.muza.ui.screens.playlist import android.content.Intent -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -24,6 +23,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import com.valentinilk.shimmer.shimmer import it.hamy.compose.persist.persist import it.hamy.innertube.Innertube @@ -45,6 +45,7 @@ import it.hamy.muza.ui.components.themed.HeaderIconButton import it.hamy.muza.ui.components.themed.HeaderPlaceholder import it.hamy.muza.ui.components.themed.LayoutWithAdaptiveThumbnail import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu +import it.hamy.muza.ui.components.themed.PlaylistInfo import it.hamy.muza.ui.components.themed.SecondaryTextButton import it.hamy.muza.ui.components.themed.TextFieldDialog import it.hamy.muza.ui.components.themed.adaptiveThumbnailContent @@ -52,21 +53,24 @@ import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px +import it.hamy.muza.utils.PlaylistDownloadIcon import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.completed import it.hamy.muza.utils.enqueue import it.hamy.muza.utils.forcePlayAtIndex import it.hamy.muza.utils.forcePlayFromBeginning import it.hamy.muza.utils.isLandscape +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun PlaylistSongList( browseId: String, + params: String?, + maxDepth: Int?, + modifier: Modifier = Modifier ) { val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -79,77 +83,74 @@ fun PlaylistSongList( if (playlistPage != null && playlistPage?.songsPage?.continuation == null) return@LaunchedEffect playlistPage = withContext(Dispatchers.IO) { - Innertube.playlistPage(BrowseBody(browseId = browseId))?.completed()?.getOrNull() + Innertube.playlistPage(BrowseBody(browseId = browseId, params = params)) + ?.completed(maxDepth = maxDepth ?: Int.MAX_VALUE)?.getOrNull() } } - val songThumbnailSizeDp = Dimensions.thumbnails.song - val songThumbnailSizePx = songThumbnailSizeDp.px + var isImportingPlaylist by rememberSaveable { mutableStateOf(false) } - var isImportingPlaylist by rememberSaveable { - mutableStateOf(false) - } + if (isImportingPlaylist) TextFieldDialog( + hintText = stringResource(R.string.enter_playlist_name_prompt), + initialTextInput = playlistPage?.title.orEmpty(), + onDismiss = { isImportingPlaylist = false }, + onDone = { text -> + query { + transaction { + val playlistId = Database.insert(Playlist(name = text, browseId = browseId)) - if (isImportingPlaylist) { - TextFieldDialog( - hintText = "Введите название плейлиста", - initialTextInput = playlistPage?.title ?: "", - onDismiss = { isImportingPlaylist = false }, - onDone = { text -> - query { - transaction { - val playlistId = Database.insert(Playlist(name = text, browseId = browseId)) - - playlistPage?.songsPage?.items - ?.map(Innertube.SongItem::asMediaItem) - ?.onEach(Database::insert) - ?.mapIndexed { index, mediaItem -> - SongPlaylistMap( - songId = mediaItem.mediaId, - playlistId = playlistId, - position = index - ) - }?.let(Database::insertSongPlaylistMaps) - } + playlistPage?.songsPage?.items + ?.map(Innertube.SongItem::asMediaItem) + ?.onEach(Database::insert) + ?.mapIndexed { index, mediaItem -> + SongPlaylistMap( + songId = mediaItem.mediaId, + playlistId = playlistId, + position = index + ) + }?.let(Database::insertSongPlaylistMaps) } } - ) - } + } + ) val headerContent: @Composable () -> Unit = { - if (playlistPage == null) { - HeaderPlaceholder( - modifier = Modifier - .shimmer() - ) - } else { - Header(title = playlistPage?.title ?: "Неизвестный") { - SecondaryTextButton( - text = "В очередь", - enabled = playlistPage?.songsPage?.items?.isNotEmpty() == true, - onClick = { - playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem)?.let { mediaItems -> + if (playlistPage == null) HeaderPlaceholder(modifier = Modifier.shimmer()) + else Header(title = playlistPage?.title ?: stringResource(R.string.unknown)) { + SecondaryTextButton( + text = stringResource(R.string.enqueue), + enabled = playlistPage?.songsPage?.items?.isNotEmpty() == true, + onClick = { + playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem) + ?.let { mediaItems -> binder?.player?.enqueue(mediaItems) } - } - ) + } + ) - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) - HeaderIconButton( - icon = R.drawable.add, - color = colorPalette.text, - onClick = { isImportingPlaylist = true } - ) + playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem) + ?.let { PlaylistDownloadIcon(songs = it.toImmutableList()) } - HeaderIconButton( - icon = R.drawable.share_social, - color = colorPalette.text, - onClick = { - (playlistPage?.url ?: "https://music.youtube.com/playlist?list=${browseId.removePrefix("VL")}").let { url -> + HeaderIconButton( + icon = R.drawable.add, + color = colorPalette.text, + onClick = { isImportingPlaylist = true } + ) + + HeaderIconButton( + icon = R.drawable.share_social, + color = colorPalette.text, + onClick = { + ( + playlistPage?.url + ?: "https://music.youtube.com/playlist?list=${ + browseId.removePrefix( + "VL" + ) + }" + ).let { url -> val sendIntent = Intent().apply { action = Intent.ACTION_SEND type = "text/plain" @@ -158,22 +159,28 @@ fun PlaylistSongList( context.startActivity(Intent.createChooser(sendIntent, null)) } - } - ) - } + } + ) } } - val thumbnailContent = adaptiveThumbnailContent(playlistPage == null, playlistPage?.thumbnail?.url) + val thumbnailContent = adaptiveThumbnailContent( + isLoading = playlistPage == null, + url = playlistPage?.thumbnail?.url + ) val lazyListState = rememberLazyListState() - LayoutWithAdaptiveThumbnail(thumbnailContent = thumbnailContent) { + LayoutWithAdaptiveThumbnail( + thumbnailContent = thumbnailContent, + modifier = modifier + ) { Box { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues(), modifier = Modifier .background(colorPalette.background0) .fillMaxSize() @@ -185,43 +192,39 @@ fun PlaylistSongList( Column(horizontalAlignment = Alignment.CenterHorizontally) { headerContent() if (!isLandscape) thumbnailContent() + PlaylistInfo(playlist = playlistPage) } } itemsIndexed(items = playlistPage?.songsPage?.items ?: emptyList()) { index, song -> SongItem( song = song, - thumbnailSizePx = songThumbnailSizePx, - thumbnailSizeDp = songThumbnailSizeDp, + thumbnailSize = Dimensions.thumbnails.song, modifier = Modifier .combinedClickable( onLongClick = { menuState.display { NonQueuedMediaItemMenu( onDismiss = menuState::hide, - mediaItem = song.asMediaItem, + mediaItem = song.asMediaItem ) } }, onClick = { - playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem)?.let { mediaItems -> - binder?.stopRadio() - binder?.player?.forcePlayAtIndex(mediaItems, index) - } + playlistPage?.songsPage?.items?.map(Innertube.SongItem::asMediaItem) + ?.let { mediaItems -> + binder?.stopRadio() + binder?.player?.forcePlayAtIndex(mediaItems, index) + } } ) ) } - if (playlistPage == null) { - item(key = "loading") { - ShimmerHost( - modifier = Modifier - .fillParentMaxSize() - ) { - repeat(4) { - SongItemPlaceholder(thumbnailSizeDp = songThumbnailSizeDp) - } + if (playlistPage == null) item(key = "loading") { + ShimmerHost(modifier = Modifier.fillParentMaxSize()) { + repeat(4) { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt index 3e9fe42..14daec1 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/LocalSongSearch.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.search -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box @@ -19,6 +18,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign @@ -27,6 +27,7 @@ import it.hamy.innertube.models.NavigationEndpoint import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R import it.hamy.muza.models.Song import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop @@ -36,19 +37,18 @@ import it.hamy.muza.ui.components.themed.SecondaryTextButton import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.styling.Dimensions import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.align import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.forcePlay import it.hamy.muza.utils.medium -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) @Composable fun LocalSongSearch( textFieldValue: TextFieldValue, onTextFieldValueChanged: (TextFieldValue) -> Unit, - decorationBox: @Composable (@Composable () -> Unit) -> Unit + decorationBox: @Composable (@Composable () -> Unit) -> Unit, + modifier: Modifier = Modifier ) { val (colorPalette, typography) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -57,23 +57,18 @@ fun LocalSongSearch( var items by persistList("search/local/songs") LaunchedEffect(textFieldValue.text) { - if (textFieldValue.text.length > 1) { + if (textFieldValue.text.length > 1) Database.search("%${textFieldValue.text}%").collect { items = it } - } } - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - val lazyListState = rememberLazyListState() - Box { + Box(modifier = modifier) { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - modifier = Modifier - .fillMaxSize() + modifier = Modifier.fillMaxSize() ) { item( key = "header", @@ -93,24 +88,19 @@ fun LocalSongSearch( ) }, actionsContent = { - if (textFieldValue.text.isNotEmpty()) { - SecondaryTextButton( - text = "Очистить", - onClick = { onTextFieldValueChanged(TextFieldValue()) } - ) - } + if (textFieldValue.text.isNotEmpty()) SecondaryTextButton( + text = stringResource(R.string.clear), + onClick = { onTextFieldValueChanged(TextFieldValue()) } + ) } ) } items( items = items, - key = Song::id, + key = Song::id ) { song -> SongItem( - song = song, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, modifier = Modifier .combinedClickable( onLongClick = { @@ -130,7 +120,9 @@ fun LocalSongSearch( ) } ) - .animateItemPlacement() + .animateItemPlacement(), + song = song, + thumbnailSize = Dimensions.thumbnails.song ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt index c26f477..4b14089 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/OnlineSearch.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.search -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource @@ -35,8 +34,8 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue @@ -52,6 +51,7 @@ import it.hamy.muza.Database import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.R import it.hamy.muza.models.SearchQuery +import it.hamy.muza.preferences.DataPreferences import it.hamy.muza.query import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.components.themed.Header @@ -60,43 +60,38 @@ import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.utils.align import it.hamy.muza.utils.center import it.hamy.muza.utils.medium -import it.hamy.muza.utils.pauseSearchHistoryKey -import it.hamy.muza.utils.preferences import it.hamy.muza.utils.secondary import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged -@ExperimentalAnimationApi @Composable fun OnlineSearch( textFieldValue: TextFieldValue, onTextFieldValueChanged: (TextFieldValue) -> Unit, onSearch: (String) -> Unit, onViewPlaylist: (String) -> Unit, - decorationBox: @Composable (@Composable () -> Unit) -> Unit + decorationBox: @Composable (@Composable () -> Unit) -> Unit, + modifier: Modifier = Modifier ) { - val context = LocalContext.current - val (colorPalette, typography) = LocalAppearance.current var history by persistList("search/online/history") LaunchedEffect(textFieldValue.text) { - if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) { - Database.queries("%${textFieldValue.text}%") - .distinctUntilChanged { old, new -> old.size == new.size } - .collect { history = it } - } + if (!DataPreferences.pauseSearchHistory) Database.queries("%${textFieldValue.text}%") + .distinctUntilChanged { old, new -> old.size == new.size } + .collect { history = it } } var suggestionsResult by persist?>?>("search/online/suggestionsResult") LaunchedEffect(textFieldValue.text) { - if (textFieldValue.text.isNotEmpty()) { - delay(200) - suggestionsResult = - Innertube.searchSuggestions(SearchSuggestionsBody(input = textFieldValue.text)) - } + if (textFieldValue.text.isEmpty()) return@LaunchedEffect + + delay(200) + suggestionsResult = Innertube.searchSuggestions( + body = SearchSuggestionsBody(input = textFieldValue.text) + ) } val playlistId = remember(textFieldValue.text) { @@ -115,19 +110,15 @@ fun OnlineSearch( val closeIconPainter = painterResource(R.drawable.close) val arrowForwardIconPainter = painterResource(R.drawable.arrow_forward) - val focusRequester = remember { - FocusRequester() - } - + val focusRequester = remember { FocusRequester() } val lazyListState = rememberLazyListState() - Box { + Box(modifier = modifier) { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - modifier = Modifier - .fillMaxSize() + modifier = Modifier.fillMaxSize() ) { item( key = "header", @@ -144,15 +135,13 @@ fun OnlineSearch( keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions( onSearch = { - if (textFieldValue.text.isNotEmpty()) { + if (textFieldValue.text.isNotEmpty()) onSearch(textFieldValue.text) - } } ), cursorBrush = SolidColor(colorPalette.text), decorationBox = decorationBox, - modifier = Modifier - .focusRequester(focusRequester) + modifier = Modifier.focusRequester(focusRequester) ) }, actionsContent = { @@ -160,22 +149,18 @@ fun OnlineSearch( val isAlbum = playlistId.startsWith("OLAK5uy_") SecondaryTextButton( - text = "Посмотреть ${if (isAlbum) "альбом" else "плейлист"}", + text = if (isAlbum) stringResource(R.string.view_album) + else stringResource(R.string.view_playlist), onClick = { onViewPlaylist(textFieldValue.text) } ) } - Spacer( - modifier = Modifier - .weight(1f) - ) + Spacer(modifier = Modifier.weight(1f)) - if (textFieldValue.text.isNotEmpty()) { - SecondaryTextButton( - text = "Очистить", - onClick = { onTextFieldValueChanged(TextFieldValue()) } - ) - } + if (textFieldValue.text.isNotEmpty()) SecondaryTextButton( + text = stringResource(R.string.clear), + onClick = { onTextFieldValueChanged(TextFieldValue()) } + ) } ) } @@ -299,15 +284,11 @@ fun OnlineSearch( } } ?: suggestionsResult?.exceptionOrNull()?.let { item { - Box( - modifier = Modifier - .fillMaxSize() - ) { + Box(modifier = Modifier.fillMaxSize()) { BasicText( - text = "An error has occurred.", + text = stringResource(R.string.error_message), style = typography.s.secondary.center, - modifier = Modifier - .align(Alignment.Center) + modifier = Modifier.align(Alignment.Center) ) } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt index cb0f86b..337b9e8 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/search/SearchScreen.kt @@ -1,31 +1,31 @@ package it.hamy.muza.ui.screens.search import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue import it.hamy.compose.persist.PersistMapCleanup import it.hamy.compose.routing.RouteHandler import it.hamy.muza.R import it.hamy.muza.ui.components.themed.Scaffold -import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.utils.secondary -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable fun SearchScreen( initialTextInput: String, @@ -34,9 +34,7 @@ fun SearchScreen( ) { val saveableStateHolder = rememberSaveableStateHolder() - val (tabIndex, onTabChanged) = rememberSaveable { - mutableStateOf(0) - } + val (tabIndex, onTabChanged) = rememberSaveable { mutableIntStateOf(0) } val (textFieldValue, onTextFieldValueChanged) = rememberSaveable( initialTextInput, @@ -50,23 +48,22 @@ fun SearchScreen( ) } - PersistMapCleanup(tagPrefix = "search/") + PersistMapCleanup(prefix = "search/") RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { val decorationBox: @Composable (@Composable () -> Unit) -> Unit = { innerTextField -> Box { AnimatedVisibility( visible = textFieldValue.text.isEmpty(), enter = fadeIn(tween(300)), exit = fadeOut(tween(300)), - modifier = Modifier - .align(Alignment.CenterEnd) + modifier = Modifier.align(Alignment.CenterEnd) ) { BasicText( - text = "Найти...", + text = stringResource(R.string.search_placeholder), maxLines = 1, style = LocalAppearance.current.typography.xxl.secondary ) @@ -81,9 +78,9 @@ fun SearchScreen( onTopIconButtonClick = pop, tabIndex = tabIndex, onTabChanged = onTabChanged, - tabColumnContent = { Item -> - Item(0, "Онлайн", R.drawable.globe) - Item(1, "Библиотека", R.drawable.library) + tabColumnContent = { item -> + item(0, stringResource(R.string.online), R.drawable.globe) + item(1, stringResource(R.string.library), R.drawable.library) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt index 896416c..2b01672 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/ItemsPage.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.searchresult -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues @@ -15,16 +14,19 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import it.hamy.compose.persist.persist import it.hamy.innertube.Innertube import it.hamy.innertube.utils.plus import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R import it.hamy.muza.ui.components.ShimmerHost import it.hamy.muza.ui.components.themed.FloatingActionsContainerWithScrollToTop import it.hamy.muza.ui.styling.LocalAppearance @@ -33,61 +35,83 @@ import it.hamy.muza.utils.secondary import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -@ExperimentalAnimationApi @Composable inline fun ItemsPage( tag: String, - crossinline headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, + crossinline header: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, crossinline itemContent: @Composable LazyItemScope.(T) -> Unit, noinline itemPlaceholderContent: @Composable () -> Unit, modifier: Modifier = Modifier, initialPlaceholderCount: Int = 8, continuationPlaceholderCount: Int = 3, - emptyItemsText: String = "Ничего не нашлось", - noinline itemsPageProvider: (suspend (String?) -> Result?>?)? = null, + emptyItemsText: String = stringResource(R.string.no_items_found), + noinline provider: (suspend (String?) -> Result?>?)? = null +) = ItemsPage( + tag = tag, + header = { before, _ -> header(before) }, + itemContent = itemContent, + itemPlaceholderContent = itemPlaceholderContent, + modifier = modifier, + initialPlaceholderCount = initialPlaceholderCount, + continuationPlaceholderCount = continuationPlaceholderCount, + emptyItemsText = emptyItemsText, + provider = provider +) + +@Composable +inline fun ItemsPage( + tag: String, + crossinline header: @Composable ( + beforeContent: (@Composable () -> Unit)?, + afterContent: (@Composable () -> Unit)? + ) -> Unit, + crossinline itemContent: @Composable LazyItemScope.(T) -> Unit, + noinline itemPlaceholderContent: @Composable () -> Unit, + modifier: Modifier = Modifier, + initialPlaceholderCount: Int = 8, + continuationPlaceholderCount: Int = 3, + emptyItemsText: String = stringResource(R.string.no_items_found), + noinline provider: (suspend (String?) -> Result?>?)? = null ) { val (_, typography) = LocalAppearance.current - - val updatedItemsPageProvider by rememberUpdatedState(itemsPageProvider) - + val updatedProvider by rememberUpdatedState(provider) val lazyListState = rememberLazyListState() - var itemsPage by persist?>(tag) - LaunchedEffect(lazyListState, updatedItemsPageProvider) { - val currentItemsPageProvider = updatedItemsPageProvider ?: return@LaunchedEffect - - snapshotFlow { lazyListState.layoutInfo.visibleItemsInfo.any { it.key == "loading" } } - .collect { shouldLoadMore -> - if (!shouldLoadMore) return@collect - - withContext(Dispatchers.IO) { - currentItemsPageProvider(itemsPage?.continuation) - }?.onSuccess { - if (it == null) { - if (itemsPage == null) { - itemsPage = Innertube.ItemsPage(null, null) - } - } else { - itemsPage += it - } - } - } + val shouldLoad by remember { + derivedStateOf { + lazyListState.layoutInfo.visibleItemsInfo.any { it.key == "loading" } + } } - Box { + LaunchedEffect(shouldLoad, updatedProvider) { + if (!shouldLoad) return@LaunchedEffect + val provideItems = updatedProvider ?: return@LaunchedEffect + + withContext(Dispatchers.IO) { + provideItems(itemsPage?.continuation) + }?.onSuccess { + if (it == null) { + if (itemsPage == null) itemsPage = Innertube.ItemsPage(null, null) + } else itemsPage += it + }?.onFailure { + itemsPage = itemsPage?.copy(continuation = null) + }?.exceptionOrNull()?.printStackTrace() + } + + Box(modifier = modifier) { LazyColumn( state = lazyListState, contentPadding = LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End).asPaddingValues(), - modifier = modifier - .fillMaxSize() + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues(), + modifier = Modifier.fillMaxSize() ) { item( key = "header", - contentType = "header", + contentType = "header" ) { - headerContent(null) + header(null, null) } items( @@ -96,30 +120,24 @@ inline fun ItemsPage( itemContent = itemContent ) - if (itemsPage != null && itemsPage?.items.isNullOrEmpty()) { - item(key = "empty") { - BasicText( - text = emptyItemsText, - style = typography.xs.secondary.center, - modifier = Modifier - .padding(horizontal = 16.dp, vertical = 32.dp) - .fillMaxWidth() - ) - } + if (itemsPage != null && itemsPage?.items.isNullOrEmpty()) item(key = "empty") { + BasicText( + text = emptyItemsText, + style = typography.xs.secondary.center, + modifier = Modifier + .padding(horizontal = 16.dp, vertical = 32.dp) + .fillMaxWidth() + ) } - if (!(itemsPage != null && itemsPage?.continuation == null)) { - item(key = "loading") { - val isFirstLoad = itemsPage?.items.isNullOrEmpty() - ShimmerHost( - modifier = Modifier - .run { - if (isFirstLoad) fillParentMaxSize() else this - } - ) { - repeat(if (isFirstLoad) initialPlaceholderCount else continuationPlaceholderCount) { - itemPlaceholderContent() - } + if (!(itemsPage != null && itemsPage?.continuation == null)) item(key = "loading") { + val isFirstLoad = itemsPage?.items.isNullOrEmpty() + + ShimmerHost( + modifier = if (isFirstLoad) Modifier.fillParentMaxSize() else Modifier + ) { + repeat(if (isFirstLoad) initialPlaceholderCount else continuationPlaceholderCount) { + itemPlaceholderContent() } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt index 7a14e87..cd18a3a 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/searchresult/SearchResultScreen.kt @@ -1,6 +1,5 @@ package it.hamy.muza.ui.screens.searchresult -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable @@ -9,18 +8,19 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import it.hamy.compose.persist.LocalPersistMap import it.hamy.compose.persist.PersistMapCleanup -import it.hamy.compose.persist.persistMap +import it.hamy.compose.routing.RouteHandler import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.models.bodies.SearchBody import it.hamy.innertube.requests.searchPage import it.hamy.innertube.utils.from -import it.hamy.compose.routing.RouteHandler import it.hamy.muza.LocalPlayerServiceBinder import it.hamy.muza.R +import it.hamy.muza.preferences.UIStatePreferences import it.hamy.muza.ui.components.LocalMenuState import it.hamy.muza.ui.components.themed.Header import it.hamy.muza.ui.components.themed.NonQueuedMediaItemMenu @@ -35,285 +35,240 @@ import it.hamy.muza.ui.items.SongItem import it.hamy.muza.ui.items.SongItemPlaceholder import it.hamy.muza.ui.items.VideoItem import it.hamy.muza.ui.items.VideoItemPlaceholder +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.screens.albumRoute import it.hamy.muza.ui.screens.artistRoute -import it.hamy.muza.ui.screens.globalRoutes import it.hamy.muza.ui.screens.playlistRoute import it.hamy.muza.ui.styling.Dimensions -import it.hamy.muza.ui.styling.px import it.hamy.muza.utils.asMediaItem import it.hamy.muza.utils.forcePlay -import it.hamy.muza.utils.rememberPreference -import it.hamy.muza.utils.searchResultScreenTabIndexKey -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@OptIn(ExperimentalFoundationApi::class) +@Route @Composable fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) { - val context = LocalContext.current - val saveableStateHolder = rememberSaveableStateHolder() - val (tabIndex, onTabIndexChanges) = rememberPreference(searchResultScreenTabIndexKey, 0) + val persistMap = LocalPersistMap.current + val binder = LocalPlayerServiceBinder.current + val menuState = LocalMenuState.current - PersistMapCleanup(tagPrefix = "searchResults/$query/") + val saveableStateHolder = rememberSaveableStateHolder() + + PersistMapCleanup(prefix = "searchResults/$query/") RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { val headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit = { Header( title = query, - modifier = Modifier - .pointerInput(Unit) { - detectTapGestures { - context.persistMap?.keys?.removeAll { - it.startsWith("searchResults/$query/") - } - onSearchAgain() - } + modifier = Modifier.pointerInput(Unit) { + detectTapGestures { + persistMap?.clean("searchResults/$query/") + onSearchAgain() } + } ) } - val emptyItemsText = "Ничего не нашлось" - Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, - tabIndex = tabIndex, - onTabChanged = onTabIndexChanges, - tabColumnContent = { Item -> - Item(0, "Песни", R.drawable.musical_notes) - Item(1, "Альбомы", R.drawable.disc) - Item(2, "Исполнители", R.drawable.person) - Item(3, "Видео", R.drawable.film) - Item(4, "Плейлисты", R.drawable.playlist) - Item(5, "Рекомендации", R.drawable.playlist) + tabIndex = UIStatePreferences.searchResultScreenTabIndex, + onTabChanged = { UIStatePreferences.searchResultScreenTabIndex = it }, + tabColumnContent = { item -> + item(0, stringResource(R.string.songs), R.drawable.musical_notes) + item(1, stringResource(R.string.albums), R.drawable.disc) + item(2, stringResource(R.string.artists), R.drawable.person) + item(3, stringResource(R.string.videos), R.drawable.film) + item(4, stringResource(R.string.playlists), R.drawable.playlist) } ) { tabIndex -> saveableStateHolder.SaveableStateProvider(tabIndex) { when (tabIndex) { - 0 -> { - val binder = LocalPlayerServiceBinder.current - val menuState = LocalMenuState.current - val thumbnailSizeDp = Dimensions.thumbnails.song - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "searchResults/$query/songs", - itemsPageProvider = { continuation -> - if (continuation == null) { - Innertube.searchPage( - body = SearchBody(query = query, params = Innertube.SearchFilter.Song.value), - fromMusicShelfRendererContent = Innertube.SongItem.Companion::from - ) - } else { - Innertube.searchPage( - body = ContinuationBody(continuation = continuation), - fromMusicShelfRendererContent = Innertube.SongItem.Companion::from - ) - } - }, - emptyItemsText = emptyItemsText, - headerContent = headerContent, - itemContent = { song -> - SongItem( - song = song, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - NonQueuedMediaItemMenu( - onDismiss = menuState::hide, - mediaItem = song.asMediaItem, - ) - } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlay(song.asMediaItem) - binder?.setupRadio(song.info?.endpoint) - } - ) - ) - }, - itemPlaceholderContent = { - SongItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) - } - ) - } - - 1 -> { - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "searchResults/$query/albums", - itemsPageProvider = { continuation -> - if (continuation == null) { - Innertube.searchPage( - body = SearchBody(query = query, params = Innertube.SearchFilter.Album.value), - fromMusicShelfRendererContent = Innertube.AlbumItem::from - ) - } else { - Innertube.searchPage( - body = ContinuationBody(continuation = continuation), - fromMusicShelfRendererContent = Innertube.AlbumItem::from - ) - } - }, - emptyItemsText = emptyItemsText, - headerContent = headerContent, - itemContent = { album -> - AlbumItem( - album = album, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable(onClick = { albumRoute(album.key) }) - ) - - }, - itemPlaceholderContent = { - AlbumItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) - } - ) - } - - 2 -> { - val thumbnailSizeDp = 64.dp - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "searchResults/$query/artists", - itemsPageProvider = { continuation -> - if (continuation == null) { - Innertube.searchPage( - body = SearchBody(query = query, params = Innertube.SearchFilter.Artist.value), - fromMusicShelfRendererContent = Innertube.ArtistItem::from - ) - } else { - Innertube.searchPage( - body = ContinuationBody(continuation = continuation), - fromMusicShelfRendererContent = Innertube.ArtistItem::from - ) - } - }, - emptyItemsText = emptyItemsText, - headerContent = headerContent, - itemContent = { artist -> - ArtistItem( - artist = artist, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable(onClick = { artistRoute(artist.key) }) - ) - }, - itemPlaceholderContent = { - ArtistItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) - } - ) - } - - 3 -> { - val binder = LocalPlayerServiceBinder.current - val menuState = LocalMenuState.current - val thumbnailHeightDp = 72.dp - val thumbnailWidthDp = 128.dp - - ItemsPage( - tag = "searchResults/$query/videos", - itemsPageProvider = { continuation -> - if (continuation == null) { - Innertube.searchPage( - body = SearchBody(query = query, params = Innertube.SearchFilter.Video.value), - fromMusicShelfRendererContent = Innertube.VideoItem::from - ) - } else { - Innertube.searchPage( - body = ContinuationBody(continuation = continuation), - fromMusicShelfRendererContent = Innertube.VideoItem::from - ) - } - }, - emptyItemsText = emptyItemsText, - headerContent = headerContent, - itemContent = { video -> - VideoItem( - video = video, - thumbnailWidthDp = thumbnailWidthDp, - thumbnailHeightDp = thumbnailHeightDp, - modifier = Modifier - .combinedClickable( - onLongClick = { - menuState.display { - NonQueuedMediaItemMenu( - mediaItem = video.asMediaItem, - onDismiss = menuState::hide - ) - } - }, - onClick = { - binder?.stopRadio() - binder?.player?.forcePlay(video.asMediaItem) - binder?.setupRadio(video.info?.endpoint) - } - ) - ) - }, - itemPlaceholderContent = { - VideoItemPlaceholder( - thumbnailHeightDp = thumbnailHeightDp, - thumbnailWidthDp = thumbnailWidthDp - ) - } - ) - } - - 4, 5 -> { - val thumbnailSizeDp = 108.dp - val thumbnailSizePx = thumbnailSizeDp.px - - ItemsPage( - tag = "searchResults/$query/${if (tabIndex == 4) "playlists" else "featured"}", - itemsPageProvider = { continuation -> - if (continuation == null) { - val filter = if (tabIndex == 4) { - Innertube.SearchFilter.CommunityPlaylist - } else { - Innertube.SearchFilter.FeaturedPlaylist + 0 -> ItemsPage( + tag = "searchResults/$query/songs", + provider = { continuation -> + if (continuation == null) Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.Song.value + ), + fromMusicShelfRendererContent = Innertube.SongItem.Companion::from + ) else Innertube.searchPage( + body = ContinuationBody(continuation = continuation), + fromMusicShelfRendererContent = Innertube.SongItem.Companion::from + ) + }, + emptyItemsText = stringResource(R.string.no_search_results), + header = headerContent, + itemContent = { song -> + SongItem( + song = song, + thumbnailSize = Dimensions.thumbnails.song, + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + onDismiss = menuState::hide, + mediaItem = song.asMediaItem + ) + } + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlay(song.asMediaItem) + binder?.setupRadio(song.info?.endpoint) } - - Innertube.searchPage( - body = SearchBody(query = query, params = filter.value), - fromMusicShelfRendererContent = Innertube.PlaylistItem::from - ) - } else { - Innertube.searchPage( - body = ContinuationBody(continuation = continuation), - fromMusicShelfRendererContent = Innertube.PlaylistItem::from - ) - } - }, - emptyItemsText = emptyItemsText, - headerContent = headerContent, - itemContent = { playlist -> - PlaylistItem( - playlist = playlist, - thumbnailSizePx = thumbnailSizePx, - thumbnailSizeDp = thumbnailSizeDp, - modifier = Modifier - .clickable(onClick = { playlistRoute(playlist.key) }) ) - }, - itemPlaceholderContent = { - PlaylistItemPlaceholder(thumbnailSizeDp = thumbnailSizeDp) + ) + }, + itemPlaceholderContent = { + SongItemPlaceholder(thumbnailSize = Dimensions.thumbnails.song) + } + ) + + 1 -> ItemsPage( + tag = "searchResults/$query/albums", + provider = { continuation -> + if (continuation == null) { + Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.Album.value + ), + fromMusicShelfRendererContent = Innertube.AlbumItem::from + ) + } else { + Innertube.searchPage( + body = ContinuationBody(continuation = continuation), + fromMusicShelfRendererContent = Innertube.AlbumItem::from + ) } - ) - } + }, + emptyItemsText = stringResource(R.string.no_search_results), + header = headerContent, + itemContent = { album -> + AlbumItem( + album = album, + thumbnailSize = Dimensions.thumbnails.album, + modifier = Modifier.clickable(onClick = { albumRoute(album.key) }) + ) + }, + itemPlaceholderContent = { + AlbumItemPlaceholder(thumbnailSize = Dimensions.thumbnails.album) + } + ) + + 2 -> ItemsPage( + tag = "searchResults/$query/artists", + provider = { continuation -> + if (continuation == null) { + Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.Artist.value + ), + fromMusicShelfRendererContent = Innertube.ArtistItem::from + ) + } else { + Innertube.searchPage( + body = ContinuationBody(continuation = continuation), + fromMusicShelfRendererContent = Innertube.ArtistItem::from + ) + } + }, + emptyItemsText = stringResource(R.string.no_search_results), + header = headerContent, + itemContent = { artist -> + ArtistItem( + artist = artist, + thumbnailSize = 64.dp, + modifier = Modifier + .clickable(onClick = { artistRoute(artist.key) }) + ) + }, + itemPlaceholderContent = { + ArtistItemPlaceholder(thumbnailSize = 64.dp) + } + ) + + 3 -> ItemsPage( + tag = "searchResults/$query/videos", + provider = { continuation -> + if (continuation == null) Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.Video.value + ), + fromMusicShelfRendererContent = Innertube.VideoItem::from + ) else Innertube.searchPage( + body = ContinuationBody(continuation = continuation), + fromMusicShelfRendererContent = Innertube.VideoItem::from + ) + }, + emptyItemsText = stringResource(R.string.no_search_results), + header = headerContent, + itemContent = { video -> + VideoItem( + video = video, + thumbnailWidth = 128.dp, + thumbnailHeight = 72.dp, + modifier = Modifier.combinedClickable( + onLongClick = { + menuState.display { + NonQueuedMediaItemMenu( + mediaItem = video.asMediaItem, + onDismiss = menuState::hide + ) + } + }, + onClick = { + binder?.stopRadio() + binder?.player?.forcePlay(video.asMediaItem) + binder?.setupRadio(video.info?.endpoint) + } + ) + ) + }, + itemPlaceholderContent = { + VideoItemPlaceholder( + thumbnailWidth = 128.dp, + thumbnailHeight = 72.dp + ) + } + ) + + 4 -> ItemsPage( + tag = "searchResults/$query/playlists", + provider = { continuation -> + if (continuation == null) Innertube.searchPage( + body = SearchBody( + query = query, + params = Innertube.SearchFilter.CommunityPlaylist.value + ), + fromMusicShelfRendererContent = Innertube.PlaylistItem::from + ) else Innertube.searchPage( + body = ContinuationBody(continuation = continuation), + fromMusicShelfRendererContent = Innertube.PlaylistItem::from + ) + }, + emptyItemsText = stringResource(R.string.no_search_results), + header = headerContent, + itemContent = { playlist -> + PlaylistItem( + playlist = playlist, + thumbnailSize = Dimensions.thumbnails.playlist, + modifier = Modifier.clickable(onClick = { + playlistRoute(playlist.key) + }) + ) + }, + itemPlaceholderContent = { + PlaylistItemPlaceholder(thumbnailSize = Dimensions.thumbnails.playlist) + } + ) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt index 077f674..53921da 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/About.kt @@ -1,77 +1,158 @@ package it.hamy.muza.ui.screens.settings -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.BasicText -import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import it.hamy.github.GitHub +import it.hamy.github.models.Release +import it.hamy.github.requests.releases import it.hamy.muza.BuildConfig -import it.hamy.muza.LocalPlayerAwareWindowInsets -import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.CircularProgressIndicator +import it.hamy.muza.ui.components.themed.DefaultDialog +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.utils.secondary +import it.hamy.muza.utils.bold +import it.hamy.muza.utils.center +import it.hamy.muza.utils.semiBold +import it.hamy.muza.utils.version +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext -@ExperimentalAnimationApi +private val VERSION_NAME = BuildConfig.VERSION_NAME.substringBeforeLast("-") +private const val REPO_OWNER = "hammsterr" +private const val REPO_NAME = "muza" + +@Route @Composable -fun About() { - val (colorPalette, typography) = LocalAppearance.current +fun About() = SettingsCategoryScreen( + title = stringResource(R.string.about), + description = stringResource( + R.string.format_version_credits, + VERSION_NAME + ) +) { + val (_, typography) = LocalAppearance.current + val uriHandler = LocalUriHandler.current - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() - ) - ) { - Header(title = "Информация") { - BasicText( - text = "v${BuildConfig.VERSION_NAME} by Hamy", - style = typography.s.secondary - ) - } - - SettingsEntryGroupText(title = "СОЦИАЛЬНОЕ") - + SettingsGroup(title = stringResource(R.string.social)) { SettingsEntry( - title = "GitHub", - text = "Посмотреть исходный код", + title = stringResource(R.string.github), + text = stringResource(R.string.view_source), onClick = { - uriHandler.openUri("https://github.com/hammsterr/muza") - } - ) - - SettingsEntry( - title = "Новости", - text = "Следите за новостями в группе ВКонтакте", - onClick = { - uriHandler.openUri("https://vk.com/hamyack") - } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ДИАГНОСТИКА") - - SettingsEntry( - title = "Тех. поддержка", - text = "Сообщайте об ошибках или пожеланиях", - onClick = { - uriHandler.openUri("https://hamyack.pages.dev") + uriHandler.openUri("https://github.com/$REPO_OWNER/$REPO_NAME") } ) } + + SettingsGroup(title = stringResource(R.string.contact)) { + SettingsEntry( + title = stringResource(R.string.report_bug), + text = stringResource(R.string.report_bug_description), + onClick = { + uriHandler.openUri( + "https://github.com/$REPO_OWNER/$REPO_NAME/issues/new?assignees=&labels=bug&template=bug_report.yaml" + ) + } + ) + + SettingsEntry( + title = stringResource(R.string.request_feature), + text = stringResource(R.string.request_feature_description), + onClick = { + uriHandler.openUri( + @Suppress("MaximumLineLength") + "https://github.com/hammsterr/muza/issues/" + ) + } + ) + } + + var newVersionDialogOpened by rememberSaveable { mutableStateOf(false) } + + SettingsGroup(title = stringResource(R.string.version)) { + SettingsEntry( + title = stringResource(R.string.check_new_version), + text = stringResource(R.string.current_version, VERSION_NAME), + onClick = { newVersionDialogOpened = true } + ) + } + + if (newVersionDialogOpened) DefaultDialog(onDismiss = { newVersionDialogOpened = false }) { + var newVersion: Result? by remember { mutableStateOf(null) } + + LaunchedEffect(Unit) { + withContext(Dispatchers.IO) { + newVersion = GitHub.releases( + owner = REPO_OWNER, + repo = REPO_NAME + )?.mapCatching { releases -> + val currentVersion = VERSION_NAME.version + + releases + .sortedByDescending { it.publishedAt } + .firstOrNull { release -> + !release.draft && + !release.preRelease && + release.tag.removePrefix("v").version > currentVersion && + release.assets.any { + it.contentType == "application/vnd.android.package-archive" && + it.state == Release.Asset.State.Uploaded + } + } + }?.onFailure(Throwable::printStackTrace) + } + } + + newVersion?.getOrNull()?.let { + BasicText( + text = stringResource(R.string.new_version_available), + style = typography.xs.semiBold.center + ) + + Spacer(modifier = Modifier.height(12.dp)) + + BasicText( + text = it.name ?: it.tag, + style = typography.m.bold.center + ) + + Spacer(modifier = Modifier.height(16.dp)) + + SecondaryTextButton( + text = stringResource(R.string.rustore), + onClick = { uriHandler.openUri("https://apps.rustore.ru/app/it.hamy.muza") } + ) + Spacer(modifier = Modifier.height(16.dp)) + + SecondaryTextButton( + text = stringResource(R.string.github), + onClick = { it.frontendUrl.toString() } + ) + } ?: newVersion?.exceptionOrNull()?.let { + BasicText( + text = stringResource(R.string.error_github), + style = typography.xs.semiBold.center, + modifier = Modifier.padding(all = 24.dp) + ) + } ?: if (newVersion?.isSuccess == true) BasicText( + text = stringResource(R.string.up_to_date), + style = typography.xs.semiBold.center + ) else CircularProgressIndicator(modifier = Modifier.align(Alignment.CenterHorizontally)) + } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt index 8095698..afc8c0f 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/AppearanceSettings.kt @@ -1,147 +1,191 @@ package it.hamy.muza.ui.screens.settings -import android.app.AlertDialog -import android.content.ComponentName -import android.content.pm.PackageManager -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.core.content.ContextCompat -import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R import it.hamy.muza.enums.ColorPaletteMode import it.hamy.muza.enums.ColorPaletteName import it.hamy.muza.enums.ThumbnailRoundness -import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.preferences.AppearancePreferences +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.utils.applyFontPaddingKey -import it.hamy.muza.utils.colorPaletteModeKey -import it.hamy.muza.utils.colorPaletteNameKey import it.hamy.muza.utils.isAtLeastAndroid13 -import it.hamy.muza.utils.isShowingThumbnailInLockscreenKey -import it.hamy.muza.utils.rememberPreference -import it.hamy.muza.utils.thumbnailRoundnessKey -import it.hamy.muza.utils.useSystemFontKey -import it.hamy.muza.* - -@ExperimentalAnimationApi +@Route @Composable -fun AppearanceSettings() { +fun AppearanceSettings() = with(AppearancePreferences) { val (colorPalette) = LocalAppearance.current - var colorPaletteName by rememberPreference(colorPaletteNameKey, ColorPaletteName.Dynamic) - var colorPaletteMode by rememberPreference(colorPaletteModeKey, ColorPaletteMode.System) - var thumbnailRoundness by rememberPreference( - thumbnailRoundnessKey, - ThumbnailRoundness.Слабое - ) - var useSystemFont by rememberPreference(useSystemFontKey, false) - var applyFontPadding by rememberPreference(applyFontPaddingKey, false) - var isShowingThumbnailInLockscreen by rememberPreference( - isShowingThumbnailInLockscreenKey, - false - - ) - - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() + SettingsCategoryScreen(title = stringResource(R.string.appearance)) { + SettingsGroup(title = stringResource(R.string.colors)) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.theme), + selectedValue = colorPaletteName, + onValueSelected = { colorPaletteName = it }, + valueText = { it.nameLocalized } ) - ) { - Header(title = "Внешний Вид") - SettingsEntryGroupText(title = "ЦВЕТА") + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.theme_mode), + selectedValue = colorPaletteMode, + isEnabled = colorPaletteName != ColorPaletteName.PureBlack && + colorPaletteName != ColorPaletteName.AMOLED, + onValueSelected = { colorPaletteMode = it }, + valueText = { it.nameLocalized } + ) + } + SettingsGroup(title = stringResource(R.string.shapes)) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.thumbnail_roundness), + selectedValue = thumbnailRoundness, + onValueSelected = { thumbnailRoundness = it }, + trailingContent = { + Spacer( + modifier = Modifier + .border( + width = 1.dp, + color = colorPalette.accent, + shape = thumbnailRoundness.shape + ) + .background( + color = colorPalette.background1, + shape = thumbnailRoundness.shape + ) + .size(36.dp) + ) + }, + valueText = { it.nameLocalized } + ) + } + SettingsGroup(title = stringResource(R.string.text)) { + SwitchSettingsEntry( + title = stringResource(R.string.use_system_font), + text = stringResource(R.string.use_system_font_description), + isChecked = useSystemFont, + onCheckedChange = { useSystemFont = it } + ) - EnumValueSelectorSettingsEntry( - title = "Цвет темы", - selectedValue = colorPaletteName, - onValueSelected = { colorPaletteName = it } - ) - - EnumValueSelectorSettingsEntry( - title = "Ночная тема", - selectedValue = colorPaletteMode, - isEnabled = colorPaletteName != ColorPaletteName.PureBlack, - onValueSelected = { colorPaletteMode = it } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ФОРМЫ") - - EnumValueSelectorSettingsEntry( - title = "Скругление", - selectedValue = thumbnailRoundness, - onValueSelected = { thumbnailRoundness = it }, - trailingContent = { - Spacer( - modifier = Modifier - .border( - width = 1.dp, - color = colorPalette.accent, - shape = thumbnailRoundness.shape() - ) - .background( - color = colorPalette.background1, - shape = thumbnailRoundness.shape() - ) - .size(36.dp) - ) - } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ТЕКСТ") - - SwitchSettingEntry( - title = "Системный шрифт", - text = "Использовать системный шрифт", - isChecked = useSystemFont, - onCheckedChange = { useSystemFont = it } - ) - - SwitchSettingEntry( - title = "Заполнение шрифта", - text = "Увеличить пробелы текста", - isChecked = applyFontPadding, - onCheckedChange = { applyFontPadding = it } - ) - - if (!isAtLeastAndroid13) { - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ЭКРАН БЛОКИРОВКИ") - - SwitchSettingEntry( - title = "Показывать обложку", - text = "Использовать обложку в качестве обоев экрана блокировки", + SwitchSettingsEntry( + title = stringResource(R.string.apply_font_padding), + text = stringResource(R.string.apply_font_padding_description), + isChecked = applyFontPadding, + onCheckedChange = { applyFontPadding = it } + ) + } + if (!isAtLeastAndroid13) SettingsGroup(title = stringResource(R.string.lockscreen)) { + SwitchSettingsEntry( + title = stringResource(R.string.show_song_cover), + text = stringResource(R.string.show_song_cover_description), isChecked = isShowingThumbnailInLockscreen, onCheckedChange = { isShowingThumbnailInLockscreen = it } ) } + SettingsGroup(title = stringResource(R.string.player)) { + SwitchSettingsEntry( + title = stringResource(R.string.previous_button_while_collapsed), + text = stringResource(R.string.previous_button_while_collapsed_description), + isChecked = PlayerPreferences.isShowingPrevButtonCollapsed, + onCheckedChange = { PlayerPreferences.isShowingPrevButtonCollapsed = it } + ) + + SwitchSettingsEntry( + title = stringResource(R.string.swipe_horizontally_to_close), + text = stringResource(R.string.swipe_horizontally_to_close_description), + isChecked = PlayerPreferences.horizontalSwipeToClose, + onCheckedChange = { PlayerPreferences.horizontalSwipeToClose = it } + ) + + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.player_layout), + selectedValue = PlayerPreferences.playerLayout, + onValueSelected = { PlayerPreferences.playerLayout = it }, + valueText = { it.displayName() } + ) + + AnimatedVisibility( + visible = PlayerPreferences.playerLayout == PlayerPreferences.PlayerLayout.New, + label = "" + ) { + SwitchSettingsEntry( + title = stringResource(R.string.show_like_button), + text = stringResource(R.string.show_like_button_description), + isChecked = PlayerPreferences.showLike, + onCheckedChange = { PlayerPreferences.showLike = it } + ) + } + + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.seek_bar_style), + selectedValue = PlayerPreferences.seekBarStyle, + onValueSelected = { PlayerPreferences.seekBarStyle = it }, + valueText = { it.displayName() } + ) + + AnimatedVisibility( + visible = PlayerPreferences.seekBarStyle == PlayerPreferences.SeekBarStyle.Wavy, + label = "" + ) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.seek_bar_quality), + selectedValue = PlayerPreferences.wavySeekBarQuality, + onValueSelected = { PlayerPreferences.wavySeekBarQuality = it }, + valueText = { it.displayName() } + ) + } + + SwitchSettingsEntry( + title = stringResource(R.string.swipe_to_remove_item), + text = stringResource(R.string.swipe_to_remove_item_description), + isChecked = PlayerPreferences.horizontalSwipeToRemoveItem, + onCheckedChange = { PlayerPreferences.horizontalSwipeToRemoveItem = it } + ) + } + SettingsGroup(title = stringResource(R.string.songs)) { + SwitchSettingsEntry( + title = stringResource(R.string.swipe_to_hide_song), + text = stringResource(R.string.swipe_to_hide_song_description), + isChecked = swipeToHideSong, + onCheckedChange = { swipeToHideSong = it } + ) + } } } +val ColorPaletteName.nameLocalized + @Composable get() = stringResource( + when (this) { + ColorPaletteName.Default -> R.string.theme_name_default + ColorPaletteName.Dynamic -> R.string.theme_name_dynamic + ColorPaletteName.PureBlack -> R.string.theme_name_pureblack + ColorPaletteName.AMOLED -> R.string.theme_name_amoled + } + ) +val ColorPaletteMode.nameLocalized + @Composable get() = stringResource( + when (this) { + ColorPaletteMode.Light -> R.string.theme_mode_light + ColorPaletteMode.Dark -> R.string.theme_mode_dark + ColorPaletteMode.System -> R.string.theme_mode_system + } + ) + +val ThumbnailRoundness.nameLocalized + @Composable get() = stringResource( + when (this) { + ThumbnailRoundness.None -> R.string.thumbnail_roundness_none + ThumbnailRoundness.Light -> R.string.thumbnail_roundness_light + ThumbnailRoundness.Medium -> R.string.thumbnail_roundness_medium + ThumbnailRoundness.Heavy -> R.string.thumbnail_roundness_heavy + ThumbnailRoundness.Heavier -> R.string.thumbnail_roundness_heavier + ThumbnailRoundness.Heaviest -> R.string.thumbnail_roundness_heaviest + } + ) diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt index 4b950e8..8c78273 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/CacheSettings.kt @@ -1,119 +1,71 @@ package it.hamy.muza.ui.screens.settings import android.text.format.Formatter -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll +import androidx.annotation.OptIn import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.media3.common.util.UnstableApi import coil.Coil import coil.annotation.ExperimentalCoilApi -import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.LocalPlayerServiceBinder -import it.hamy.muza.enums.CoilDiskCacheMaxSize -import it.hamy.muza.enums.ExoPlayerDiskCacheMaxSize -import it.hamy.muza.ui.components.themed.Header -import it.hamy.muza.ui.styling.LocalAppearance -import it.hamy.muza.utils.coilDiskCacheMaxSizeKey -import it.hamy.muza.utils.exoPlayerDiskCacheMaxSizeKey -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.R +import it.hamy.muza.enums.ExoPlayerDiskCacheSize +import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.ui.screens.Route -@OptIn(ExperimentalCoilApi::class) -@ExperimentalAnimationApi +@kotlin.OptIn(ExperimentalCoilApi::class) +@OptIn(UnstableApi::class) +@Route @Composable -fun CacheSettings() { +fun CacheSettings() = with(DataPreferences) { val context = LocalContext.current - val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current - var coilDiskCacheMaxSize by rememberPreference( - coilDiskCacheMaxSizeKey, - CoilDiskCacheMaxSize.`128MB` - ) - var exoPlayerDiskCacheMaxSize by rememberPreference( - exoPlayerDiskCacheMaxSizeKey, - ExoPlayerDiskCacheMaxSize.`2GB` - ) - - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() - ) - ) { - Header(title = "Кэш") - - SettingsDescription(text = "Когда в кэше заканчивается свободное место, очищаются ресурсы, которые давно не используются.") + SettingsCategoryScreen(title = stringResource(R.string.cache)) { + SettingsDescription(text = stringResource(R.string.cache_description)) Coil.imageLoader(context).diskCache?.let { diskCache -> - val diskCacheSize = remember(diskCache) { - diskCache.size + val diskCacheSize = remember(diskCache) { diskCache.size } + + SettingsGroup( + title = stringResource(R.string.image_cache), + description = stringResource( + R.string.format_cache_space_used, + Formatter.formatShortFileSize(context, diskCacheSize), + diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1) + ) + ) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.max_size), + selectedValue = coilDiskCacheMaxSize, + onValueSelected = { coilDiskCacheMaxSize = it } + ) } - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "КЭШ КАРТИНОК") - - SettingsDescription( - text = "${ - Formatter.formatShortFileSize( - context, - diskCacheSize - ) - } использовано (${diskCacheSize * 100 / coilDiskCacheMaxSize.bytes.coerceAtLeast(1)}%)" - ) - - EnumValueSelectorSettingsEntry( - title = "Максимальный размер", - selectedValue = coilDiskCacheMaxSize, - onValueSelected = { coilDiskCacheMaxSize = it } - ) } - binder?.cache?.let { cache -> - val diskCacheSize by remember { - derivedStateOf { - cache.cacheSpace - } - } + val diskCacheSize by remember { derivedStateOf { cache.cacheSpace } } - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "КЭШ ПЕСЕН") - - SettingsDescription( - text = buildString { + SettingsGroup( + title = stringResource(R.string.song_cache), + description = buildString { append(Formatter.formatShortFileSize(context, diskCacheSize)) - append(" использовано") + append(" ${stringResource(R.string.used_word)}") when (val size = exoPlayerDiskCacheMaxSize) { - ExoPlayerDiskCacheMaxSize.Unlimited -> {} + ExoPlayerDiskCacheSize.Unlimited -> {} else -> append(" (${diskCacheSize * 100 / size.bytes}%)") } } - ) - - EnumValueSelectorSettingsEntry( - title = "Максимальный размер", - selectedValue = exoPlayerDiskCacheMaxSize, - onValueSelected = { exoPlayerDiskCacheMaxSize = it } - ) + ) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.max_size), + selectedValue = exoPlayerDiskCacheMaxSize, + onValueSelected = { exoPlayerDiskCacheMaxSize = it } + ) + } } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt index 9f09014..5ca1c3f 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/DatabaseSettings.kt @@ -1,157 +1,176 @@ package it.hamy.muza.ui.screens.settings -import android.annotation.SuppressLint import android.content.ActivityNotFoundException import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll +import androidx.compose.animation.AnimatedVisibility import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.pluralStringResource +import androidx.compose.ui.res.stringResource import it.hamy.muza.Database -import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.R import it.hamy.muza.internal import it.hamy.muza.path +import it.hamy.muza.preferences.DataPreferences import it.hamy.muza.query import it.hamy.muza.service.PlayerService -import it.hamy.muza.ui.components.themed.Header -import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.transaction +import it.hamy.muza.ui.screens.Route import it.hamy.muza.utils.intent import it.hamy.muza.utils.toast +import kotlinx.coroutines.flow.distinctUntilChanged import java.io.FileInputStream import java.io.FileOutputStream import java.text.SimpleDateFormat import java.util.Date +import java.util.Locale import kotlin.system.exitProcess -import kotlinx.coroutines.flow.distinctUntilChanged -@ExperimentalAnimationApi +@Route @Composable -fun DatabaseSettings() { +fun DatabaseSettings() = with(DataPreferences) { val context = LocalContext.current - val (colorPalette) = LocalAppearance.current - val eventsCount by remember { - Database.eventsCount().distinctUntilChanged() - }.collectAsState(initial = 0) + val eventsCount by remember { Database.eventsCount().distinctUntilChanged() } + .collectAsState(initial = 0) - val backupLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("application/vnd.sqlite3")) { uri -> - if (uri == null) return@rememberLauncherForActivityResult + val blacklistLength by remember { Database.blacklistLength().distinctUntilChanged() } + .collectAsState(initial = 0) - query { - Database.checkpoint() + val backupLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.CreateDocument(mimeType = "application/vnd.sqlite3") + ) { uri -> + if (uri == null) return@rememberLauncherForActivityResult - context.applicationContext.contentResolver.openOutputStream(uri) - ?.use { outputStream -> - FileInputStream(Database.internal.path).use { inputStream -> - inputStream.copyTo(outputStream) - } - } + query { + Database.checkpoint() + + context.applicationContext.contentResolver.openOutputStream(uri)?.use { output -> + FileInputStream(Database.internal.path).use { input -> input.copyTo(output) } } } + } - val restoreLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.OpenDocument()) { uri -> - if (uri == null) return@rememberLauncherForActivityResult + val restoreLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.OpenDocument() + ) { uri -> + if (uri == null) return@rememberLauncherForActivityResult - query { - Database.checkpoint() - Database.internal.close() + query { + Database.checkpoint() + Database.internal.close() - context.applicationContext.contentResolver.openInputStream(uri) - ?.use { inputStream -> - FileOutputStream(Database.internal.path).use { outputStream -> - inputStream.copyTo(outputStream) - } + context.applicationContext.contentResolver.openInputStream(uri) + ?.use { inputStream -> + FileOutputStream(Database.internal.path).use { outputStream -> + inputStream.copyTo(outputStream) } + } - context.stopService(context.intent()) - exitProcess(0) - } + context.stopService(context.intent()) + exitProcess(0) } + } - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() + SettingsCategoryScreen(title = stringResource(R.string.database)) { + SettingsGroup(title = stringResource(R.string.cleanup)) { + SwitchSettingsEntry( + title = stringResource(R.string.pause_playback_history), + text = stringResource(R.string.pause_playback_history_description), + isChecked = pauseHistory, + onCheckedChange = { pauseHistory = !pauseHistory } ) - ) { - Header(title = "Данные") - SettingsEntryGroupText(title = "ОЧИСТИТЬ") - - SettingsEntry( - title = "Очистить воспроизведения", - text = if (eventsCount > 0) { - "Удалить $eventsCount событий воспроизведения" - } else { - "Воспроизведения были удалены!" - }, - isEnabled = eventsCount > 0, - onClick = { query(Database::clearEvents) } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "БЭКАП") - - SettingsDescription(text = "Личные настройки (ночная тема и т.д.) и кэш исключаются") - - SettingsEntry( - title = "Бэкап", - text = "Экспорт данных в локальное хранилище", - onClick = { - @SuppressLint("SimpleDateFormat") - val dateFormat = SimpleDateFormat("yyyyMMddHHmmss") - - try { - backupLauncher.launch("muza_${dateFormat.format(Date())}.db") - } catch (e: ActivityNotFoundException) { - context.toast("не найдено приложения для создания документов") - } + AnimatedVisibility(visible = pauseHistory) { + SettingsDescription( + text = stringResource(R.string.pause_playback_history_warning), + important = true + ) } - ) - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ВОССТАНОВЛЕНИЕ") - - ImportantSettingsDescription(text = "Существующие настройки будут перезаписаны.\n${context.applicationInfo.nonLocalizedLabel} Будет перезапушена.") - - SettingsEntry( - title = "Восстановить", - text = "импорт данных из локального хранилища", - onClick = { - try { - restoreLauncher.launch( - arrayOf( - "application/vnd.sqlite3", - "application/x-sqlite3", - "application/octet-stream" - ) + AnimatedVisibility(visible = !(pauseHistory && eventsCount == 0)) { + SettingsEntry( + title = stringResource(R.string.reset_quick_picks), + text = if (eventsCount > 0) pluralStringResource( + R.plurals.format_reset_quick_picks_amount, + eventsCount, + eventsCount ) - } catch (e: ActivityNotFoundException) { - context.toast("не найдено приложения для открытия документов") - } + else stringResource(R.string.quick_picks_empty), + onClick = { query(Database::clearEvents) }, + isEnabled = eventsCount > 0 + ) } - ) + + SwitchSettingsEntry( + title = stringResource(R.string.pause_playback_time), + text = stringResource( + R.string.format_pause_playback_time_description, + topListLength + ), + isChecked = pausePlaytime, + onCheckedChange = { pausePlaytime = !pausePlaytime } + ) + + SettingsEntry( + title = stringResource(R.string.reset_blacklist), + text = if (blacklistLength > 0) pluralStringResource( + R.plurals.format_reset_blacklist_description, + blacklistLength, + blacklistLength + ) else stringResource(R.string.blacklist_empty), + isEnabled = blacklistLength > 0, + onClick = { + transaction { + Database.resetBlacklist() + } + } + ) + } + SettingsGroup( + title = stringResource(R.string.backup), + description = stringResource(R.string.backup_description) + ) { + SettingsEntry( + title = stringResource(R.string.backup), + text = stringResource(R.string.backup_action_description), + onClick = { + val dateFormat = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()) + + try { + backupLauncher.launch("vimusic_${dateFormat.format(Date())}.db") + } catch (e: ActivityNotFoundException) { + context.toast(context.getString(R.string.no_file_chooser_installed)) + } + } + ) + } + SettingsGroup( + title = stringResource(R.string.restore), + description = stringResource(R.string.restore_warning), + important = true + ) { + SettingsEntry( + title = stringResource(R.string.restore), + text = stringResource(R.string.restore_description), + onClick = { + try { + restoreLauncher.launch( + arrayOf( + "application/vnd.sqlite3", + "application/x-sqlite3", + "application/octet-stream" + ) + ) + } catch (e: ActivityNotFoundException) { + context.toast(context.getString(R.string.no_file_chooser_installed)) + } + } + ) + } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt index 9cc9fd6..fbddcef 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/OtherSettings.kt @@ -6,59 +6,74 @@ import android.content.ComponentName import android.content.Intent import android.content.pm.PackageManager import android.net.Uri +import android.os.Handler +import android.os.Looper import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.SnapshotMutationPolicy import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import it.hamy.muza.Database -import it.hamy.muza.LocalPlayerAwareWindowInsets +import it.hamy.muza.DatabaseInitializer +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.preferences.AppearancePreferences import it.hamy.muza.preferences.DataPreferences +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.preferences.isProxyEnabledKey +import it.hamy.muza.preferences.proxyHostNameKey +import it.hamy.muza.preferences.proxyModeKey +import it.hamy.muza.preferences.proxyPortKey +import it.hamy.muza.preferences.rememberPreference import it.hamy.muza.query import it.hamy.muza.service.PlayerMediaBrowserService -import it.hamy.muza.ui.components.themed.Header -import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.components.themed.SliderDialog +import it.hamy.muza.ui.screens.Route +import it.hamy.muza.utils.findActivity import it.hamy.muza.utils.isAtLeastAndroid12 import it.hamy.muza.utils.isAtLeastAndroid6 import it.hamy.muza.utils.isIgnoringBatteryOptimizations -import it.hamy.muza.utils.isInvincibilityEnabledKey -import it.hamy.muza.utils.isProxyEnabledKey -import it.hamy.muza.utils.pauseSearchHistoryKey -import it.hamy.muza.utils.proxyHostNameKey -import it.hamy.muza.utils.proxyModeKey -import it.hamy.muza.utils.proxyPortKey -import it.hamy.muza.utils.rememberPreference +import it.hamy.muza.utils.smoothScrollToBottom import it.hamy.muza.utils.toast +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged -import okhttp3.internal.toImmutableList +import kotlinx.coroutines.launch import java.net.Proxy - - +import kotlin.math.roundToInt +import kotlin.system.exitProcess @SuppressLint("BatteryLife") -@ExperimentalAnimationApi +@Route @Composable fun OtherSettings() { val context = LocalContext.current - val (colorPalette) = LocalAppearance.current + val binder = LocalPlayerServiceBinder.current + val uriHandler = LocalUriHandler.current + + val scrollState = rememberScrollState() + val coroutineScope = rememberCoroutineScope() var isAndroidAutoEnabled by remember { val component = ComponentName(context, PlayerMediaBrowserService::class.java) @@ -80,159 +95,259 @@ fun OtherSettings() { ) } - var isInvincibilityEnabled by rememberPreference(isInvincibilityEnabledKey, false) - - var isProxyEnabled by rememberPreference(isProxyEnabledKey, false) - - var proxyHost by rememberPreference(proxyHostNameKey, defaultValue = "") - - var proxyPort by rememberPreference(proxyPortKey, defaultValue = 1080) - - var proxyMode by rememberPreference(proxyModeKey, defaultValue = Proxy.Type.HTTP) - var isIgnoringBatteryOptimizations by remember { mutableStateOf(context.isIgnoringBatteryOptimizations) } - val activityResultLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { - isIgnoringBatteryOptimizations = context.isIgnoringBatteryOptimizations - } - - var pauseSearchHistory by rememberPreference(pauseSearchHistoryKey, false) + val activityResultLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + onResult = { isIgnoringBatteryOptimizations = context.isIgnoringBatteryOptimizations } + ) val queriesCount by remember { Database.queriesCount().distinctUntilChanged() }.collectAsState(initial = 0) - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() - ) + var proxyMode by rememberPreference(proxyModeKey, defaultValue = Proxy.Type.HTTP) + + var isProxyEnabled by rememberPreference(isProxyEnabledKey, false) + + var proxyHost by rememberPreference(proxyHostNameKey, defaultValue = "") + + var proxyPort by rememberPreference(proxyPortKey, defaultValue = 3128) + + SettingsCategoryScreen( + title = stringResource(R.string.other), + scrollState = scrollState ) { - Header(title = "Другое") + SettingsGroup(title = stringResource(R.string.android_auto)) { + SwitchSettingsEntry( + title = stringResource(R.string.android_auto), + text = stringResource(R.string.android_auto_description), + isChecked = isAndroidAutoEnabled, + onCheckedChange = { isAndroidAutoEnabled = it } + ) - SettingsEntryGroupText(title = "ОБЗОР") + AnimatedVisibility(visible = isAndroidAutoEnabled) { + SettingsDescription(text = stringResource(R.string.android_auto_warning)) + } + } + SettingsGroup(title = stringResource(R.string.search_history)) { + SwitchSettingsEntry( + title = stringResource(R.string.pause_search_history), + text = stringResource(R.string.pause_search_history_description), + isChecked = DataPreferences.pauseSearchHistory, + onCheckedChange = { DataPreferences.pauseSearchHistory = it } + ) - ValueSelectorSettingsEntry( - title = "Режим отображения", - selectedValue = DataPreferences.quickPicksSource, - values = enumValues().toList().toImmutableList(), - onValueSelected = { DataPreferences.quickPicksSource = it } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "АНДРОИД АВТО") - - SettingsDescription(text = "Включите опцию \"неизвестные источники\" в настройках разработчика в Андроид Авто.") - - SwitchSettingEntry( - title = "Android Auto", - text = "Включить поддержку Андроид Авто", - isChecked = isAndroidAutoEnabled, - onCheckedChange = { isAndroidAutoEnabled = it } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ИСТОРИЯ ПОИСКА") - - SwitchSettingEntry( - title = "Приостановить историю", - text = "Не сохранять историю поиска", - isChecked = pauseSearchHistory, - onCheckedChange = { pauseSearchHistory = it } - ) - - SettingsEntry( - title = "Очистить историю поиска", - text = if (queriesCount > 0) { - "Удалить $queriesCount поисковых запросов" - } else { - "История чиста" - }, - isEnabled = queriesCount > 0, - onClick = { query(Database::clearQueries) } - ) - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "ОПТИМИЗАЦИЯ БАТАРЕИ") - - ImportantSettingsDescription(text = "Если включена экономия батареи, воспроизведение может внезапно остановиться!") - - if (isAtLeastAndroid12) { - SettingsDescription(text = "Android 12+: Обязательно отключите экономию батареи, прежде чем включать опцию \"Invincible service\"!") + AnimatedVisibility(visible = !(DataPreferences.pauseSearchHistory && queriesCount == 0)) { + SettingsEntry( + title = stringResource(R.string.clear_search_history), + text = if (queriesCount > 0) stringResource( + R.string.format_clear_search_history_amount, + queriesCount + ) + else stringResource(R.string.empty_history), + onClick = { query(Database::clearQueries) }, + isEnabled = queriesCount > 0 + ) + } + } + SettingsGroup(title = stringResource(R.string.built_in_playlists)) { + IntSettingsEntry( + title = stringResource(R.string.top_list_length), + text = stringResource(R.string.top_list_length_description), + currentValue = DataPreferences.topListLength, + setValue = { DataPreferences.topListLength = it }, + defaultValue = 10, + range = 1..500 + ) + } + SettingsGroup(title = stringResource(R.string.quick_picks)) { + EnumValueSelectorSettingsEntry( + title = stringResource(R.string.quick_picks_source), + selectedValue = DataPreferences.quickPicksSource, + onValueSelected = { DataPreferences.quickPicksSource = it }, + valueText = { it.displayName() } + ) + } + SettingsGroup(title = stringResource(R.string.dynamic_thumbnails)) { + var selectingThumbnailSize by remember { mutableStateOf(false) } + SettingsEntry( + title = stringResource(R.string.max_dynamic_thumbnail_size), + text = stringResource(R.string.max_dynamic_thumbnail_size_description), + onClick = { + selectingThumbnailSize = true + } + ) + if (selectingThumbnailSize) SliderDialog( + onDismiss = { selectingThumbnailSize = false }, + title = stringResource(R.string.max_dynamic_thumbnail_size), + provideState = { + remember(AppearancePreferences.maxThumbnailSize) { + mutableFloatStateOf(AppearancePreferences.maxThumbnailSize.toFloat()) + } + }, + onSlideCompleted = { AppearancePreferences.maxThumbnailSize = it.roundToInt() }, + min = 16f, + max = 2160f, + toDisplay = { + stringResource( + R.string.format_px, + it.roundToInt() + ) + } + ) } - SettingsEntry( - title = "Игнор. экономии батареи ", - isEnabled = !isIgnoringBatteryOptimizations, - text = if (isIgnoringBatteryOptimizations) { - "Уже игнорируется" - } else { - "Отключить остановку приложения в фоне" - }, - onClick = { - if (!isAtLeastAndroid6) return@SettingsEntry - - try { - activityResultLauncher.launch( - Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { - data = Uri.parse("package:${context.packageName}") - } - ) - } catch (e: ActivityNotFoundException) { - try { - activityResultLauncher.launch( - Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS) - ) - } catch (e: ActivityNotFoundException) { - context.toast("не найдено настроек батареи! Добавьте приложение в белый список вручную") - } - } - } - ) - - SwitchSettingEntry( - title = "Invincible service", - text = "Обход экономии батареи", - isChecked = isInvincibilityEnabled, - onCheckedChange = { isInvincibilityEnabled = it } - ) + SettingsGroup(title = stringResource(R.string.proxy)) { - SettingsEntryGroupText(title = "ПРОКСИ") - - SwitchSettingEntry( - title = "Прокси", - text = "Включить прокси", - isChecked = isProxyEnabled, - onCheckedChange = { isProxyEnabled = it } - ) + SwitchSettingsEntry( + title = stringResource(R.string.proxy), + text = stringResource(R.string.proxy_desc), + isChecked = isProxyEnabled, + onCheckedChange = { isProxyEnabled = it } + ) AnimatedVisibility(visible = isProxyEnabled) { Column { - EnumValueSelectorSettingsEntry(title = "Прокси", + EnumValueSelectorSettingsEntry(title = "Proxy", selectedValue = proxyMode, onValueSelected = {proxyMode = it}) TextDialogSettingEntry( title = "Хост", text = "Введите хост", currentText = proxyHost, onTextSave = { proxyHost = it }) + + TextDialogSettingEntry( title = "Порт", text = "Введите порт", currentText = proxyPort.toString(), onTextSave = { proxyPort = it.toIntOrNull() ?: 1080 }) + } } } + + SettingsGroup(title = stringResource(R.string.service_lifetime)) { + AnimatedVisibility(visible = !isIgnoringBatteryOptimizations) { + SettingsDescription( + text = stringResource(R.string.service_lifetime_warning), + important = true + ) + } + + if (isAtLeastAndroid12) SettingsDescription( + text = stringResource(R.string.service_lifetime_warning_android_12) + ) + + SettingsEntry( + title = stringResource(R.string.ignore_battery_optimizations), + text = if (isIgnoringBatteryOptimizations) stringResource(R.string.ignoring_battery_optimizations) + else stringResource(R.string.ignore_battery_optimizations_action), + onClick = { + if (!isAtLeastAndroid6) return@SettingsEntry + + try { + activityResultLauncher.launch( + Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = Uri.parse("package:${context.packageName}") + } + ) + } catch (e: ActivityNotFoundException) { + try { + activityResultLauncher.launch(Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)) + } catch (e: ActivityNotFoundException) { + context.toast(context.getString(R.string.no_battery_optimization_settings_found)) + } + } + }, + isEnabled = !isIgnoringBatteryOptimizations + ) + + AnimatedVisibility(!isAtLeastAndroid12 || isIgnoringBatteryOptimizations) { + SwitchSettingsEntry( + title = stringResource(R.string.invincible_service), + text = stringResource(R.string.invincible_service_description), + isChecked = PlayerPreferences.isInvincibilityEnabled, + onCheckedChange = { PlayerPreferences.isInvincibilityEnabled = it } + ) + } + + SettingsEntry( + title = stringResource(R.string.need_help), + text = stringResource(R.string.need_help_description), + onClick = { + uriHandler.openUri("https://dontkillmyapp.com/") + } + ) + + SettingsDescription(text = stringResource(R.string.service_lifetime_report_issue)) + } + + var showTroubleshoot by rememberSaveable { mutableStateOf(false) } + + AnimatedContent(showTroubleshoot, label = "") { show -> + if (show) SettingsGroup( + title = stringResource(R.string.troubleshooting), + description = stringResource(R.string.troubleshooting_warning), + important = true + ) { + val troubleshootScope = rememberCoroutineScope() + var reloading by rememberSaveable { mutableStateOf(false) } + + SecondaryTextButton( + text = stringResource(R.string.reload_app_internals), + onClick = { + if (!reloading) troubleshootScope.launch { + reloading = true + binder?.restartForegroundOrStop() + DatabaseInitializer.reload() + reloading = false + } + }, + enabled = !reloading, + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp) + .padding(horizontal = 16.dp) + ) + + Spacer(modifier = Modifier.height(12.dp)) + + SecondaryTextButton( + text = stringResource(R.string.kill_app), + onClick = { + binder?.stopRadio() + binder?.invincible = false + context.findActivity().finishAndRemoveTask() + binder?.restartForegroundOrStop() + troubleshootScope.launch { + delay(500L) + Handler(Looper.getMainLooper()).postAtFrontOfQueue { exitProcess(0) } + } + }, + enabled = !reloading, + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp) + .padding(horizontal = 16.dp) + ) + } else SecondaryTextButton( + text = stringResource(R.string.show_troubleshoot_section), + onClick = { + coroutineScope.launch { + delay(500) + scrollState.smoothScrollToBottom() + } + showTroubleshoot = true + }, + modifier = Modifier + .fillMaxWidth() + .padding(start = 16.dp, bottom = 16.dp) + .padding(horizontal = 16.dp) + ) + } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt index a20f00e..3a82e8d 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/PlayerSettings.kt @@ -5,124 +5,180 @@ import android.content.Intent import android.media.audiofx.AudioEffect import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.background +import androidx.annotation.OptIn +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import it.hamy.muza.LocalPlayerAwareWindowInsets +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.media3.common.util.UnstableApi import it.hamy.muza.LocalPlayerServiceBinder -import it.hamy.muza.ui.components.themed.Header -import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.R +import it.hamy.muza.preferences.PlayerPreferences +import it.hamy.muza.ui.components.themed.SecondaryTextButton +import it.hamy.muza.ui.screens.Route import it.hamy.muza.utils.isAtLeastAndroid6 -import it.hamy.muza.utils.persistentQueueKey -import it.hamy.muza.utils.rememberPreference -import it.hamy.muza.utils.resumePlaybackWhenDeviceConnectedKey -import it.hamy.muza.utils.skipSilenceKey import it.hamy.muza.utils.toast -import it.hamy.muza.utils.volumeNormalizationKey -@ExperimentalAnimationApi +@OptIn(UnstableApi::class) +@Route @Composable -fun PlayerSettings() { +fun PlayerSettings() = with(PlayerPreferences) { val context = LocalContext.current - val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current - var persistentQueue by rememberPreference(persistentQueueKey, false) - var resumePlaybackWhenDeviceConnected by rememberPreference( - resumePlaybackWhenDeviceConnectedKey, - false - ) - var skipSilence by rememberPreference(skipSilenceKey, false) - var volumeNormalization by rememberPreference(volumeNormalizationKey, false) + val activityResultLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult() + ) { } - val activityResultLauncher = - rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { } - - Column( - modifier = Modifier - .background(colorPalette.background0) - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .padding( - LocalPlayerAwareWindowInsets.current - .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) - .asPaddingValues() + SettingsCategoryScreen(title = stringResource(R.string.player)) { + SettingsGroup(title = stringResource(R.string.player)) { + SwitchSettingsEntry( + title = stringResource(R.string.persistent_queue), + text = stringResource(R.string.persistent_queue_description), + isChecked = persistentQueue, + onCheckedChange = { persistentQueue = it } ) - ) { - Header(title = "Плеер и Аудио") - SettingsEntryGroupText(title = "Плеер") - - SwitchSettingEntry( - title = "Постоянная очередь", - text = "Сохранение и восстановление воспроизводимых песен", - isChecked = persistentQueue, - onCheckedChange = { - persistentQueue = it - } - ) - - if (isAtLeastAndroid6) { - SwitchSettingEntry( - title = "Возобновление музыки", - text = "При подключении bluetooth устройств", + if (isAtLeastAndroid6) SwitchSettingsEntry( + title = stringResource(R.string.resume_playback), + text = stringResource(R.string.resume_playback_description), isChecked = resumePlaybackWhenDeviceConnected, onCheckedChange = { resumePlaybackWhenDeviceConnected = it } ) + + SwitchSettingsEntry( + title = stringResource(R.string.stop_when_closed), + text = stringResource(R.string.stop_when_closed_description), + isChecked = stopWhenClosed, + onCheckedChange = { stopWhenClosed = it } + ) } - - SettingsGroupSpacer() - - SettingsEntryGroupText(title = "АУДИО") - - SwitchSettingEntry( - title = "Пропускать тишину", - text = "Пропускать тихие фрагменты песен", - isChecked = skipSilence, - onCheckedChange = { - skipSilence = it - } - ) - - SwitchSettingEntry( - title = "Нормализация звука", - text = "Фиксированный уровень громкости", - isChecked = volumeNormalization, - onCheckedChange = { - volumeNormalization = it - } - ) - - SettingsEntry( - title = "Эквалайзер", - text = "Открыть системный эквалайзер", - onClick = { - val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply { - putExtra(AudioEffect.EXTRA_AUDIO_SESSION, binder?.player?.audioSessionId) - putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.packageName) - putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) + SettingsGroup(title = stringResource(R.string.audio)) { + SwitchSettingsEntry( + title = stringResource(R.string.skip_silence), + text = stringResource(R.string.skip_silence_description), + isChecked = skipSilence, + onCheckedChange = { + skipSilence = it } + ) - try { - activityResultLauncher.launch(intent) - } catch (e: ActivityNotFoundException) { - context.toast("не найден эквалайзер") + AnimatedVisibility(visible = skipSilence) { + val initialValue by remember { derivedStateOf { minimumSilence.toFloat() / 1000L } } + var newValue by remember(initialValue) { mutableFloatStateOf(initialValue) } + var changed by rememberSaveable { mutableStateOf(false) } + + Column { + SliderSettingsEntry( + title = stringResource(R.string.minimum_silence_length), + text = stringResource(R.string.minimum_silence_length_description), + state = newValue, + onSlide = { newValue = it }, + onSlideCompleted = { + minimumSilence = newValue.toLong() * 1000L + changed = true + }, + toDisplay = { stringResource(R.string.format_ms, it.toLong()) }, + range = 1.00f..2000.000f + ) + + AnimatedVisibility(visible = changed) { + Row(horizontalArrangement = Arrangement.spacedBy(4.dp)) { + SettingsDescription( + text = stringResource(R.string.minimum_silence_length_warning), + important = true, + modifier = Modifier.weight(2f) + ) + SecondaryTextButton( + text = stringResource(R.string.restart_service), + onClick = { + binder?.restartForegroundOrStop()?.let { changed = false } + }, + modifier = Modifier + .weight(1f) + .padding(end = 24.dp) + ) + } + } } } - ) + + SwitchSettingsEntry( + title = stringResource(R.string.loudness_normalization), + text = stringResource(R.string.loudness_normalization_description), + isChecked = volumeNormalization, + onCheckedChange = { volumeNormalization = it } + ) + + AnimatedVisibility(visible = volumeNormalization) { + var newValue by remember(volumeNormalizationBaseGain) { + mutableFloatStateOf(volumeNormalizationBaseGain) + } + + SliderSettingsEntry( + title = stringResource(R.string.loudness_base_gain), + text = stringResource(R.string.loudness_base_gain_description), + state = newValue, + onSlide = { newValue = it }, + onSlideCompleted = { volumeNormalizationBaseGain = newValue }, + toDisplay = { stringResource(R.string.format_db, "%.2f".format(it)) }, + range = -20.00f..20.00f + ) + } + + SwitchSettingsEntry( + title = stringResource(R.string.bass_boost), + text = stringResource(R.string.bass_boost_description), + isChecked = bassBoost, + onCheckedChange = { bassBoost = it } + ) + + AnimatedVisibility(visible = bassBoost) { + var newValue by remember(bassBoostLevel) { mutableFloatStateOf(bassBoostLevel.toFloat()) } + + SliderSettingsEntry( + title = stringResource(R.string.bass_boost_level), + text = stringResource(R.string.bass_boost_level_description), + state = newValue, + onSlide = { newValue = it }, + onSlideCompleted = { bassBoostLevel = newValue.toInt() }, + toDisplay = { (it * 1000f).toInt().toString() }, + range = 0f..1f + ) + } + + SettingsEntry( + title = stringResource(R.string.equalizer), + text = stringResource(R.string.equalizer_description), + onClick = { + val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply { + putExtra(AudioEffect.EXTRA_AUDIO_SESSION, binder?.player?.audioSessionId) + putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.packageName) + putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) + } + + try { + activityResultLauncher.launch(intent) + } catch (e: ActivityNotFoundException) { + context.toast(context.getString(R.string.no_equalizer_installed)) + } + } + ) + } } } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt index af37200..e7019c3 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SettingsScreen.kt @@ -1,18 +1,28 @@ +@file:Suppress("TooManyFunctions") + package it.hamy.muza.ui.screens.settings -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.BasicText +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable @@ -22,46 +32,55 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.text +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.unit.dp import it.hamy.compose.routing.RouteHandler +import it.hamy.muza.LocalPlayerAwareWindowInsets import it.hamy.muza.R +import it.hamy.muza.ui.components.themed.Header +import it.hamy.muza.ui.components.themed.NumberFieldDialog import it.hamy.muza.ui.components.themed.Scaffold +import it.hamy.muza.ui.components.themed.Slider import it.hamy.muza.ui.components.themed.Switch import it.hamy.muza.ui.components.themed.TextFieldDialog import it.hamy.muza.ui.components.themed.ValueSelectorDialog -import it.hamy.muza.ui.screens.globalRoutes +import it.hamy.muza.ui.screens.GlobalRoutes +import it.hamy.muza.ui.screens.Route import it.hamy.muza.ui.styling.LocalAppearance import it.hamy.muza.utils.color import it.hamy.muza.utils.secondary import it.hamy.muza.utils.semiBold import it.hamy.muza.utils.toast +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList -@ExperimentalFoundationApi -@ExperimentalAnimationApi +@Route @Composable fun SettingsScreen() { val saveableStateHolder = rememberSaveableStateHolder() - val (tabIndex, onTabChanged) = rememberSaveable { - mutableStateOf(0) - } + val (tabIndex, onTabChanged) = rememberSaveable { mutableIntStateOf(0) } RouteHandler(listenToGlobalEmitter = true) { - globalRoutes() + GlobalRoutes() - host { + NavHost { Scaffold( topIconButtonId = R.drawable.chevron_back, onTopIconButtonClick = pop, tabIndex = tabIndex, onTabChanged = onTabChanged, - tabColumnContent = { Item -> - Item(0, "Вид", R.drawable.color_palette) - Item(1, "Плеер", R.drawable.play) - Item(2, "Кэш", R.drawable.server) - Item(3, "Данные", R.drawable.server) - Item(4, "Другое", R.drawable.shapes) - Item(5, "Инфо", R.drawable.information) + tabColumnContent = { item -> + item(0, stringResource(R.string.appearance), R.drawable.color_palette) + item(1, stringResource(R.string.player), R.drawable.play) + item(2, stringResource(R.string.cache), R.drawable.server) + item(3, stringResource(R.string.database), R.drawable.server) + item(4, stringResource(R.string.sync), R.drawable.sync) + item(5, stringResource(R.string.other), R.drawable.shapes) + item(6, stringResource(R.string.about), R.drawable.information) } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(currentTabIndex) { @@ -70,8 +89,9 @@ fun SettingsScreen() { 1 -> PlayerSettings() 2 -> CacheSettings() 3 -> DatabaseSettings() - 4 -> OtherSettings() - 5 -> About() + 4 -> SyncSettings() + 5 -> OtherSettings() + 6 -> About() } } } @@ -83,119 +103,150 @@ fun SettingsScreen() { inline fun > EnumValueSelectorSettingsEntry( title: String, selectedValue: T, - crossinline onValueSelected: (T) -> Unit, + noinline onValueSelected: (T) -> Unit, modifier: Modifier = Modifier, isEnabled: Boolean = true, - crossinline valueText: (T) -> String = Enum::name, + noinline valueText: @Composable (T) -> String = { it.name }, noinline trailingContent: (@Composable () -> Unit)? = null -) { - ValueSelectorSettingsEntry( - title = title, - selectedValue = selectedValue, - values = enumValues().toList(), - onValueSelected = onValueSelected, - modifier = modifier, - isEnabled = isEnabled, - valueText = valueText, - trailingContent = trailingContent, - ) -} +) = ValueSelectorSettingsEntry( + title = title, + selectedValue = selectedValue, + values = enumValues().toList().toImmutableList(), + onValueSelected = onValueSelected, + modifier = modifier, + isEnabled = isEnabled, + valueText = valueText, + trailingContent = trailingContent +) @Composable -inline fun ValueSelectorSettingsEntry( +fun ValueSelectorSettingsEntry( title: String, selectedValue: T, - values: List, - crossinline onValueSelected: (T) -> Unit, + values: ImmutableList, + onValueSelected: (T) -> Unit, modifier: Modifier = Modifier, isEnabled: Boolean = true, - crossinline valueText: (T) -> String = { it.toString() }, - noinline trailingContent: (@Composable () -> Unit)? = null + usePadding: Boolean = true, + valueText: @Composable (T) -> String = { it.toString() }, + trailingContent: (@Composable () -> Unit)? = null ) { - var isShowingDialog by remember { - mutableStateOf(false) - } + var isShowingDialog by remember { mutableStateOf(false) } - if (isShowingDialog) { - ValueSelectorDialog( - onDismiss = { isShowingDialog = false }, - title = title, - selectedValue = selectedValue, - values = values, - onValueSelected = onValueSelected, - valueText = valueText - ) - } + if (isShowingDialog) ValueSelectorDialog( + onDismiss = { isShowingDialog = false }, + title = title, + selectedValue = selectedValue, + values = values, + onValueSelected = onValueSelected, + valueText = valueText + ) SettingsEntry( + modifier = modifier, title = title, text = valueText(selectedValue), - modifier = modifier, - isEnabled = isEnabled, onClick = { isShowingDialog = true }, - trailingContent = trailingContent + isEnabled = isEnabled, + trailingContent = trailingContent, + usePadding = usePadding ) } @Composable -fun SwitchSettingEntry( +fun SwitchSettingsEntry( title: String, - text: String, + text: String?, isChecked: Boolean, onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, - isEnabled: Boolean = true + isEnabled: Boolean = true, + usePadding: Boolean = true +) = SettingsEntry( + modifier = modifier, + title = title, + text = text, + onClick = { onCheckedChange(!isChecked) }, + isEnabled = isEnabled, + usePadding = usePadding ) { + Switch(isChecked = isChecked) +} + +@Composable +fun SliderSettingsEntry( + title: String, + text: String, + state: Float, + range: ClosedFloatingPointRange, + modifier: Modifier = Modifier, + onSlide: (Float) -> Unit = { }, + onSlideCompleted: () -> Unit = { }, + toDisplay: @Composable (Float) -> String = { it.toString() }, + steps: Int = 0, + isEnabled: Boolean = true, + usePadding: Boolean = true +) = Column(modifier = modifier) { SettingsEntry( title = title, - text = text, + text = "$text (${toDisplay(state)})", + onClick = {}, isEnabled = isEnabled, - onClick = { onCheckedChange(!isChecked) }, - trailingContent = { Switch(isChecked = isChecked) }, - modifier = modifier + usePadding = usePadding + ) + + Slider( + state = state, + setState = onSlide, + onSlideCompleted = onSlideCompleted, + range = range, + steps = steps, + modifier = Modifier + .height(36.dp) + .alpha(if (isEnabled) 1f else 0.5f) + .let { if (usePadding) it.padding(start = 32.dp, end = 16.dp) else it } + .padding(vertical = 16.dp) + .fillMaxWidth() ) } @Composable -fun SettingsEntry( +inline fun IntSettingsEntry( title: String, text: String, + currentValue: Int, + crossinline setValue: (Int) -> Unit, + range: IntRange, modifier: Modifier = Modifier, - onClick: () -> Unit, + defaultValue: Int = 0, isEnabled: Boolean = true, - trailingContent: (@Composable () -> Unit)? = null + usePadding: Boolean = true ) { - val (colorPalette, typography) = LocalAppearance.current + var isShowingDialog by remember { mutableStateOf(false) } - Row( - horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalAlignment = Alignment.CenterVertically, - modifier = modifier - .clickable(enabled = isEnabled, onClick = onClick) - .alpha(if (isEnabled) 1f else 0.5f) - .padding(start = 16.dp) - .padding(all = 16.dp) - .fillMaxWidth() - ) { - Column( - modifier = Modifier - .weight(1f) - ) { - BasicText( - text = title, - style = typography.xs.semiBold.copy(color = colorPalette.text), - ) + if (isShowingDialog) NumberFieldDialog( + onDismiss = { isShowingDialog = false }, + onDone = { + setValue(it) + isShowingDialog = false + }, + initialValue = currentValue, + defaultValue = defaultValue, + convert = { it.toIntOrNull() }, + range = range + ) - BasicText( - text = text, - style = typography.xs.semiBold.copy(color = colorPalette.textSecondary), - ) - } - - trailingContent?.invoke() - } + SettingsEntry( + modifier = modifier, + title = title, + text = text, + onClick = { isShowingDialog = true }, + isEnabled = isEnabled, + usePadding = usePadding + ) } + @Composable fun TextDialogSettingEntry( title: String, @@ -214,7 +265,7 @@ fun TextDialogSettingEntry( onDone ={value-> onTextSave(value) context.toast("Сохранено!") - } , doneText = "Save", initialTextInput = currentText) + } , doneText = "Сохранить", initialTextInput = currentText) } SettingsEntry( title = title, @@ -228,31 +279,53 @@ fun TextDialogSettingEntry( @Composable -fun SettingsDescription( - text: String, +fun SettingsEntry( + title: String, + onClick: () -> Unit, modifier: Modifier = Modifier, + text: String? = null, + isEnabled: Boolean = true, + usePadding: Boolean = true, + trailingContent: @Composable (() -> Unit)? = null +) = Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + verticalAlignment = Alignment.CenterVertically, + modifier = modifier + .clickable(enabled = isEnabled, onClick = onClick) + .alpha(if (isEnabled) 1f else 0.5f) + .let { if (usePadding) it.padding(start = 32.dp, end = 16.dp) else it } + .padding(vertical = 16.dp) + .fillMaxWidth() ) { - val (_, typography) = LocalAppearance.current + val (colorPalette, typography) = LocalAppearance.current - BasicText( - text = text, - style = typography.xxs.secondary, - modifier = modifier - .padding(start = 16.dp) - .padding(horizontal = 16.dp, vertical = 8.dp) - ) + Column(modifier = Modifier.weight(1f)) { + BasicText( + text = title, + style = typography.xs.semiBold.copy(color = colorPalette.text) + ) + + if (text != null) BasicText( + text = text, + style = typography.xs.semiBold.copy(color = colorPalette.textSecondary) + ) + } + + trailingContent?.invoke() } @Composable -fun ImportantSettingsDescription( +fun SettingsDescription( text: String, modifier: Modifier = Modifier, + important: Boolean = false ) { val (colorPalette, typography) = LocalAppearance.current BasicText( text = text, - style = typography.xxs.semiBold.color(colorPalette.red), + style = if (important) typography.xxs.semiBold.color(colorPalette.red) + else typography.xxs.secondary, modifier = modifier .padding(start = 16.dp) .padding(horizontal = 16.dp, vertical = 8.dp) @@ -262,7 +335,7 @@ fun ImportantSettingsDescription( @Composable fun SettingsEntryGroupText( title: String, - modifier: Modifier = Modifier, + modifier: Modifier = Modifier ) { val (colorPalette, typography) = LocalAppearance.current @@ -272,15 +345,66 @@ fun SettingsEntryGroupText( modifier = modifier .padding(start = 16.dp) .padding(horizontal = 16.dp) + .semantics { text = AnnotatedString(text = title) } ) } @Composable -fun SettingsGroupSpacer( +fun SettingsGroupSpacer(modifier: Modifier = Modifier) = Spacer(modifier = modifier.height(24.dp)) + +@Composable +fun SettingsCategoryScreen( + title: String, modifier: Modifier = Modifier, + description: String? = null, + scrollState: ScrollState? = rememberScrollState(), + content: @Composable ColumnScope.() -> Unit ) { - Spacer( + val (colorPalette, typography) = LocalAppearance.current + + Column( modifier = modifier - .height(24.dp) - ) + .background(colorPalette.background0) + .fillMaxSize() + .let { if (scrollState != null) it.verticalScroll(state = scrollState) else it } + .padding( + LocalPlayerAwareWindowInsets.current + .only(WindowInsetsSides.Vertical + WindowInsetsSides.End) + .asPaddingValues() + ) + ) { + Header(title = title) { + description?.let { description -> + BasicText( + text = description, + style = typography.s.secondary + ) + SettingsGroupSpacer() + } + } + + content() + } +} + +@Composable +fun SettingsGroup( + title: String, + modifier: Modifier = Modifier, + description: String? = null, + important: Boolean = false, + content: @Composable ColumnScope.() -> Unit +) = Column(modifier = modifier) { + SettingsEntryGroupText(title = title) + + description?.let { description -> + SettingsDescription( + text = description, + important = important + ) + } + + content() + + SettingsGroupSpacer() } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SyncSettings.kt b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SyncSettings.kt new file mode 100644 index 0000000..0745661 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/ui/screens/settings/SyncSettings.kt @@ -0,0 +1,225 @@ +package it.hamy.muza.ui.screens.settings + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.BasicText +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.unit.dp +import io.ktor.http.Url +import it.hamy.compose.persist.persistList +import it.hamy.piped.Piped +import it.hamy.piped.models.Instance +import it.hamy.muza.Database +import it.hamy.muza.R +import it.hamy.muza.models.PipedSession +import it.hamy.muza.transaction +import it.hamy.muza.ui.components.themed.CircularProgressIndicator +import it.hamy.muza.ui.components.themed.DefaultDialog +import it.hamy.muza.ui.components.themed.DialogTextButton +import it.hamy.muza.ui.components.themed.IconButton +import it.hamy.muza.ui.components.themed.TextField +import it.hamy.muza.ui.screens.Route +import it.hamy.muza.ui.styling.LocalAppearance +import it.hamy.muza.utils.center +import it.hamy.muza.utils.semiBold +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.launch + +@Route +@Composable +fun SyncSettings() { + val coroutineScope = rememberCoroutineScope() + + val (colorPalette, typography) = LocalAppearance.current + val uriHandler = LocalUriHandler.current + + val pipedSessions by Database.pipedSessions().collectAsState(initial = listOf()) + + var linkingPiped by remember { mutableStateOf(false) } + if (linkingPiped) DefaultDialog( + onDismiss = { linkingPiped = false }, + horizontalAlignment = Alignment.Start + ) { + var isLoading by rememberSaveable { mutableStateOf(false) } + var hasError by rememberSaveable { mutableStateOf(false) } + + when { + hasError -> BasicText( + text = stringResource(R.string.error_piped_link), + style = typography.xs.semiBold.center, + modifier = Modifier.padding(all = 24.dp) + ) + + isLoading -> CircularProgressIndicator(modifier = Modifier.padding(all = 8.dp)) + + else -> Column(modifier = Modifier.fillMaxWidth()) { + var instances: List by persistList(tag = "settings/sync/piped/instances") + var loadingInstances by rememberSaveable { mutableStateOf(true) } + var selectedInstance: Int? by rememberSaveable { mutableStateOf(null) } + var username by rememberSaveable { mutableStateOf("") } + var password by rememberSaveable { mutableStateOf("") } + var canSelect by rememberSaveable { mutableStateOf(false) } + var instancesUnavailable by rememberSaveable { mutableStateOf(false) } + var customInstance: String? by rememberSaveable { mutableStateOf(null) } + + LaunchedEffect(Unit) { + Piped.getInstances()?.getOrNull()?.let { + selectedInstance = null + instances = it + canSelect = true + } ?: run { instancesUnavailable = true } + loadingInstances = false + } + + BasicText( + text = stringResource(R.string.piped), + style = typography.m.semiBold + ) + + if (customInstance == null) ValueSelectorSettingsEntry( + title = stringResource(R.string.instance), + selectedValue = selectedInstance, + values = instances.indices.toImmutableList(), + onValueSelected = { selectedInstance = it }, + valueText = { idx -> + idx?.let { instances.getOrNull(it)?.name } + ?: if (instancesUnavailable) stringResource(R.string.error_piped_instances_unavailable) + else stringResource(R.string.click_to_select) + }, + isEnabled = !instancesUnavailable && canSelect, + usePadding = false, + trailingContent = if (loadingInstances) { + { CircularProgressIndicator() } + } else null + ) + SwitchSettingsEntry( + title = stringResource(R.string.custom_instance), + text = null, + isChecked = customInstance != null, + onCheckedChange = { customInstance = if (customInstance == null) "" else null }, + usePadding = false + ) + customInstance?.let { instance -> + Spacer(modifier = Modifier.height(8.dp)) + TextField( + value = instance, + onValueChange = { customInstance = it }, + hintText = stringResource(R.string.base_api_url), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), + modifier = Modifier.fillMaxWidth() + ) + } + Spacer(modifier = Modifier.height(8.dp)) + TextField( + value = username, + onValueChange = { username = it }, + hintText = stringResource(R.string.username), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + TextField( + value = password, + onValueChange = { password = it }, + hintText = stringResource(R.string.password), + visualTransformation = PasswordVisualTransformation(), + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(16.dp)) + DialogTextButton( + text = stringResource(R.string.login), + primary = true, + enabled = (customInstance?.isNotBlank() == true || selectedInstance != null) && + username.isNotBlank() && password.isNotBlank(), + onClick = { + (customInstance?.let { + runCatching { + Url(it) + }.getOrNull() ?: runCatching { + Url("https://$it") + }.getOrNull() + } ?: selectedInstance?.let { instances[it].apiBaseUrl })?.let { url -> + coroutineScope.launch { + isLoading = true + val session = Piped.login( + apiBaseUrl = url, + username = username, + password = password + )?.getOrNull().run { + isLoading = false + if (this == null) { + hasError = true + return@launch + } + this + } + transaction { + Database.insert( + PipedSession( + apiBaseUrl = session.apiBaseUrl, + username = username, + token = session.token + ) + ) + } + linkingPiped = false + } + } + }, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + } + } + } + + SettingsCategoryScreen(title = stringResource(R.string.sync)) { + SettingsDescription(text = stringResource(R.string.sync_description)) + + SettingsGroup(title = stringResource(R.string.piped)) { + SettingsEntry( + title = stringResource(R.string.add_account), + text = stringResource(R.string.add_account_description), + onClick = { linkingPiped = true } + ) + SettingsEntry( + title = stringResource(R.string.learn_more), + text = stringResource(R.string.learn_more_description), + onClick = { uriHandler.openUri("https://github.com/TeamPiped/Piped/blob/master/README.md") } + ) + } + SettingsGroup(title = stringResource(R.string.piped_sessions)) { + pipedSessions.forEach { + SettingsEntry( + title = it.username, + text = it.apiBaseUrl.toString(), + onClick = { }, + trailingContent = { + IconButton( + onClick = { transaction { Database.delete(it) } }, + icon = R.drawable.delete, + color = colorPalette.text + ) + } + ) + } + } + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt deleted file mode 100644 index 9d92dc1..0000000 --- a/app/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt +++ /dev/null @@ -1,40 +0,0 @@ -package it.hamy.muza.ui.styling - -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.runtime.saveable.Saver -import androidx.compose.runtime.saveable.SaverScope -import androidx.compose.runtime.staticCompositionLocalOf -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.unit.dp - -data class Appearance( - val colorPalette: ColorPalette, - val typography: Typography, - val thumbnailShape: Shape, -) { - companion object : Saver> { - @Suppress("UNCHECKED_CAST") - override fun restore(value: List): Appearance { - return Appearance( - colorPalette = ColorPalette.restore(value[0] as List), - typography = Typography.restore(value[1] as List), - thumbnailShape = RoundedCornerShape((value[2] as Int).dp) - ) - } - - override fun SaverScope.save(value: Appearance) = - listOf( - with (ColorPalette.Companion) { save(value.colorPalette) }, - with (Typography.Companion) { save(value.typography) }, - when (value.thumbnailShape) { - RoundedCornerShape(2.dp) -> 2 - RoundedCornerShape(4.dp) -> 4 - RoundedCornerShape(8.dp) -> 8 - RoundedCornerShape(16.dp) -> 16 - else -> 0 - } - ) - } -} - -val LocalAppearance = staticCompositionLocalOf { TODO() } diff --git a/app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt deleted file mode 100644 index 40b67d6..0000000 --- a/app/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt +++ /dev/null @@ -1,177 +0,0 @@ -package it.hamy.muza.ui.styling - -import android.graphics.Bitmap -import androidx.compose.runtime.Immutable -import androidx.compose.runtime.saveable.Saver -import androidx.compose.runtime.saveable.SaverScope -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb -import androidx.core.graphics.ColorUtils -import androidx.palette.graphics.Palette -import it.hamy.muza.enums.ColorPaletteMode -import it.hamy.muza.enums.ColorPaletteName - -@Immutable -data class ColorPalette( - val background0: Color, - val background1: Color, - val background2: Color, - val accent: Color, - val onAccent: Color, - val red: Color = Color(0xffbf4040), - val blue: Color = Color(0xff4472cf), - val text: Color, - val textSecondary: Color, - val textDisabled: Color, - val isDark: Boolean -) { - companion object : Saver> { - override fun restore(value: List) = when (val accent = value[0] as Int) { - 0 -> DefaultDarkColorPalette - 1 -> DefaultLightColorPalette - 2 -> PureBlackColorPalette - else -> dynamicColorPaletteOf( - FloatArray(3).apply { ColorUtils.colorToHSL(accent, this) }, - value[1] as Boolean - ) - } - - override fun SaverScope.save(value: ColorPalette) = - listOf( - when { - value === DefaultDarkColorPalette -> 0 - value === DefaultLightColorPalette -> 1 - value === PureBlackColorPalette -> 2 - else -> value.accent.toArgb() - }, - value.isDark - ) - } -} - -val DefaultDarkColorPalette = ColorPalette( - background0 = Color(0xff16171d), - background1 = Color(0xff1f2029), - background2 = Color(0xff2b2d3b), - text = Color(0xffe1e1e2), - textSecondary = Color(0xffa3a4a6), - textDisabled = Color(0xff6f6f73), - accent = Color(0xff5055c0), - onAccent = Color.White, - isDark = true -) - -val DefaultLightColorPalette = ColorPalette( - background0 = Color(0xfffdfdfe), - background1 = Color(0xfff8f8fc), - background2 = Color(0xffeaeaf5), - text = Color(0xff212121), - textSecondary = Color(0xff656566), - textDisabled = Color(0xff9d9d9d), - accent = Color(0xff5055c0), - onAccent = Color.White, - isDark = false -) - -val PureBlackColorPalette = DefaultDarkColorPalette.copy( - background0 = Color.Black, - background1 = Color.Black, - background2 = Color.Black -) - -fun colorPaletteOf( - colorPaletteName: ColorPaletteName, - colorPaletteMode: ColorPaletteMode, - isSystemInDarkMode: Boolean -): ColorPalette { - return when (colorPaletteName) { - ColorPaletteName.Default, ColorPaletteName.Dynamic -> when (colorPaletteMode) { - ColorPaletteMode.Light -> DefaultLightColorPalette - ColorPaletteMode.Dark -> DefaultDarkColorPalette - ColorPaletteMode.System -> when (isSystemInDarkMode) { - true -> DefaultDarkColorPalette - false -> DefaultLightColorPalette - } - } - ColorPaletteName.PureBlack -> PureBlackColorPalette - } -} - -fun dynamicColorPaletteOf(bitmap: Bitmap, isDark: Boolean): ColorPalette? { - val palette = Palette - .from(bitmap) - .maximumColorCount(8) - .addFilter(if (isDark) ({ _, hsl -> hsl[0] !in 36f..100f }) else null) - .generate() - - val hsl = if (isDark) { - palette.dominantSwatch ?: Palette - .from(bitmap) - .maximumColorCount(8) - .generate() - .dominantSwatch - } else { - palette.dominantSwatch - }?.hsl ?: return null - - return if (hsl[1] < 0.08) { - val newHsl = palette.swatches - .map(Palette.Swatch::getHsl) - .sortedByDescending(FloatArray::component2) - .find { it[1] != 0f } - ?: hsl - - dynamicColorPaletteOf(newHsl, isDark) - } else { - dynamicColorPaletteOf(hsl, isDark) - } -} - -fun dynamicColorPaletteOf(hsl: FloatArray, isDark: Boolean): ColorPalette { - return colorPaletteOf(ColorPaletteName.Dynamic, if (isDark) ColorPaletteMode.Dark else ColorPaletteMode.Light, false).copy( - background0 = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.1f), if (isDark) 0.10f else 0.925f), - background1 = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.3f), if (isDark) 0.15f else 0.90f), - background2 = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.4f), if (isDark) 0.2f else 0.85f), - accent = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.5f), 0.5f), - text = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.02f), if (isDark) 0.88f else 0.12f), - textSecondary = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.1f), if (isDark) 0.65f else 0.40f), - textDisabled = Color.hsl(hsl[0], hsl[1].coerceAtMost(0.2f), if (isDark) 0.40f else 0.65f), - ) -} - -inline val ColorPalette.collapsedPlayerProgressBar: Color - get() = if (this === DefaultDarkColorPalette || this === DefaultLightColorPalette || this === PureBlackColorPalette) { - text - } else { - accent - } - -inline val ColorPalette.favoritesIcon: Color - get() = if (this === DefaultDarkColorPalette || this === DefaultLightColorPalette || this === PureBlackColorPalette) { - red - } else { - accent - } - -inline val ColorPalette.shimmer: Color - get() = if (this === DefaultDarkColorPalette || this === DefaultLightColorPalette || this === PureBlackColorPalette) { - Color(0xff838383) - } else { - accent - } - -inline val ColorPalette.primaryButton: Color - get() = if (this === PureBlackColorPalette) { - Color(0xFF272727) - } else { - background2 - } - -inline val ColorPalette.overlay: Color - get() = PureBlackColorPalette.background0.copy(alpha = 0.75f) - -inline val ColorPalette.onOverlay: Color - get() = PureBlackColorPalette.text - -inline val ColorPalette.onOverlayShimmer: Color - get() = PureBlackColorPalette.shimmer diff --git a/app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt b/app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt deleted file mode 100644 index 3186430..0000000 --- a/app/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt +++ /dev/null @@ -1,38 +0,0 @@ -package it.hamy.muza.ui.styling - -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp - -@Suppress("ClassName") -object Dimensions { - val itemsVerticalPadding = 8.dp - - val navigationRailWidth = 64.dp - val navigationRailWidthLandscape = 128.dp - val navigationRailIconOffset = 6.dp - val headerHeight = 140.dp - - object thumbnails { - val album = 128.dp - val artist = 192.dp - val song = 54.dp - val playlist = album - - object player { - val song: Dp - @Composable - get() = with(LocalConfiguration.current) { - minOf(screenHeightDp, screenWidthDp) - }.dp - } - } - - val collapsedPlayer = 64.dp -} - -inline val Dp.px: Int - @Composable - inline get() = with(LocalDensity.current) { roundToPx() } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/CacheState.kt b/app/src/main/kotlin/it/hamy/muza/utils/CacheState.kt new file mode 100644 index 0000000..405fbcc --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/utils/CacheState.kt @@ -0,0 +1,73 @@ +package it.hamy.muza.utils + +import androidx.annotation.OptIn +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.media3.common.MediaItem +import androidx.media3.common.util.UnstableApi +import it.hamy.muza.Database +import it.hamy.muza.LocalPlayerServiceBinder +import it.hamy.muza.R +import it.hamy.muza.models.Format +import it.hamy.muza.service.PrecacheService +import it.hamy.muza.service.downloadState +import it.hamy.muza.ui.components.themed.HeaderIconButton +import it.hamy.muza.ui.styling.LocalAppearance +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.distinctUntilChanged + +@Composable +fun PlaylistDownloadIcon( + songs: ImmutableList, + modifier: Modifier = Modifier +) { + val context = LocalContext.current + val (colorPalette) = LocalAppearance.current + + val isDownloading by downloadState.collectAsState() + + if ( + !songs.all { + isCached( + mediaId = it.mediaId, + key = isDownloading + ) + } + ) HeaderIconButton( + icon = R.drawable.download, + color = colorPalette.text, + onClick = { + songs.forEach { + PrecacheService.scheduleCache(context.applicationContext, it) + } + }, + modifier = modifier + ) +} + +@OptIn(UnstableApi::class) +@Composable +fun isCached( + mediaId: String, + key: Any? = Unit +): Boolean { + val cache = LocalPlayerServiceBinder.current?.cache ?: return false + var format: Format? by remember { mutableStateOf(null) } + + LaunchedEffect(mediaId, key) { + Database.format(mediaId).distinctUntilChanged().collect { format = it } + } + + return remember(key) { + format?.contentLength?.let { len -> + cache.isCached(mediaId, 0, len) + } ?: false + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/ConditionalCacheDataSourceFactory.kt b/app/src/main/kotlin/it/hamy/muza/utils/ConditionalCacheDataSourceFactory.kt new file mode 100644 index 0000000..6f0f7a0 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/utils/ConditionalCacheDataSourceFactory.kt @@ -0,0 +1,49 @@ +package it.hamy.muza.utils + +import androidx.annotation.OptIn +import androidx.media3.common.util.UnstableApi +import androidx.media3.datasource.DataSource +import androidx.media3.datasource.DataSpec +import androidx.media3.datasource.TransferListener +import androidx.media3.datasource.cache.CacheDataSource + +@OptIn(UnstableApi::class) +class ConditionalCacheDataSourceFactory( + private val cacheDataSourceFactory: CacheDataSource.Factory, + private val upstreamDataSourceFactory: DataSource.Factory, + private val shouldCache: (DataSpec) -> Boolean +) : DataSource.Factory { + init { + cacheDataSourceFactory.setUpstreamDataSourceFactory(upstreamDataSourceFactory) + } + + override fun createDataSource() = object : DataSource { + private lateinit var selectedFactory: DataSource.Factory + private val transferListeners = mutableListOf() + + private val source by lazy { + selectedFactory.createDataSource().apply { + transferListeners.forEach { addTransferListener(it) } + transferListeners.clear() + } + } + + override fun read(buffer: ByteArray, offset: Int, length: Int) = + source.read(buffer, offset, length) + + override fun addTransferListener(transferListener: TransferListener) { + if (::selectedFactory.isInitialized) source.addTransferListener(transferListener) + else transferListeners += transferListener + } + + override fun open(dataSpec: DataSpec): Long { + selectedFactory = + if (shouldCache(dataSpec)) cacheDataSourceFactory else upstreamDataSourceFactory + + return source.open(dataSpec) + } + + override fun getUri() = source.uri + override fun close() = source.close() + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt b/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt index 50e5dfd..e006ed5 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Configuration.kt @@ -1,11 +1,44 @@ package it.hamy.muza.utils import android.content.res.Configuration +import android.os.Build import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalConfiguration val isLandscape @Composable @ReadOnlyComposable get() = LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE + +inline val isAtLeastAndroid6 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + +inline val isAtLeastAndroid8 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O + +inline val isAtLeastAndroid10 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q + +inline val isAtLeastAndroid11 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R + +inline val isAtLeastAndroid12 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + +inline val isAtLeastAndroid13 + get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + +@Composable +fun isCompositionLaunched(): Boolean { + var isLaunched by remember { mutableStateOf(false) } + LaunchedEffect(Unit) { + isLaunched = true + } + return isLaunched +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/Context.kt b/app/src/main/kotlin/it/hamy/muza/utils/Context.kt index a1356f2..f79c52c 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/Context.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Context.kt @@ -2,39 +2,88 @@ package it.hamy.muza.utils import android.app.Activity import android.app.PendingIntent +import android.content.ActivityNotFoundException import android.content.BroadcastReceiver import android.content.Context +import android.content.ContextWrapper import android.content.Intent +import android.content.pm.PackageManager +import android.database.Cursor +import android.net.Uri import android.os.PowerManager import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.core.content.getSystemService +import it.hamy.muza.BuildConfig -inline fun Context.intent(): Intent = - Intent(this@Context, T::class.java) +inline fun Context.intent(): Intent = Intent(this@Context, T::class.java) -inline fun Context.broadCastPendingIntent( +inline fun Context.broadcastPendingIntent( requestCode: Int = 0, - flags: Int = if (isAtLeastAndroid6) PendingIntent.FLAG_IMMUTABLE else 0, -): PendingIntent = - PendingIntent.getBroadcast(this, requestCode, intent(), flags) + flags: Int = if (isAtLeastAndroid6) PendingIntent.FLAG_IMMUTABLE else 0 +): PendingIntent = PendingIntent.getBroadcast(this, requestCode, intent(), flags) inline fun Context.activityPendingIntent( requestCode: Int = 0, flags: Int = 0, - block: Intent.() -> Unit = {}, -): PendingIntent = - PendingIntent.getActivity( - this, - requestCode, - intent().apply(block), - (if (isAtLeastAndroid6) PendingIntent.FLAG_IMMUTABLE else 0) or flags - ) + block: Intent.() -> Unit = {} +): PendingIntent = PendingIntent.getActivity( + this, + requestCode, + intent().apply(block), + (if (isAtLeastAndroid6) PendingIntent.FLAG_IMMUTABLE else 0) or flags +) -val Context.isIgnoringBatteryOptimizations: Boolean - get() = if (isAtLeastAndroid6) { - getSystemService()?.isIgnoringBatteryOptimizations(packageName) ?: true - } else { - true - } +val Context.isIgnoringBatteryOptimizations + get() = !isAtLeastAndroid6 || + getSystemService()?.isIgnoringBatteryOptimizations(packageName) ?: true fun Context.toast(message: String) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + +fun launchYouTubeMusic( + context: Context, + endpoint: String, + tryWithoutBrowser: Boolean = true +): Boolean { + return try { + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse("https://music.youtube.com/${endpoint.dropWhile { it == '/' }}") + ).apply { + if (tryWithoutBrowser && isAtLeastAndroid11) { + flags = Intent.FLAG_ACTIVITY_REQUIRE_NON_BROWSER + } + } + intent.`package` = + context.applicationContext.packageManager.queryIntentActivities(intent, 0) + .firstOrNull { + it?.activityInfo?.packageName != null && + BuildConfig.APPLICATION_ID !in it.activityInfo.packageName + }?.activityInfo?.packageName + ?: return false + context.startActivity(intent) + true + } catch (e: ActivityNotFoundException) { + if (tryWithoutBrowser) launchYouTubeMusic( + context = context, + endpoint = endpoint, + tryWithoutBrowser = false + ) else false + } +} + +fun Context.findActivity(): Activity { + var context = this + while (context is ContextWrapper) { + if (context is Activity) return context + context = context.baseContext + } + error("Should be called in the context of an Activity") +} + +fun Context.hasPermission(permission: String) = ContextCompat.checkSelfPermission( + applicationContext, + permission +) == PackageManager.PERMISSION_GRANTED + +operator fun Cursor.get(column: String): Int = getColumnIndexOrThrow(column) diff --git a/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt b/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt index 440cdf8..34266b1 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/DrawScope.kt @@ -1,12 +1,19 @@ package it.hamy.muza.utils import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.* +import androidx.compose.ui.graphics.BlendMode +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.Paint +import androidx.compose.ui.graphics.PaintingStyle +import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.graphics.nativeCanvas +import androidx.compose.ui.graphics.toArgb fun DrawScope.drawCircle( color: Color, - shadow: Shadow, + shadow: Shadow = Shadow.None, radius: Float = size.minDimension / 2.0f, center: Offset = this.center, alpha: Float = 1.0f, @@ -14,17 +21,17 @@ fun DrawScope.drawCircle( colorFilter: ColorFilter? = null, blendMode: BlendMode = DrawScope.DefaultBlendMode ) = drawContext.canvas.nativeCanvas.drawCircle( - center.x, - center.y, - radius, - Paint().also { + /* cx = */ center.x, + /* cy = */ center.y, + /* radius = */ radius, + /* paint = */ Paint().also { it.color = color it.alpha = alpha it.blendMode = blendMode it.colorFilter = colorFilter it.style = style }.asFrameworkPaint().also { - it.setShadowLayer( + if (shadow != Shadow.None) it.setShadowLayer( shadow.blurRadius, shadow.offset.x, shadow.offset.y, diff --git a/app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt b/app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt deleted file mode 100644 index 583399f..0000000 --- a/app/src/main/kotlin/it/hamy/muza/utils/FadingEdge.kt +++ /dev/null @@ -1,24 +0,0 @@ -package it.hamy.muza.utils - -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.drawWithContent -import androidx.compose.ui.graphics.BlendMode -import androidx.compose.ui.graphics.Brush -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.graphicsLayer - -fun Modifier.verticalFadingEdge() = - graphicsLayer(alpha = 0.99f) - .drawWithContent { - drawContent() - drawRect( - brush = Brush.verticalGradient( - listOf( - Color.Transparent, - Color.Black, Color.Black, Color.Black, - Color.Transparent - ) - ), - blendMode = BlendMode.DstIn - ) - } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt b/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt index 17e43c9..3382dfb 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/InvincibleService.kt @@ -9,6 +9,7 @@ import android.content.IntentFilter import android.os.Binder import android.os.Handler import android.os.Looper +import androidx.core.content.ContextCompat // https://stackoverflow.com/q/53502244/16885569 // I found four ways to make the system not kill the stopped foreground service: e.g. when @@ -42,9 +43,8 @@ abstract class InvincibleService : Service() { } override fun onUnbind(intent: Intent?): Boolean { - if (isInvincibilityEnabled && isAllowedToStartForegroundServices) { + if (isInvincibilityEnabled && isAllowedToStartForegroundServices) invincibility = Invincibility() - } return true } @@ -55,11 +55,7 @@ abstract class InvincibleService : Service() { } protected fun makeInvincible(isInvincible: Boolean = true) { - if (isInvincible) { - invincibility?.start() - } else { - invincibility?.stop() - } + if (isInvincible) invincibility?.start() else invincibility?.stop() } protected abstract fun shouldBeInvincible(): Boolean @@ -82,33 +78,41 @@ abstract class InvincibleService : Service() { @Synchronized fun start() { - if (!isStarted) { - isStarted = true - handler.postDelayed(this, intervalMs) - registerReceiver(this, IntentFilter().apply { - addAction(Intent.ACTION_SCREEN_ON) - addAction(Intent.ACTION_SCREEN_OFF) - }) + if (isStarted) return + + isStarted = true + handler.postDelayed(this, intervalMs) + + val filter = IntentFilter().apply { + addAction(Intent.ACTION_SCREEN_ON) + addAction(Intent.ACTION_SCREEN_OFF) } + ContextCompat.registerReceiver( + /* context = */ this@InvincibleService, + /* receiver = */ this, + /* filter = */ filter, + /* flags = */ ContextCompat.RECEIVER_NOT_EXPORTED + ) } @Synchronized fun stop() { - if (isStarted) { - handler.removeCallbacks(this) - unregisterReceiver(this) - isStarted = false - } + if (!isStarted) return + + handler.removeCallbacks(this) + unregisterReceiver(this) + isStarted = false } override fun run() { - if (shouldBeInvincible() && isAllowedToStartForegroundServices) { - notification()?.let { notification -> - startForeground(notificationId, notification) - stopForeground(false) - handler.postDelayed(this, intervalMs) - } - } + if (!shouldBeInvincible() || !isAllowedToStartForegroundServices) return + val notification = notification() ?: return + + startForeground(notificationId, notification) + @Suppress("DEPRECATION") + stopForeground(false) + + handler.postDelayed(this, intervalMs) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/Player.kt b/app/src/main/kotlin/it/hamy/muza/utils/Player.kt index 429d916..a1c356f 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/Player.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Player.kt @@ -6,7 +6,10 @@ import androidx.media3.common.Player import androidx.media3.common.Timeline val Player.currentWindow: Timeline.Window? - get() = if (mediaItemCount == 0) null else currentTimeline.getWindow(currentMediaItemIndex, Timeline.Window()) + get() = if (mediaItemCount == 0) null else currentTimeline.getWindow( + currentMediaItemIndex, + Timeline.Window() + ) val Timeline.mediaItems: List get() = List(windowCount) { @@ -24,16 +27,21 @@ val Player.shouldBePlaying: Boolean fun Player.seamlessPlay(mediaItem: MediaItem) { if (mediaItem.mediaId == currentMediaItem?.mediaId) { if (currentMediaItemIndex > 0) removeMediaItems(0, currentMediaItemIndex) - if (currentMediaItemIndex < mediaItemCount - 1) removeMediaItems(currentMediaItemIndex + 1, mediaItemCount) - } else { - forcePlay(mediaItem) - } + if (currentMediaItemIndex < mediaItemCount - 1) removeMediaItems( + currentMediaItemIndex + 1, + mediaItemCount + ) + } else forcePlay(mediaItem) } fun Player.shuffleQueue() { - val mediaItems = currentTimeline.mediaItems.toMutableList().apply { removeAt(currentMediaItemIndex) } + val mediaItems = currentTimeline.mediaItems.toMutableList() + .apply { removeAt(currentMediaItemIndex) } if (currentMediaItemIndex > 0) removeMediaItems(0, currentMediaItemIndex) - if (currentMediaItemIndex < mediaItemCount - 1) removeMediaItems(currentMediaItemIndex + 1, mediaItemCount) + if (currentMediaItemIndex < mediaItemCount - 1) removeMediaItems( + currentMediaItemIndex + 1, + mediaItemCount + ) addMediaItems(mediaItems.shuffled()) } @@ -43,22 +51,21 @@ fun Player.forcePlay(mediaItem: MediaItem) { prepare() } -fun Player.forcePlayAtIndex(mediaItems: List, mediaItemIndex: Int) { - if (mediaItems.isEmpty()) return +fun Player.forcePlayAtIndex(items: List, index: Int) { + if (items.isEmpty()) return - setMediaItems(mediaItems, mediaItemIndex, C.TIME_UNSET) + setMediaItems(items, index, C.TIME_UNSET) playWhenReady = true prepare() } -fun Player.forcePlayFromBeginning(mediaItems: List) = - forcePlayAtIndex(mediaItems, 0) +fun Player.forcePlayFromBeginning(items: List) = + forcePlayAtIndex(items, 0) fun Player.forceSeekToPrevious() { - if (hasPreviousMediaItem() || currentPosition > maxSeekToPreviousPosition) { - seekToPrevious() - } else if (mediaItemCount > 0) { - seekTo(mediaItemCount - 1, C.TIME_UNSET) + when { + hasPreviousMediaItem() || currentPosition > maxSeekToPreviousPosition -> seekToPrevious() + mediaItemCount > 0 -> seekTo(mediaItemCount - 1, C.TIME_UNSET) } } @@ -66,34 +73,29 @@ fun Player.forceSeekToNext() = if (hasNextMediaItem()) seekToNext() else seekTo(0, C.TIME_UNSET) fun Player.addNext(mediaItem: MediaItem) { - if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) { - forcePlay(mediaItem) - } else { - addMediaItem(currentMediaItemIndex + 1, mediaItem) - } + if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) forcePlay( + mediaItem + ) + else addMediaItem(currentMediaItemIndex + 1, mediaItem) } fun Player.enqueue(mediaItem: MediaItem) { - if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) { - forcePlay(mediaItem) - } else { - addMediaItem(mediaItemCount, mediaItem) - } + if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) forcePlay( + mediaItem + ) + else addMediaItem(mediaItemCount, mediaItem) } fun Player.enqueue(mediaItems: List) { - if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) { - forcePlayFromBeginning(mediaItems) - } else { - addMediaItems(mediaItemCount, mediaItems) - } + if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) forcePlayFromBeginning( + mediaItems + ) + else addMediaItems(mediaItemCount, mediaItems) } fun Player.findNextMediaItemById(mediaId: String): MediaItem? { for (i in currentMediaItemIndex until mediaItemCount) { - if (getMediaItemAt(i).mediaId == mediaId) { - return getMediaItemAt(i) - } + if (getMediaItemAt(i).mediaId == mediaId) return getMediaItemAt(i) } return null } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt b/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt index 1880b8f..6e4df39 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/PlayerState.kt @@ -24,9 +24,7 @@ inline fun Player.DisposableListener(crossinline listenerProvider: () -> Player. @Composable fun Player.positionAndDurationState(): State> { - val state = remember { - mutableStateOf(currentPosition to duration) - } + val state = remember { mutableStateOf(currentPosition to duration) } LaunchedEffect(this) { var isSeeking = false @@ -59,9 +57,7 @@ fun Player.positionAndDurationState(): State> { val pollJob = launch { while (isActive) { delay(500) - if (!isSeeking) { - state.value = currentPosition to duration - } + if (!isSeeking) state.value = currentPosition to duration } } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt b/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt index dac9c69..5103d4c 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/RingBuffer.kt @@ -5,7 +5,6 @@ class RingBuffer(val size: Int, init: (index: Int) -> T) { private var index = 0 - fun getOrNull(index: Int): T? = list.getOrNull(index) - - fun append(element: T) = list.set(index++ % size, element) + operator fun get(index: Int) = list.getOrNull(index) + operator fun plusAssign(element: T) { list[index++ % size] = element } } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt b/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt index 5a404ba..f13fc28 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/ScrollingInfo.kt @@ -6,88 +6,74 @@ import androidx.compose.foundation.lazy.grid.LazyGridState import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue data class ScrollingInfo( val isScrollingDown: Boolean = false, val isFar: Boolean = false -) { - fun and(condition: Boolean) = -// copy(isScrollingDown = isScrollingDown && condition, isFar = isFar && condition) - if (condition) this else copy(isScrollingDown = !isScrollingDown, isFar = !isFar) -} +) @Composable fun LazyListState.scrollingInfo(): ScrollingInfo { - var previousIndex by remember(this) { - mutableStateOf(firstVisibleItemIndex) - } - - var previousScrollOffset by remember(this) { - mutableStateOf(firstVisibleItemScrollOffset) - } + var previousIndex by remember(this) { mutableIntStateOf(firstVisibleItemIndex) } + var previousScrollOffset by remember(this) { mutableIntStateOf(firstVisibleItemScrollOffset) } return remember(this) { derivedStateOf { - val isScrollingDown = if (previousIndex == firstVisibleItemIndex) { - firstVisibleItemScrollOffset > previousScrollOffset - } else { - firstVisibleItemIndex > previousIndex - } - + val isScrollingDown = + if (previousIndex == firstVisibleItemIndex) firstVisibleItemScrollOffset > previousScrollOffset + else firstVisibleItemIndex > previousIndex val isFar = firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size previousIndex = firstVisibleItemIndex previousScrollOffset = firstVisibleItemScrollOffset - ScrollingInfo(isScrollingDown, isFar) + ScrollingInfo( + isScrollingDown = isScrollingDown, + isFar = isFar + ) } }.value } @Composable fun LazyGridState.scrollingInfo(): ScrollingInfo { - var previousIndex by remember(this) { - mutableStateOf(firstVisibleItemIndex) - } - - var previousScrollOffset by remember(this) { - mutableStateOf(firstVisibleItemScrollOffset) - } + var previousIndex by remember(this) { mutableIntStateOf(firstVisibleItemIndex) } + var previousScrollOffset by remember(this) { mutableIntStateOf(firstVisibleItemScrollOffset) } return remember(this) { derivedStateOf { - val isScrollingDown = if (previousIndex == firstVisibleItemIndex) { - firstVisibleItemScrollOffset > previousScrollOffset - } else { - firstVisibleItemIndex > previousIndex - } - + val isScrollingDown = + if (previousIndex == firstVisibleItemIndex) firstVisibleItemScrollOffset > previousScrollOffset + else firstVisibleItemIndex > previousIndex val isFar = firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size previousIndex = firstVisibleItemIndex previousScrollOffset = firstVisibleItemScrollOffset - ScrollingInfo(isScrollingDown, isFar) + ScrollingInfo( + isScrollingDown = isScrollingDown, + isFar = isFar + ) } }.value } @Composable fun ScrollState.scrollingInfo(): ScrollingInfo { - var previousValue by remember(this) { - mutableStateOf(value) - } + var previousValue by remember(this) { mutableIntStateOf(value) } return remember(this) { derivedStateOf { val isScrollingDown = value > previousValue - previousValue = value - ScrollingInfo(isScrollingDown, false) + ScrollingInfo( + isScrollingDown = isScrollingDown, + isFar = false + ) } }.value } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt b/app/src/main/kotlin/it/hamy/muza/utils/SmoothScroll.kt similarity index 80% rename from app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt rename to app/src/main/kotlin/it/hamy/muza/utils/SmoothScroll.kt index 6b4fb16..3bc5346 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/SmoothScrollToTop.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/SmoothScroll.kt @@ -1,18 +1,21 @@ package it.hamy.muza.utils +import androidx.compose.foundation.ScrollState import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.LazyGridState suspend fun LazyGridState.smoothScrollToTop() { - if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) { + if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) scrollToItem(layoutInfo.visibleItemsInfo.size) - } animateScrollToItem(0) } suspend fun LazyListState.smoothScrollToTop() { - if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) { + if (firstVisibleItemIndex > layoutInfo.visibleItemsInfo.size) scrollToItem(layoutInfo.visibleItemsInfo.size) - } animateScrollToItem(0) } + +suspend fun ScrollState.smoothScrollToBottom() { + animateScrollTo(maxValue) +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt b/app/src/main/kotlin/it/hamy/muza/utils/SnapLayoutInfoProvider.kt similarity index 57% rename from app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt rename to app/src/main/kotlin/it/hamy/muza/utils/SnapLayoutInfoProvider.kt index ef45f39..97d4c66 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/LazyGridSnapLayoutInfoProvider.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/SnapLayoutInfoProvider.kt @@ -6,11 +6,46 @@ import androidx.compose.foundation.gestures.snapping.SnapLayoutInfoProvider import androidx.compose.foundation.lazy.grid.LazyGridItemInfo import androidx.compose.foundation.lazy.grid.LazyGridLayoutInfo import androidx.compose.foundation.lazy.grid.LazyGridState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Density import androidx.compose.ui.util.fastForEach -import androidx.compose.ui.util.fastSumBy -fun Density.calculateDistanceToDesiredSnapPosition( +private val LazyGridLayoutInfo.singleAxisViewportSize: Int + get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width + +context(Density) +@OptIn(ExperimentalFoundationApi::class) +private fun SnapLayoutInfoProvider( + lazyGridState: LazyGridState, + positionInLayout: Density.(layoutSize: Float, itemSize: Float) -> Float = + { layoutSize, itemSize -> (layoutSize / 2f - itemSize / 2f) } +): SnapLayoutInfoProvider = object : SnapLayoutInfoProvider { + private val layoutInfo: LazyGridLayoutInfo + get() = lazyGridState.layoutInfo + + // Single page snapping is the default + override fun calculateApproachOffset(initialVelocity: Float) = 0f + + // ignoring the velocity for now since there is no animation spec in this provider + override fun calculateSnappingOffset(currentVelocity: Float): Float { + var lowerBoundOffset = Float.NEGATIVE_INFINITY + var upperBoundOffset = Float.POSITIVE_INFINITY + + layoutInfo.visibleItemsInfo.fastForEach { item -> + val offset = calculateDistanceToDesiredSnapPosition(layoutInfo, item, positionInLayout) + // Find item that is closest to the center + if (offset <= 0 && offset > lowerBoundOffset) lowerBoundOffset = offset + // Find item that is closest to center, but after it + if (offset >= 0 && offset < upperBoundOffset) upperBoundOffset = offset + } + + return if ((lowerBoundOffset * -1f) > upperBoundOffset) upperBoundOffset else lowerBoundOffset + } +} + +private fun Density.calculateDistanceToDesiredSnapPosition( layoutInfo: LazyGridLayoutInfo, item: LazyGridItemInfo, positionInLayout: Density.(layoutSize: Float, itemSize: Float) -> Float @@ -24,49 +59,18 @@ fun Density.calculateDistanceToDesiredSnapPosition( return itemCurrentPosition - desiredDistance } -private val LazyGridLayoutInfo.singleAxisViewportSize: Int - get() = if (orientation == Orientation.Vertical) viewportSize.height else viewportSize.width - -@ExperimentalFoundationApi -fun SnapLayoutInfoProvider( +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun rememberSnapLayoutInfoProvider( lazyGridState: LazyGridState, positionInLayout: Density.(layoutSize: Float, itemSize: Float) -> Float = { layoutSize, itemSize -> (layoutSize / 2f - itemSize / 2f) } -): SnapLayoutInfoProvider = object : SnapLayoutInfoProvider { +): SnapLayoutInfoProvider { + val density = LocalDensity.current - private val layoutInfo: LazyGridLayoutInfo - get() = lazyGridState.layoutInfo - - // Single page snapping is the default - override fun Density.calculateApproachOffset(initialVelocity: Float): Float = 0f - - override fun Density.calculateSnappingOffsetBounds(): ClosedFloatingPointRange { - var lowerBoundOffset = Float.NEGATIVE_INFINITY - var upperBoundOffset = Float.POSITIVE_INFINITY - - layoutInfo.visibleItemsInfo.fastForEach { item -> - val offset = - calculateDistanceToDesiredSnapPosition(layoutInfo, item, positionInLayout) - - // Find item that is closest to the center - if (offset <= 0 && offset > lowerBoundOffset) { - lowerBoundOffset = offset - } - - // Find item that is closest to center, but after it - if (offset >= 0 && offset < upperBoundOffset) { - upperBoundOffset = offset - } - } - - return lowerBoundOffset.rangeTo(upperBoundOffset) - } - - override fun Density.snapStepSize(): Float = with(layoutInfo) { - if (visibleItemsInfo.isNotEmpty()) { - visibleItemsInfo.fastSumBy { it.size.width } / visibleItemsInfo.size.toFloat() - } else { - 0f + return remember(lazyGridState, density) { + with(density) { + SnapLayoutInfoProvider(lazyGridState, positionInLayout) } } } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/StateFlowSaver.kt b/app/src/main/kotlin/it/hamy/muza/utils/StateFlowSaver.kt new file mode 100644 index 0000000..79f8ab4 --- /dev/null +++ b/app/src/main/kotlin/it/hamy/muza/utils/StateFlowSaver.kt @@ -0,0 +1,18 @@ +package it.hamy.muza.utils + +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.SaverScope +import kotlinx.coroutines.flow.MutableStateFlow + +fun stateFlowSaver() = stateFlowSaverOf( + from = { it }, + to = { it } +) + +inline fun stateFlowSaverOf( + crossinline from: (Saveable) -> Type, + crossinline to: (Type) -> Saveable +) = object : Saver, Saveable> { + override fun restore(value: Saveable) = MutableStateFlow(from(value)) + override fun SaverScope.save(value: MutableStateFlow) = to(value.value) +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt b/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt index 1ed8554..c2fd405 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/SynchronizedLyrics.kt @@ -1,18 +1,21 @@ package it.hamy.muza.utils import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.setValue -class SynchronizedLyrics(val sentences: List>, private val positionProvider: () -> Long) { - var index by mutableStateOf(currentIndex) +class SynchronizedLyrics( + val sentences: Map, + private val positionProvider: () -> Long +) { + var index by mutableIntStateOf(currentIndex) private set private val currentIndex: Int get() { var index = -1 - for (item in sentences) { - if (item.first >= positionProvider()) break + for ((key) in sentences) { + if (key >= positionProvider()) break index++ } return if (index == -1) 0 else index @@ -23,8 +26,6 @@ class SynchronizedLyrics(val sentences: List>, private val po return if (newIndex != index) { index = newIndex true - } else { - false - } + } else false } } diff --git a/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt b/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt index 95abb15..7e56ece 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/TextStyle.kt @@ -10,24 +10,14 @@ import androidx.compose.ui.text.style.TextAlign import it.hamy.muza.ui.styling.LocalAppearance fun TextStyle.style(style: FontStyle) = copy(fontStyle = style) - fun TextStyle.weight(weight: FontWeight) = copy(fontWeight = weight) - fun TextStyle.align(align: TextAlign) = copy(textAlign = align) - fun TextStyle.color(color: Color) = copy(color = color) -inline val TextStyle.medium: TextStyle - get() = weight(FontWeight.Medium) - -inline val TextStyle.semiBold: TextStyle - get() = weight(FontWeight.SemiBold) - -inline val TextStyle.bold: TextStyle - get() = weight(FontWeight.Bold) - -inline val TextStyle.center: TextStyle - get() = align(TextAlign.Center) +inline val TextStyle.medium get() = weight(FontWeight.Medium) +inline val TextStyle.semiBold get() = weight(FontWeight.SemiBold) +inline val TextStyle.bold get() = weight(FontWeight.Bold) +inline val TextStyle.center get() = align(TextAlign.Center) inline val TextStyle.secondary: TextStyle @Composable diff --git a/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt b/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt index ce5d4bc..b3bbf69 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/TimerJob.kt @@ -14,22 +14,18 @@ interface TimerJob { } fun CoroutineScope.timer(delayMillis: Long, onCompletion: () -> Unit): TimerJob { + val end = System.currentTimeMillis() + delayMillis val millisLeft = MutableStateFlow(delayMillis) val job = launch { while (isActive && millisLeft.value != null) { delay(1000) - millisLeft.emit(millisLeft.value?.minus(1000)?.takeIf { it > 0 }) - } - } - val disposableHandle = job.invokeOnCompletion { - if (it == null) { - onCompletion() + millisLeft.emit((end - System.currentTimeMillis()).takeIf { it > 0 }) } } + val disposableHandle = job.invokeOnCompletion { if (it == null) onCompletion() } return object : TimerJob { - override val millisLeft: StateFlow - get() = millisLeft.asStateFlow() + override val millisLeft get() = millisLeft.asStateFlow() override fun cancel() { millisLeft.value = null diff --git a/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt b/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt index cf5beef..50136d6 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/Utils.kt @@ -1,17 +1,27 @@ +@file:OptIn(UnstableApi::class) + package it.hamy.muza.utils +import android.content.ContentUris import android.net.Uri -import android.os.Build +import android.provider.MediaStore import android.text.format.DateUtils +import androidx.annotation.OptIn import androidx.core.net.toUri import androidx.core.os.bundleOf import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata +import androidx.media3.common.util.UnstableApi import it.hamy.innertube.Innertube import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.requests.playlistPage -import it.hamy.innertube.utils.plus +import it.hamy.piped.models.Playlist import it.hamy.muza.models.Song +import it.hamy.muza.preferences.AppearancePreferences +import it.hamy.muza.service.LOCAL_KEY_PREFIX +import it.hamy.muza.service.isLocal +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.onEach val Innertube.SongItem.asMediaItem: MediaItem get() = MediaItem.Builder() @@ -21,15 +31,16 @@ val Innertube.SongItem.asMediaItem: MediaItem .setMediaMetadata( MediaMetadata.Builder() .setTitle(info?.name) - .setArtist(authors?.joinToString("") { it.name ?: "" }) + .setArtist(authors?.joinToString("") { it.name.orEmpty() }) .setAlbumTitle(album?.name) .setArtworkUri(thumbnail?.url?.toUri()) .setExtras( bundleOf( "albumId" to album?.endpoint?.browseId, "durationText" to durationText, - "artistNames" to authors?.filter { it.endpoint != null }?.mapNotNull { it.name }, - "artistIds" to authors?.mapNotNull { it.endpoint?.browseId }, + "artistNames" to authors?.filter { it.endpoint != null } + ?.mapNotNull { it.name }, + "artistIds" to authors?.mapNotNull { it.endpoint?.browseId } ) ) .build() @@ -44,19 +55,48 @@ val Innertube.VideoItem.asMediaItem: MediaItem .setMediaMetadata( MediaMetadata.Builder() .setTitle(info?.name) - .setArtist(authors?.joinToString("") { it.name ?: "" }) + .setArtist(authors?.joinToString("") { it.name.orEmpty() }) .setArtworkUri(thumbnail?.url?.toUri()) .setExtras( bundleOf( "durationText" to durationText, - "artistNames" to if (isOfficialMusicVideo) authors?.filter { it.endpoint != null }?.mapNotNull { it.name } else null, - "artistIds" to if (isOfficialMusicVideo) authors?.mapNotNull { it.endpoint?.browseId } else null, + "artistNames" to if (isOfficialMusicVideo) authors?.filter { it.endpoint != null } + ?.mapNotNull { it.name } else null, + "artistIds" to if (isOfficialMusicVideo) authors?.mapNotNull { it.endpoint?.browseId } + else null ) ) .build() ) .build() +val Playlist.Video.asMediaItem: MediaItem? + get() { + val key = id ?: return null + + return MediaItem.Builder() + .setMediaId(key) + .setUri(key) + .setCustomCacheKey(key) + .setMediaMetadata( + MediaMetadata.Builder() + .setTitle(title) + .setArtist(uploaderName) + .setArtworkUri(Uri.parse(thumbnailUrl.toString())) + .setExtras( + bundleOf( + "durationText" to duration.toComponents { minutes, seconds, _ -> + "$minutes:${seconds.toString().padStart(2, '0')}" + }, + "artistNames" to listOf(uploaderName), + "artistIds" to uploaderId?.let { listOf(it) } + ) + ) + .build() + ) + .build() + } + val Song.asMediaItem: MediaItem get() = MediaItem.Builder() .setMediaMetadata( @@ -72,49 +112,66 @@ val Song.asMediaItem: MediaItem .build() ) .setMediaId(id) - .setUri(id) + .setUri( + if (isLocal) ContentUris.withAppendedId( + MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, + id.substringAfter(LOCAL_KEY_PREFIX).toLong() + ) else id.toUri() + ) .setCustomCacheKey(id) .build() -fun String?.thumbnail(size: Int): String? { +fun String?.thumbnail( + size: Int, + maxSize: Int = AppearancePreferences.maxThumbnailSize +): String? { + val actualSize = size.coerceAtMost(maxSize) return when { - this?.startsWith("https://lh3.googleusercontent.com") == true -> "$this-w$size-h$size" - this?.startsWith("https://yt3.ggpht.com") == true -> "$this-w$size-h$size-s$size" + this?.startsWith("https://lh3.googleusercontent.com") == true -> "$this-w$actualSize-h$actualSize" + this?.startsWith("https://yt3.ggpht.com") == true -> "$this-w$actualSize-h$actualSize-s$actualSize" else -> this } } -fun Uri?.thumbnail(size: Int): Uri? { - return toString().thumbnail(size)?.toUri() -} +fun Uri?.thumbnail(size: Int) = toString().thumbnail(size)?.toUri() fun formatAsDuration(millis: Long) = DateUtils.formatElapsedTime(millis / 1000).removePrefix("0") -suspend fun Result.completed(): Result? { - var playlistPage = getOrNull() ?: return null +suspend fun Result.completed( + maxDepth: Int = Int.MAX_VALUE +) = runCatching { + val page = getOrThrow() + val songs = page.songsPage?.items.orEmpty().toMutableSet() + var continuation = page.songsPage?.continuation - while (playlistPage.songsPage?.continuation != null) { - val continuation = playlistPage.songsPage?.continuation!! - val otherPlaylistPageResult = Innertube.playlistPage(ContinuationBody(continuation = continuation)) ?: break + var depth = 0 - if (otherPlaylistPageResult.isFailure) break + while (continuation != null && depth++ < maxDepth) { + val newSongs = Innertube.playlistPage( + body = ContinuationBody(continuation = continuation) + )?.getOrNull()?.takeUnless { it.items.isNullOrEmpty() } ?: break - otherPlaylistPageResult.getOrNull()?.let { otherSongsPage -> - playlistPage = playlistPage.copy(songsPage = playlistPage.songsPage + otherSongsPage) - } + if (newSongs.items?.any { it in songs } != false) break + + newSongs.items?.let { songs += it } + continuation = newSongs.continuation } - return Result.success(playlistPage) + page.copy( + songsPage = Innertube.ItemsPage( + items = songs.toList(), + continuation = null + ) + ) } -inline val isAtLeastAndroid6 - get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M +fun Flow.onFirst(block: suspend (T) -> Unit): Flow { + var isFirst = true -inline val isAtLeastAndroid8 - get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O + return onEach { + if (!isFirst) return@onEach -inline val isAtLeastAndroid12 - get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S - -inline val isAtLeastAndroid13 - get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + block(it) + isFirst = false + } +} diff --git a/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt b/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt index 27707a2..7ff5b6e 100644 --- a/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt +++ b/app/src/main/kotlin/it/hamy/muza/utils/YoutubeRadio.kt @@ -23,7 +23,7 @@ data class YouTubeRadio( val continuation = nextContinuation if (continuation == null) { - Innertube.nextPage( + Innertube.nextPage( NextBody( videoId = videoId, playlistId = playlistId, @@ -43,7 +43,6 @@ data class YouTubeRadio( mediaItems = songsPage.items?.map(Innertube.SongItem::asMediaItem) songsPage.continuation?.takeUnless { nextContinuation == it } } - } return mediaItems ?: emptyList() diff --git a/app/src/main/logo.png b/app/src/main/logo.png deleted file mode 100644 index 7ffbb4a6ffd52db8d9bdbf92c7ac953291670dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12875 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 Q3P<=@@u>pxf%)721JndO$N&HU diff --git a/app/src/main/res/drawable/add.xml b/app/src/main/res/drawable/add.xml index a522620..300f401 100644 --- a/app/src/main/res/drawable/add.xml +++ b/app/src/main/res/drawable/add.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/airplane.xml b/app/src/main/res/drawable/airplane.xml index cee47b7..a4fe45d 100644 --- a/app/src/main/res/drawable/airplane.xml +++ b/app/src/main/res/drawable/airplane.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/alarm.xml b/app/src/main/res/drawable/alarm.xml index 1c4ad30..ba82249 100644 --- a/app/src/main/res/drawable/alarm.xml +++ b/app/src/main/res/drawable/alarm.xml @@ -3,13 +3,14 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/alert_circle.xml b/app/src/main/res/drawable/alert_circle.xml index 6300810..7f6ea33 100644 --- a/app/src/main/res/drawable/alert_circle.xml +++ b/app/src/main/res/drawable/alert_circle.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/app_icon.xml b/app/src/main/res/drawable/app_icon.xml index cbe7472..f59dc96 100644 --- a/app/src/main/res/drawable/app_icon.xml +++ b/app/src/main/res/drawable/app_icon.xml @@ -3,12 +3,13 @@ android:height="126.97dp" android:viewportWidth="122.98" android:viewportHeight="126.97"> - - + + + diff --git a/app/src/main/res/drawable/arrow_down.xml b/app/src/main/res/drawable/arrow_down.xml deleted file mode 100644 index 9d45330..0000000 --- a/app/src/main/res/drawable/arrow_down.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/arrow_forward.xml b/app/src/main/res/drawable/arrow_forward.xml index 386591b..591e29a 100644 --- a/app/src/main/res/drawable/arrow_forward.xml +++ b/app/src/main/res/drawable/arrow_forward.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/arrow_up.xml b/app/src/main/res/drawable/arrow_up.xml index 9de10de..e34a79e 100644 --- a/app/src/main/res/drawable/arrow_up.xml +++ b/app/src/main/res/drawable/arrow_up.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/bookmark.xml b/app/src/main/res/drawable/bookmark.xml index 416e06c..57bc7d9 100644 --- a/app/src/main/res/drawable/bookmark.xml +++ b/app/src/main/res/drawable/bookmark.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/bookmark_outline.xml b/app/src/main/res/drawable/bookmark_outline.xml index 1544145..a5cdd6c 100644 --- a/app/src/main/res/drawable/bookmark_outline.xml +++ b/app/src/main/res/drawable/bookmark_outline.xml @@ -3,11 +3,12 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/calendar.xml b/app/src/main/res/drawable/calendar.xml index 3eb788b..e610608 100644 --- a/app/src/main/res/drawable/calendar.xml +++ b/app/src/main/res/drawable/calendar.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/checkmark.xml b/app/src/main/res/drawable/checkmark.xml deleted file mode 100644 index 1c3a3fe..0000000 --- a/app/src/main/res/drawable/checkmark.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/chevron_back.xml b/app/src/main/res/drawable/chevron_back.xml index 1b7aef3..eb431e5 100644 --- a/app/src/main/res/drawable/chevron_back.xml +++ b/app/src/main/res/drawable/chevron_back.xml @@ -3,11 +3,12 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/chevron_down.xml b/app/src/main/res/drawable/chevron_down.xml index 41cdd90..3ae861a 100644 --- a/app/src/main/res/drawable/chevron_down.xml +++ b/app/src/main/res/drawable/chevron_down.xml @@ -3,11 +3,12 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/chevron_forward.xml b/app/src/main/res/drawable/chevron_forward.xml index 24a5848..008b66c 100644 --- a/app/src/main/res/drawable/chevron_forward.xml +++ b/app/src/main/res/drawable/chevron_forward.xml @@ -3,11 +3,12 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/chevron_up.xml b/app/src/main/res/drawable/chevron_up.xml index 257133c..1097389 100644 --- a/app/src/main/res/drawable/chevron_up.xml +++ b/app/src/main/res/drawable/chevron_up.xml @@ -1,13 +1,14 @@ - + + diff --git a/app/src/main/res/drawable/close.xml b/app/src/main/res/drawable/close.xml index 3b93ed8..fd3d5a2 100644 --- a/app/src/main/res/drawable/close.xml +++ b/app/src/main/res/drawable/close.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/color_palette.xml b/app/src/main/res/drawable/color_palette.xml index 5c347bc..637c9e5 100644 --- a/app/src/main/res/drawable/color_palette.xml +++ b/app/src/main/res/drawable/color_palette.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/delete.xml b/app/src/main/res/drawable/delete.xml new file mode 100644 index 0000000..883bcaa --- /dev/null +++ b/app/src/main/res/drawable/delete.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/disc.xml b/app/src/main/res/drawable/disc.xml index fd3f2a8..e30f9ab 100644 --- a/app/src/main/res/drawable/disc.xml +++ b/app/src/main/res/drawable/disc.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/download.xml b/app/src/main/res/drawable/download.xml index 9f5e415..7ee95a0 100644 --- a/app/src/main/res/drawable/download.xml +++ b/app/src/main/res/drawable/download.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/ellipsis_horizontal.xml b/app/src/main/res/drawable/ellipsis_horizontal.xml index 2695851..d7bc2bf 100644 --- a/app/src/main/res/drawable/ellipsis_horizontal.xml +++ b/app/src/main/res/drawable/ellipsis_horizontal.xml @@ -3,13 +3,14 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/ellipsis_vertical.xml b/app/src/main/res/drawable/ellipsis_vertical.xml deleted file mode 100644 index f3f6171..0000000 --- a/app/src/main/res/drawable/ellipsis_vertical.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/enqueue.xml b/app/src/main/res/drawable/enqueue.xml index c717a87..bcfc505 100644 --- a/app/src/main/res/drawable/enqueue.xml +++ b/app/src/main/res/drawable/enqueue.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/equalizer.xml b/app/src/main/res/drawable/equalizer.xml index d366546..e07566b 100644 --- a/app/src/main/res/drawable/equalizer.xml +++ b/app/src/main/res/drawable/equalizer.xml @@ -3,13 +3,14 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/film.xml b/app/src/main/res/drawable/film.xml index 5e334a8..6774ad9 100644 --- a/app/src/main/res/drawable/film.xml +++ b/app/src/main/res/drawable/film.xml @@ -1,9 +1,12 @@ - + + diff --git a/app/src/main/res/drawable/globe.xml b/app/src/main/res/drawable/globe.xml index 10a3b37..98af4fe 100644 --- a/app/src/main/res/drawable/globe.xml +++ b/app/src/main/res/drawable/globe.xml @@ -1,33 +1,36 @@ - - - - - - - - - + + + + + + + + + + diff --git a/app/src/main/res/drawable/heart.xml b/app/src/main/res/drawable/heart.xml index 2a71a1e..738c5be 100644 --- a/app/src/main/res/drawable/heart.xml +++ b/app/src/main/res/drawable/heart.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/heart_dislike.xml b/app/src/main/res/drawable/heart_dislike.xml deleted file mode 100644 index 510c67d..0000000 --- a/app/src/main/res/drawable/heart_dislike.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/heart_outline.xml b/app/src/main/res/drawable/heart_outline.xml index ba8e689..af0579b 100644 --- a/app/src/main/res/drawable/heart_outline.xml +++ b/app/src/main/res/drawable/heart_outline.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/ic_banner_foreground.xml b/app/src/main/res/drawable/ic_banner_foreground.xml index d4f6fc4..d5a8d37 100644 --- a/app/src/main/res/drawable/ic_banner_foreground.xml +++ b/app/src/main/res/drawable/ic_banner_foreground.xml @@ -1,46 +1,60 @@ - - - - - + android:viewportHeight="180" + tools:ignore="VectorRaster"> - - - - - - - - - - + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 4065946..0cbe879 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -3,17 +3,19 @@ android:height="108dp" android:viewportWidth="122.98" android:viewportHeight="126.97"> - - - - + + + + + diff --git a/app/src/main/res/drawable/infinite.xml b/app/src/main/res/drawable/infinite.xml index b8444f3..493c8f9 100644 --- a/app/src/main/res/drawable/infinite.xml +++ b/app/src/main/res/drawable/infinite.xml @@ -3,16 +3,17 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/information.xml b/app/src/main/res/drawable/information.xml index 97e7373..551c2e4 100644 --- a/app/src/main/res/drawable/information.xml +++ b/app/src/main/res/drawable/information.xml @@ -3,20 +3,21 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/library.xml b/app/src/main/res/drawable/library.xml index 1105723..4f80b0f 100644 --- a/app/src/main/res/drawable/library.xml +++ b/app/src/main/res/drawable/library.xml @@ -3,22 +3,23 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - - - - + + + + + + + diff --git a/app/src/main/res/drawable/link.xml b/app/src/main/res/drawable/link.xml deleted file mode 100644 index c4de0e7..0000000 --- a/app/src/main/res/drawable/link.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/medical.xml b/app/src/main/res/drawable/medical.xml index aaba699..b7344aa 100644 --- a/app/src/main/res/drawable/medical.xml +++ b/app/src/main/res/drawable/medical.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/musical_notes.xml b/app/src/main/res/drawable/musical_notes.xml index 8d3d474..e63dfa1 100644 --- a/app/src/main/res/drawable/musical_notes.xml +++ b/app/src/main/res/drawable/musical_notes.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/notifications.xml b/app/src/main/res/drawable/notifications.xml deleted file mode 100644 index a06a9c2..0000000 --- a/app/src/main/res/drawable/notifications.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml index 3280645..4ce2015 100644 --- a/app/src/main/res/drawable/pause.xml +++ b/app/src/main/res/drawable/pause.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/pencil.xml b/app/src/main/res/drawable/pencil.xml index c1c2df0..f053326 100644 --- a/app/src/main/res/drawable/pencil.xml +++ b/app/src/main/res/drawable/pencil.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/person.xml b/app/src/main/res/drawable/person.xml index 4fcfdc8..57334fe 100644 --- a/app/src/main/res/drawable/person.xml +++ b/app/src/main/res/drawable/person.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/play.xml b/app/src/main/res/drawable/play.xml index 4951da4..84199e2 100644 --- a/app/src/main/res/drawable/play.xml +++ b/app/src/main/res/drawable/play.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/play_skip_back.xml b/app/src/main/res/drawable/play_skip_back.xml index 14602d8..6a5047c 100644 --- a/app/src/main/res/drawable/play_skip_back.xml +++ b/app/src/main/res/drawable/play_skip_back.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/play_skip_forward.xml b/app/src/main/res/drawable/play_skip_forward.xml index 24f14c4..b227e50 100644 --- a/app/src/main/res/drawable/play_skip_forward.xml +++ b/app/src/main/res/drawable/play_skip_forward.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/playlist.xml b/app/src/main/res/drawable/playlist.xml index 05a33e6..8c499c4 100644 --- a/app/src/main/res/drawable/playlist.xml +++ b/app/src/main/res/drawable/playlist.xml @@ -3,44 +3,45 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - - - - - + + + + + + + + diff --git a/app/src/main/res/drawable/radio.xml b/app/src/main/res/drawable/radio.xml index 4fa7b4a..0de0905 100644 --- a/app/src/main/res/drawable/radio.xml +++ b/app/src/main/res/drawable/radio.xml @@ -3,25 +3,26 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - - - - - + + + + + + + + diff --git a/app/src/main/res/drawable/remove_circle_outline.xml b/app/src/main/res/drawable/remove_circle_outline.xml new file mode 100644 index 0000000..a927613 --- /dev/null +++ b/app/src/main/res/drawable/remove_circle_outline.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/reorder.xml b/app/src/main/res/drawable/reorder.xml index 5d31552..754826e 100644 --- a/app/src/main/res/drawable/reorder.xml +++ b/app/src/main/res/drawable/reorder.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/search.xml b/app/src/main/res/drawable/search.xml index 7a42efa..2f3db67 100644 --- a/app/src/main/res/drawable/search.xml +++ b/app/src/main/res/drawable/search.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/server.xml b/app/src/main/res/drawable/server.xml index b481fd9..7390f0d 100644 --- a/app/src/main/res/drawable/server.xml +++ b/app/src/main/res/drawable/server.xml @@ -3,16 +3,17 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - - + + + + + diff --git a/app/src/main/res/drawable/settings.xml b/app/src/main/res/drawable/settings.xml new file mode 100644 index 0000000..a709655 --- /dev/null +++ b/app/src/main/res/drawable/settings.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/shapes.xml b/app/src/main/res/drawable/shapes.xml index 3693f7e..540cbfc 100644 --- a/app/src/main/res/drawable/shapes.xml +++ b/app/src/main/res/drawable/shapes.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/share_social.xml b/app/src/main/res/drawable/share_social.xml index c992b57..58161a0 100644 --- a/app/src/main/res/drawable/share_social.xml +++ b/app/src/main/res/drawable/share_social.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/shuffle.xml b/app/src/main/res/drawable/shuffle.xml index 330b175..e55bf15 100644 --- a/app/src/main/res/drawable/shuffle.xml +++ b/app/src/main/res/drawable/shuffle.xml @@ -3,39 +3,40 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - - - + + + + + + diff --git a/app/src/main/res/drawable/sort.xml b/app/src/main/res/drawable/sort.xml deleted file mode 100644 index b0ca74f..0000000 --- a/app/src/main/res/drawable/sort.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/sparkles.xml b/app/src/main/res/drawable/sparkles.xml index e0c6622..dd569e2 100644 --- a/app/src/main/res/drawable/sparkles.xml +++ b/app/src/main/res/drawable/sparkles.xml @@ -3,13 +3,14 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/speed.xml b/app/src/main/res/drawable/speed.xml new file mode 100644 index 0000000..4126ae3 --- /dev/null +++ b/app/src/main/res/drawable/speed.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/star.xml b/app/src/main/res/drawable/star.xml index 6313be6..dbaad33 100644 --- a/app/src/main/res/drawable/star.xml +++ b/app/src/main/res/drawable/star.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/sync.xml b/app/src/main/res/drawable/sync.xml index c20ef5e..896db86 100644 --- a/app/src/main/res/drawable/sync.xml +++ b/app/src/main/res/drawable/sync.xml @@ -3,25 +3,26 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - - + + + + diff --git a/app/src/main/res/drawable/text.xml b/app/src/main/res/drawable/text.xml index 70c024a..28bdf41 100644 --- a/app/src/main/res/drawable/text.xml +++ b/app/src/main/res/drawable/text.xml @@ -3,10 +3,11 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/time.xml b/app/src/main/res/drawable/time.xml index 13be868..a6d20af 100644 --- a/app/src/main/res/drawable/time.xml +++ b/app/src/main/res/drawable/time.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/trash.xml b/app/src/main/res/drawable/trash.xml index 9025eaa..391946e 100644 --- a/app/src/main/res/drawable/trash.xml +++ b/app/src/main/res/drawable/trash.xml @@ -3,7 +3,8 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - + + diff --git a/app/src/main/res/drawable/trending.xml b/app/src/main/res/drawable/trending.xml index ed34e01..78df21f 100644 --- a/app/src/main/res/drawable/trending.xml +++ b/app/src/main/res/drawable/trending.xml @@ -3,18 +3,19 @@ android:height="24dp" android:viewportWidth="512" android:viewportHeight="512"> - - + + + diff --git a/app/src/main/res/drawable/trending_up.xml b/app/src/main/res/drawable/trending_up.xml new file mode 100644 index 0000000..4e85252 --- /dev/null +++ b/app/src/main/res/drawable/trending_up.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/volume_up.xml b/app/src/main/res/drawable/volume_up.xml new file mode 100644 index 0000000..5c36f58 --- /dev/null +++ b/app/src/main/res/drawable/volume_up.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index 55e632df65eab45d259a0d29e00ef9f20f0e09d5..9c5b452bbb7ccce4b1bdc46bf08b8348e217713b 100644 GIT binary patch literal 970 zcmV;*12z0oNk&G(0{{S5MM6+kP&iDr0{{RoN5ByfZv`uoB-K{U*^7Vl-ZS(38({;y z&}GAIBuR=?y@%RK51zdB?-EN#Q;s7^a+K^r>lZJ~zzO{K=1>i{wr$nQJm1}a6+dzV zil7;aA*2Ha9XMp#g}cKI00amSAV3WiL4W`OGN23!AV5xg4gNv;{OhjcH!HgYWe`DN zhajpYQC$}~Edddb03sm5DwZIzA`k@;tq6pG2v8bYLIkPAI1!XBe|;ySkWpctr2Z5E z5tIlS>-<|qtVl#r1VliDu#)-_j>9N84)OA;@0EG-wW7=d5$4I?&i9HCK_Zb9!ru-e zDDC+wgVO)HeD&=e;0H9v{>gy1hx=pRy7k}l<9Wn*-Fmp(AD))ocIUKn7&iq-&;k-= z|M$~wuXVG&wOLdq?S~C;PNGTzDKvJ&`hQDaCjWy=|Jm*R?d&`s_A65^1Z|WONNrfB z)@C3!tUs;8w3F!Xv%0ASiArqvtwcY+n`{4UC}eHhUPw}n?e$Dek8RtwXEL_UwQbuP z|I4maZ*tOmmhbx_`ac1h{XM`>O0t1JNQ$NqAn3&Dlc$761wk74n?MLW7ov3W)tNt< zKUV<2S#=<#`tAq;Jbv1dI?$yI{{2?-<8nBb<#6|n1E1qJT@u=R?a1f+RhGlOm(C`> z$n(O?CwZRPk0Rp}fl#{W+?uwIP6S1{F*1eawe&DUz`QVNqAI!=^|UqBkZJ=)T@_K1 zMAkCuY08VW=s>Y~s)tc6N)cAUsIxReH;gDnA{8b>ZXfH)*15BZVXg!*t&9qElLbVr zO1ykVjbUb}kx_wg;SH=eO*fs^OZ7^$*f!Q4W-h#)wZ)2-(9P;}8`hCZ5G|Eaxh;s1 z5-p8UnJthgO|ZWm&RDZHA z6aa*RO%corA?SagkMg`S^H~hqMKECR5UE|;O@V#;S{+)Y>coz`>5fBgo5CIVp5CISY0TBQZ s5FXsWeZ$w|yk^qjf}5AOkMQ2;dd0yEz{QZUPP)`L0FY=3${^SFfg~t^EJ%Q~%nSGjaky#u z|9@;|1_~e%NML#(VXcB>DWqix5JAT5LIfW2CJccjV~8wa{# zbcVHfwJKDxDjj~UO5gvs{`;-=r^7jT8;(~2en4$BS-*{^n*jN4vg?;&`KOR}ZF^}) zySB&eL2cW%+l+17wppC9Rk!2$fd|D5Aw`QcCsOo1#34Fs9X{MatOskBkV9yk=yX8r$OK znfEJ;BpBc7?V0aOS*FH!`EtCFXD81ydA9$_CF);5LgA+NzCo?pQAjc+m38(rx2m%& zNt*1I0p{GV;7qMr4r@U-19}_Fax+Pxv6lhe+A2eS4?|ylj-6a0r(QAWdvGJjmLEFX3>Sg_f789XZ zZ>vM4Kt9WL+Y@#Mkba(KBY zR~>HG@+@_@y(-FmcV~FcxKpAGyE|p|OvByq|ArxVr+JjSAyIC-duZX*?rw>4cGT5S z6%Vwl(X*lyUw1KjF@Y!H!l;XDMWRskm3xknJLl6a+-c|TD961k)fQnWb;GiCl{Sls z(Ce0MNVNzg@ISn#^6cPwE(^xD@jQu>WNK_5&wk6)gbX_N&2ityo<#WsZXS=Fk`S~f z*eA*pI_CFt_q&hd!jHY(`@`>~;rX|q@DoQ5961Q!FhB$l2p|Fo00qFyTYB{~YlUeg6JsR`@T93{$-%H2$Rm0G>+k9smFU diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp index c8c9275f322b10e7dafbb404ca6024fe26e7edf0..03004cc91f6532d4a7c98ba34544942dab3850a6 100644 GIT binary patch literal 752 zcmV=wsd0gUUB2^PynA>p>IGm`qN zwr$(CZQHi(9#7l9`6c=CW%V25Lqz{4!0x}%3Bv#V_ao22KQXtsOeo3y9ll9ilB)*B z4ffU~xqNGQmh_KPOXc+~;Zig-Zt75>`eq308aG{re;e56jgIT9?zTFvx<~bd%C~(3 z*q4v%_Ls%EDI$bWZgFLOT0)d7^i;*Tc2~L+F)Y)&v_z#nb|vGQBLz-`TJjMMp^!@- z*X#-;rUrCrh!oU(2Q}K>?9Bhr&7@4z|OH3 zl;YG1s)z-vfJDjG2Xd_-L9Y!X*I}TnpujN4$YT_QT0sKkfsywZ2(p3#+#98F7-$6v z#LpW0=be)?vD@Ilj!SiNCU&0e(TUo=e}oTvsjM>i{Ua3H(a2<9JnDabWg|Z+{dZZY z_?3 z29J5FCG#W||J&6Z)uMTeRC9PVQ%#yTLB;V1zM;6wG*5Dhs}MZID#fPFJo_z*Rf0(5 zM?;rsgdx8)^dSNh@$$vMbrWH#t_)nh5L86YzRuw*VJr`H_Hzg_!lh;X==^x2(~U59 i>s0*wNVd2Tbc7K0&JMz&Tqmm`!QtX?5ilI*S;PI=9`9*y6wl9nQD)f> zVwUaCEbnEONEd-2jQ!9c#C|Xg(M1@-5QH!q4hpwz9g-whr=r@nZQHhO8)LR@+qUx$ z_LmVEFXE07-}hd`7t#L-DEZ&5RXy7@Z&<&U6Pgl7hWk~7NNLxW)i#uM(uu>NvQ-@? z#A~-R!MoV8t_}G*d?{c9npl91`vLM83B-VU7Ai{s zE;X@WV?(c_h1-E#WgR?q4YhU_a4TY^wGkyutCNM?jaExc%}7;NW71WWdN`naP-=sU zDK$rBC^baYh*Eu24Jg$@C6p}eKTWbjhexseW=Tz6w&kZIM@7U$yljg7&5@n9@z7C^ zHkqFNEs>cQ9W82~#ceLZ<=)DSIP!mOYV2t%O5`}0;*>6=-9iOMEzR4k) zDaz&6_e3Ex5uI23l=3eXDPln5jw)wZf{8-L;aQ>hE=M8xUarWUTlF&M5iv z@DLh9^%pV<%^by6OEgw6nw5&BRE$ESi4{|*OjX2aepHO0GE(san!Sp_RE8+_qB*EY zQ_+eT%^^jGicuW;bLQA_TE`PK*`0S^=lRXOuTwPiSNCJ)*LQbhfGoI^FZgH)g+-6J z;GOv}*1pZV{IJWv_&vLP7lBy#Ht+iVBEMo`*KZd>$lcC+e3bS_$L#TT7QtrryvHBS zo;M-5;_aG0*S%dv@YvgPe_nV?5Pa~)gZvoG-UR^{akw8*5%}NyJ{3Xxp^NYl!4q#U zt*@`VJwb5Q+YNuj+f@WRyq)#uj5mWI^U%xVLH-O%ygV=n?2?b}KCiMqvv&7ku>-;G zPTc6zj_+r*n@_tP5cb03LeJJ%f~%hvdVImcu!B$Ce9!#x*2$p`$zdmMeay4DDT5s# z*4oV22`PtgYJ$l)6hkJY|DI9{l~AgWssW{js2Wjfj;aNvHmKTC>Vc{!rOIkdx{8u% ziK&?(-3=4dDy@yEP8luJ3Q=oAys|DHE!0d0Jlc@I)C5gaL(dGThlK~4Aoi(=gkuxT z?npYDpvH`X6BFFN^)PTB6XbzS5i}JO?2GN|hFzTwmr4R()w*t&)ovvw6wA6cs}3jK ctXo_Xo;7;4Y2L6wt?-bfQ48)-Uh=Zhu zOAlUxY}=+?)w5#Twr$(CZQD*4zHQq^7h>B^?mcfYaN9^xvZLiahBrvkw(Z!Pm2m?a z=g-L8L5?iI!;Ea(wrwX{$(Q%d^DH5@QTscdVq`a*)po4f*4Hu)0HARCU!85+w&A$8 zZ8fPQ?(PZh?(PgTL{^+eT7)`?}jlfLL9?P+Y+DQc=KJ!Paf?nDO_I_xj_r!fW$IlY5Q+gdcxv_T3q&F?9gQetnhC-tonEo3Ocw z^EdAEG|nw9kGVV_S;^&AfnI{|Hg*{Z04`vgQlcvWj{9$AT=Ka-zreZ9C1f_it1M5* zF3(4m11P#=BW!?daW`u>q-^Oa1w8H$Rwh{|lfE`vrKll|Ah?6JRg#|gm)sAUjU zzSP=0ZE5MG(#|Ba!o(yAI-1=eIh)A&GZ-_A*6GhmOH(DDBYx_vrWHIq?d998LzZ45 z%BTF50ui|wtpv_riIHsnV#n%jA{s%26@1mX=~J~K`uSOr)h&`$>L3y!#Osg@Y+vBg0NXoHo#e?(5`sL9wHp%!$~majQ}>BZu04k% zv*3w+lzV4pZDx5!QZL77PpwAerB$Y$KZoKy(WiHak6*FhAYhuFuQlB9`XHCK1{vkrZ$}B%gh~+~>_v;{nV*7ofQN;EaYW+pPbpbwWxMzos|VjRgoOv5xaw%ORpr2)1L z*N!?&?h|qj$vGT}=HRGZ#vZQUWyItO?JQU?ASLT?q&*yUhJ#f!DkMeB_Ox(F+mtplkt~Fh`%ewTDaC^qhGh zSjnL^thih*525RT?gC?wE@XYGbyxCF~Mt1XAVhwJeA@sz_F=jDpXAHKt|!yGa(@7 zMnND-b$$um|M`^sl;>6b%AdqqA06GHU1N*3=OcH;> zB}pr|^tQDWMgj)_KtaG+bKOld$_CYN867Gj1b}CUP#FzX!<(%o*3ITS1w7sXTm*72 z?YhZdEyro2Zp~xdt>yvd_wn>C;+yR>xO3LSH#+(J4-_7^9ueidpO^(3&*f0~zc#)L zZ72&j6uvJ9-wrV;RudfTz3vHx6T#cPfrmgP)cVYyRbhnYbYa%7{P)ux4wV@B9J1s8 zS*Ajxhx3i556$rtfvOBXOhh1g()FI0Wx)T<%cgaca(Pqfdq25pS}fY1!?wR~s?eZz zlrN8WaNzZp8N3`g;Oln4N1*of^m8V`%~1S*N(p?>Q*U@0jd&qc3(@Bo`*(f%YqiPy zLs@?3UT<>S0S|Wo3xVYNx3fp0Ip7i+^@BszQ2Suj+sQY09I%1U7bDOdihw~t?Q)-827%7;ms@45P1K*5gk&>{)IScp-D)eB zdT+8M0bnczvOV@Y9|hs|KE;L#O0^o7c)32<<9rnNSRCXG0J5~m^C6EwcZ2IS>RD?h zr<65BlKZvPVerKC%({GveSfe!NYmo4ryK(95OBO_uMbHM+K&21EdTtZ4!&)UPa)vc z*oiy9RpYj}UNR9_^=NXpN@D(^AT=$h_Nbec556a^XXl-Jy?@bON^p=? zP|hY)AGt(%dO@Otm+Ymx_IjsP)%6(rZ$3z7{*oX$7bt&(z!-t$)VB|wyPVg8bJsS0 z>wZ0cbk^VJrY2r7E0I&%(PjUGL7_7%&reNM-M03}=dRbdnTNpY_kOucf@D5OsxcGr zmIB!(1R8%KFc~rh*iHeCc?;f7K}+6Fp+8u8Q-Fgyr1Y`QiJ9*h>nKIt0f6 literal 2692 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 6b8ba77d6d15ae76dfb62ccc734dea43a9e3b84c..b5633221526bdc3f9e768ab9266e3e7cff16fe34 100644 GIT binary patch literal 716 zcmV;-0yF(mNk&G*0ssJ4MM6+kP&iDu0ssInFTe{B2jn!iZCBa%{ZDdORO-JYRJ6#S z@7-;{t!-OXwa$IG6OlvzEzpl;^7X#GAjh_?Dq2tQq1%vj$UhN>?swqGwr$!P&$ePU zMLE9PCbowWA0M#5w{+CKN>qjgpeIs8E8TAs|8psVc)3kdl;4wf28P zg)JaLv}X8c3nsQ8KoN47{`-HL*E7};Vd-ombEhQ3(oqnB>usz_%%9g)Wh5Wx%W2ho zwx3U3FW1A%>0E5BCZcL|Sj}EKTJ?Nf|2yPuU%h6=L7VirYb6}pbG0q^{WjF?Q{A_A zyW>q%5v?a%B|uAeL;Z!4iD?`8^V>bGS0P%BT2(OS&)a`b0qwT!LQ>j2?Xhj!wr$(C z@!zYGH7|qDxv7Z$PXPNXqrBuw%m*f+4+1_0e=tBC)PRrUW1)}FBy#IrF(2o%iRg%4bRCdW%gDT0ECabom z->9rCIdVJtdRi(=RZEZV$dw_pqqi+TF50r7+Il-OC8+Of&5SnB)O~eyIo(|a(R`)5 zK~~Y*6f2;bP(jw%Umh*0`y0tx`U{1iTd3mNCyIrNwF1%L;_6I|fSz7m9HePpUInJ| zIC%=dax=;BDuDSa4%8|DO)_d&sOD%GM*p;tZy6yOFwB*4FlQJb$)8mCKh_iee{HyR3g}-{22y-gXNv`* zh@ikwNb)D7aaW6JVORoID*{mn(-}d2Z@R;7EQYyGuh&bweU|O-?-$(Vwd+`=eu}x( z|7pLQ|M|VVAFrDIC!_xHbliSycI(mS{g!-g&X?oZCh@*ME>ZvFXuH}fl<0NzdkBI~ zM+yRkPKSUX=ns?!glmameQNChoNW0Yud+YzL))&o&$Ic=wq%G(cm zklS$%r{u%b(+g25d7q|cI-?NMo-xKI&nu+8WsHq?+wS!-{(ZD;Xo4}uUM9QOC3u}8 z8({owhI`!}^$TXaSeHiwf?0%K!MhmQ-~{&~*}e29jIoJ&Do=aE_1Nyw(vQ=x>Z25B z{^!}}T~QQ)MkV~RsB%<%oJ~;>|Fd;XZptpMX>v;x0yj2{ZF39R+>V^T17jQzzme5Q zBNEw&T)E~?K;--A>c54#1=P8PzgHgnN`UwWJ-B-h`R>CYe*$uHKOhi2;64H6u~GCf G@Rk6GQk@sA*_@8f={G;YotxL-QH0phs0U#^GZ zAAt}-Q3wdc_6v|G*|up{+2>p{wrv|HBeudDRL;W&!av@pC$HCjnVfwxvh4qzLog* z5iQQ7@|N3{R6f(PAnd^IJekw+qF2?Vx`huty}GV zr4=pAQQYgY@wogFcND0R*uD{wt8wFX;z~qrwh~4SV=`T1AEEIaevEZxjOVZNRsWCR G->U$>k@&a( literal 870 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 literal 1872 zcmV-W2e0^2Nk&FU2LJ$9MM6+kP&iCH2LJ#sFTe{B6^DYf4Vcxx?L7$*F#+-bA4^Bp zw#9PuFGAV_Za@oA%F-SnXNHuSnVFfHS;KI<|2x7>40c~w!CTdWaC!q8g)FsL>IIBq zsRnY%_V0*8*Nxm}h}ap!ADZz-j_9j0bJUTc!^vg>$BiUOs-WcRuFBm7{NM@XNRkxE zf?|0O8!I!91-R$J)wb=76lZPQtZa0)ZCjnq1F*fPU}M}TnW@({l5Ya!*w%Jz&&U*; zoo(AmX``~O-?nWVL;0TPe!q7Nf0bHq_YNWE1a!xFtF&MF&mgwh|9#firL#tGt(7{% zNcmKd1OO}}E4s#3-HvT*w}c}A0DAn{9p0K-xC`h3o>(<$YuV z5O6x6>40ziKS&8p=}HSBP6sR<2xQ++X(`8_x$?FB!}+(6U3j7J1c0>NF8oLdKR%~; zbEF#1pSt1Z>EccM_rDK*4M2E7bAelFNdec}+`MrEssX*nu0FaKYXWX?ED0-3RV&8_ zV-TrEPzv&A;2_J_5b=R7;X+8;4>m}K>QHm6gFjUE2=2rsw!+pV)MNMLCN4yOf6x6 z!OJG#Q&mQRDf^rv88+lz%&W_gZK;D-WaJ$gc*JI#GLMyI1haQ+P(ZO{=99h}Htnj1 z0N`Oa9~z2b=zEeUXpZ%T53ebMe1lGgpeUpmr39f2!<7)Ee1;RJdA28ZE2{{{j?`wi zguXXoD|RGPhXLXN0trV7i~`cmVFc?6zZF%~i$ukC2I69Z66jSN>=WsgVgw0s!>87; zI#q^rAdn6ykWz0GkN&ir9N-H+Xd! zlBn4v#Ep$}!9V-kDetXp_ERKmg+@t>l{1lPc-fltG-uNwj=^%$qYeg0a0;HKpk@K(L5q znX0dKtto;yn-ke#Q|>{DQ8!)E?SR=UN1uMw<;vIeI_#D5cu`-|~)42%Tqo z0>d+GQuK|MM`G2m`=FFkjk`B{C>0oL@}bLh_@k6k-CoCXIFTf#b=zT^BhY}RpHy>N zQ}=C3IBnB%hLBHjTGw}!ZIkwuPi!RFTB&OBY638zW2!T)5tjwg z-KTAti-^{xL<}^L4n)Z&y{I+fyr9F@+)ecI!t6B$q;R7PTJ>a_;bC$kq|`8aXIs>j z=>BS6srrRf!-t1j^L9-A+T!^hh$TRz0}2LOTdM=&(O-Btw5fi5hFl1aN7UN+5a zqs}v;Df=!;x}<4QKN4Koo;d-e7{PCZWDSG1x0R#=0eGm=C+nS>rSG%NUla)3`d>@t z8J`Kx4xdYcmi2>hF9Xo`#yZVa$lVSe0Kq_Q!mf6of$JuKC@0qL@0v~9{~HfLT{=l| z?|;~gJB}ED8F^#S%$|P)0C-?vzER1DM}Ghi=_LB!H(J&ATGkJSUzU!8Y^wKGu~}OToK7tP0{Y8NF|a$jQ+-p!`75x$oCxixzI$&UfAv%u0`)2bb)n(BN36SQ3h_MZ#~!+Foe)c z2jV>jI;F4XmwR1&s&bF0_I!!Vz5Ap5S4)fE6COfrm5u-XQ{#bp?=1$J476W4`qq27 K8~+co%tF9I&6aEc diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index ee28e15f43a50ac21e313f5adb5ca826042c9910..93244f26baa0a1515875842efa957fd93d1e9201 100644 GIT binary patch literal 1306 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 E1@~h=)&Kwi diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp index 2b44f5588167e5844dec92333eaa645908ba3591..cbec00ece37c081033af358c83fb62002c1427ce 100644 GIT binary patch literal 1014 zcmVP|F|8BIqL+wrv}UZug(~9tjAF{2$G1+BSRADsO07z_jV z_pup*5Opa8W|VP$#Cnf?|AwQNHVT2PXAF_DA4XtAhGikX=WPcuF6)L6!e|g946$t* zf*3&v<1_01n;^saO-zQ{m%{@?5VTxB`6ph{X*g_8zNDbG-mBO?tx84 zSl&YNx@N_49jx&{B=gZ#zmi-p7-}v|OG=PIx-~=OidNPkt7Q$jT-KKxsa!|p_DL6{ zn^D!I$$4RGLWrSH3!O+eA*yUOIqJTI5M$Y^9cXnKnsQc>qo`<&!>H&GcRA8wwU3~vnd{)GaY{fNKr|}~KaK0) zFy98Zt51sU>(+q$qY2M77AV)1XxuN?7ut>5;feUkwe01UAs> z05@#}uFV!HD*#C1W*TIb&=&GhqgO%AVzoeiG-mP$T%9gfuo@tV83WCW5{nGfjF~=Y zq!N4-WHB=a>JqIR8jYE$P?Km)P=J}aP?=~Jnv0ovP>E<7G6*UbP5wr)c>BS_hxTsO zqLps(4;{AK4PGjC-g*A@lXFv|MUs=v6Z`d@o#i-*UVqOzKRsC`PPNh2`R*o(khp!% z-QR8(Mc=aS_s8L5=X0+!Imwj20uU}F)q zk)Qbw2V(PrpU>tIE^e@yz;7a(>$o_=7>3{$Ig~EKRO!y1mzmEO)|37d80E|oE5&!@I literal 2046 zcmVVS*W2Yv$0am-G7~_G~xmz!2 zoq(MA{}0m-&*;-04LEGYZ3yc~R-vdG|KClaB?G$bYf(&%LZ&(#;S2wo&K0iEE-QK; z-{5Nkc1~sp?^ffRU#0Ubhc>oJEhwB@y*~_W>YhBT(K8N}A@^4I1C;Gzq5v{!^@kY+ z1~fclSrGDQ3c?fc{b+cmfG+%+h6%m$P8rL@_3B~KbcE%PNXq|b#jTr?#clZeEOGqU zZdz{th~jalsk!qQ!~Sy9b9q06J@^TdYY|Z3Yg6>~z+VT`rs+%Pj>^u1e==%9hUU>X$Ukz|;MWH1MLS9HDU2_OByoiUSQl{k%AE z>fKCxH1HK?u6WdLPMW&sZfqswNtwomkmt*xOk<9cr^z&|f;{zuO;c2rr|&y(^<9ov zIgqg{Vyn+)myHgwVo7=H`+Q}nZL=?7t$B0#n~2XCWJbX=5*qD9Cfgd@o1pMl*QK;r zx(V1Mr14SE*o);W)wMxgRh@O#O(rHUdFOMY4{cR-)|iaPMtU~6+PLZ_D08=XOu|Qc zJ}X>&9VuwdONjY7+?BDlJs>HeCb#*Z%2}l|8XjrX%FSeNzHpHx%0<%QoMl8>EA?~m zq!vmi^(Us&=i41|yow@ia1zci{3h@-#v;>&l3uAj0h@ve3gfZSl75t| z)Q^!SGtLu^u}VLbv@+J)n8L?sMag7h7<&^;(a*?Xq&yBCEvw5EU8CU9`n8OZqh&H$ zcG(nVTPt%KA%}7-ttsTxwK0WnGC5jSA3_dfB($bc=bFN`v=Rq15ON?(UTYdXCYeqR zLm^~;7RGdXOwy{A@Axi*{QP&`|Cl#l=k2%o=xc`jk7<6%Ws~-A5+VE3eD=pRt9R}+ z1IG*)A_6m*z#|#F*!Tv0l z%pQnlhd`=Cyl{*CEJNb*zwqe>ONFJkWtGuikU^ z6ndQTcgsh)mOSR52`bPq3SzR*;Tk{L*| znx5~ZVdru+_?iGN!ptwbN((BC1xeo%*JR`_3*5#wsk5XqvQVk?K6=I>6H#6|cS!-{ zA<3(iEd%@wKS8nt9{K!e5f0Co&=rJq?n6kPDPS(g&D1@4206Hz=?t#2|+{yxi< z6jz%W==e1q%!GjX#P#Yk)Tw*&5BQ0Y%U?!5KU%QEGgb-wD#7dT`;7Ov%t!#39%RVf zI@~I^O=Y@_dd-6DRqWH+myCSyH32&(^x;*dFRORU89q&gf<-m7pR3B;{3Qx^S;@Y5 c)aSP1x7LwoMb-G7CbeYPult<&{}1{C04MwXxBvhE diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index cf4b9ff0f0a106ae33c3d8945e724307e339145e..d26e146321d14ac44c8c73799b478209a4e45fe6 100644 GIT binary patch literal 3680 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 literal 2284 zcmVf=sBN1YGc)5a*gi2cGcz+Y zGc$9UnVFd>jE1-0K~^lCdN&3+PDY_umFtY5=rXsVL0mV3*rSWrC)drDqAhQ3tm3js z*0$}eophE#| zww*qetDAt$EH~?~hlKwr$7W&Dz2-VB1=V)24`k&3A-Pwfr zKk46sAXs^kC0I3KaZXDspK58Pli$FsN)PzV)h%wkZBEqRA@M?WKBV<9c3b9V7 zCM=F9Hr0e9XQ1;(qs-e4!3xDJv`pMfSBJ$r=LZy{QM6_8%f|~g&de6fFsuMd1UvsP zIKwGcwX`zuZhcjSzjI0I0pt00nFLU(D)2LB1YW{Jy#H!zPqzV-R{Yh$R0wA2j+0yR z)d63fz46jp6BZi8U;R9UnOrWJxr;Vc_;ssY6BfI!NW4Tko8><4-F|lcpy?~_>Tnm+ z0F+kp$A#W-+^7P_&KCL4!HuWaPR@Vg=7w|#07}pE>QMg&_-UT|6kKs=Re%5&UZ%Ctt$D*5*Q`<1 zvJJ+_2nBzE9@=(UokA)bOGTBGUkJ}~;TbmQS{xa_)Gnl1IXDXq;A5jxaW&-O0%7Ya zu7%nK^S0r@l;UlnY9{3u0^!zCHJ!XHC^*Wgl}`@Bz2l1<{It<6gTT#bts7>PPxEkr z=Q2pDH*B@lh$2EF|o_d?+1Fwe!}pX}&gs|3Q}J+~}wuC#Hu*ER|D9 z#z$_2L?U5l)G3-z9h^-a;R6b01uRXpogA?<-kNpUmG4m z1Jumfvut3>!-c+X%B{Pviz%mOE;(?ZB4}K-JX|1*`GruwY%=9qe$T-`T-jC(c$rpE z3WPD!V5Qt!4VetY9*I7=d?FFX0%C}waHA$LkRdYin%2$2kcSI%DeSo}220bLp)SZn zaV-(X+WDkFQ#vt_QL%{YWnm~8Nx2lhEt$d63vF^T(Y4H?e4J&`A;~h*jOh#&lS$!) zQX!cb(v3)~kxN9^(yq%WKVvL9WH`z~0~A#PLrE=Jd15W0C5DL(gn60BCj_0G`embh ztyeOJBrnSl)}&?@opdkLc+70k@gj?yjo9WcM>GBt;a>{~z@J9aS@)zmX3HEayr8_^T1&9jvQBcNV zS8UtEw#{MF-T8!F{?b}B!IS1qT=CM}qOMsQZ9|clh4Y`7sON5{tYj1l50p|-WQls7 z_ryAwK+n8W@0zIh4#%vB3I&=nc%G>DsrRgd3Do3X|IW5OV)}`Dp0Ro*K&xBA6j6V} z_3x02m?{~#MYb0`vp^4!a)yd*-Cv@`FwBb8zuwzgylrtX~2T`4o(x8GV93)V<*S!M=d!4aJ zr1&~G?xwLb6jcGKhzbL{<8Rtzq|gU`!p!QROV&yUq*g7Yu`)mS6BI4~|H{Vj@GmHk zl!t!7z~<1)*0Ke}&|(^PJZ>!PJ~k+9x1Gg|u@p7(Q!KVSYI+@Y-R4mEbB?}ldj0bx z3mG|7DVxCl7c8v!pWT#??kited|39faVQi$lzLluR&{(dOBHZvQmy0F>NfPDM6=N`3Ti+b(tB5HFgr2!q_eihnxy96)8i zB|tc4&G=kn#UD3shx$oP2(h9HEVWtggF7#7xMw_s8J-6LK#5If_RR!P@wyYcwl~dx z{5C^N2rx1&JjDC2#Fq=d*BaNUJ9WdUJ+mYT07~C{cE2(J)!%q>-NmNa_ojU^4HwhG zwX{+d{;msl%)dI^O<>FiP~JKdy3_%vUq!QQEDkIu-0jPiV(e0;iKEC#GzE{WIl>Kq-e=X(l zeuMa{uzu`CfcW~cmtk$~>3+GN*Z=2zdGyWoM^`;reRTVo_+FE;i3CGP08l1?iU3qA z1E_DYUiF3+>s4=LgDHJh_FOV_b3bO(iM>}2KY{rDnBgb(SUhBFgDE{$7VA}S)SM{K znb9=?Kq*iq0Hu0n0H|h(J`LK|7}KF|nE_1(05o96;DRYpV|&iG{cqvH<2__6CBuJ9LV+n)8 Go0S4Uk8pti diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp index b9d283803ad5f0ac2faf3beb9b233f90956f2bbb..9276d50b7c05fa3a5d08d42510f1a16a5cb0ae8f 100644 GIT binary patch literal 1588 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 K|N8%9?FImCRdcHV diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index a1f16207453b4998e6670c8802d54a89d7f1c982..a96911ed8007470c4dccf4a7fc515f36735a8e51 100644 GIT binary patch literal 5712 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 UhDljw!il12wOXxO0%Te5z5r1D)Bpeg diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index 281042d1f401c470b9a24f74992e2e139e036a2c..3a598672b96685a1b3f368fbe98515fae8418231 100644 GIT binary patch literal 2962 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 KyAlSHcXbiV`&YOC diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp index 7bdeae10d596e3feb98fa1732a02eafef2a5098f..62a954d2941ec425c450e205bb9a2067e58b9f18 100644 GIT binary patch literal 2496 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 literal 8898 zcmV;zB0b$wNk&GxA^-qaMM6+kP&iDjA^-p{zrZgLRR@DelHyGJmklI51|nhtdfm3N z?Md6R&#q3`)CqgkUC!7*6}#dO&H04ZSQtO#bKgI-v@7l3Vq40-3tUse3Ekb@-QC^Y z-Q8!7kNX^VciFyH?~%JWRjb$jy1)Oo){2l1*BwoU+r9uYI}>ee`~r|&WE7G6xQ7#4 z>Sr>Xl@dCH3-3CU6Op;xfbT1y>O@2nZ6en_A(@jA+PMMbM3XMu?HnxJ@eo<)?y&F^ z5v>rnn9v}^?B6oL4EhQqGoE5AhcFu%U9W>Ht-2yI+@50?Rbwb_PmlE!|g~?8e zYewWJ!zRSxkWsa8Vt3dv8rq%!C!z|HBT0&6WqFv{s)%Z)p{8MGX4+lZl4P5Vm*U9DCFg_i;a9NBaNek(__B%*@Qp%*@Qp%*@O@%hWw+?=ZvS&@waQz)jxwof%0j zb=+0mL3f~NA?nx>gR0D=R44EWmJVRhCCs{lt8@f2>Ien}3(^r>C9@qdyLYPQ23?Ms zvd-mDp>Z;2ip*@4nWoz>jq}-nyPmUN@Y00W-H^Q1{rR!X@?scRJD;aA3(WN znOn};ZMcCQw{0ZJQDM5uN9}JRNs=75Ra6I>5J&*C1GF^Sw$4cUS+?2kva4--Y}>YN z+qP}nwpBf8+ucd7LrGF9hn0x1pm~$aAJAD+Afr%3Mxn@zLQ&R?LeWU9R=b|+MpW^P ziML5HR=YS$c56PPZVRUxi;9;|;rizFfL94lnF^fYnjEB&(zdNUl(bbE+i7)!Uu&UP zS=-r$%;(vWT}NF5s?)7*U;vRMg)8OyRouZtV>CxBBscMoceiX+4z?dh zEcXDP=ZN<>;@2R_6G{RKPfmiSrJFef2iv#5A5~?)yi2Q5S9I9bPNDrPoUtQ3H1>?n z5r3&4om@&Hq$GmDN=Q(Jf(RktUCcB1j7lP`?(1fwzu)o|HM6>4b1T1ne_|8+1vmdY zM?B$(-_;IDFb4?)2PlZJkAff?AD@7EnuFCYf`f3xlfN(I%<8_i8NE?YX+94~QxC{0 zj(C*=viU>75kU?TIHL~(!6!fo38<~w1jW61U=Ql&~_uGXSQ$#Pw_Vi z^BEaI0?hoalUhaVs8!wAEiCqMkuN(<9m{J=D-MPc+t zN)LWvj`&cLa&bgplT0J<;fEV8d~iy&{Tz`aNgMHEnul4EUitoy@u_Jr ze6PaTksiR;lB9~Gk@%P;X{^j3OKC7pc)wjuzWq%_X{b5g73jj~ee4sOa3@2d4`K4#T4 z>I`m1HExuVQUzraNBl2sBp1^P0?d+<_}`f_nQGW5Bei=#wy5=L3uej74YD=7P?Sa$ zBTeIY=TlOyOVV7tnD#JF$;*jyBbx0L(4bYQ)w8Gp&(VIx$Ivo-HX^wYUnj4qMw&5&>aA3vxIG8_CY{EMX&*`=S8{>;mRxaXP1vvA zPL<$Z9FfjfZDdQ5D;>FOv;sl--rI-63DK7qgV!NP1jlIuk8M*~yrC9*|%7s?C^LdS!l%23He; zMK#}WuwU@ew3{ut6H?QD)rYOB5SxFjG^OjCS4q6iS8ZoYmrg-`E4+n*gdQU8R8~^1 z@N2c7jkrK0p}FB86h%pVq@$;@g4iep!72 z(t$-MPa_b(C}#i~a>PH3WR)sM-D_eEk?jS%XWxFnlX5rFWJvK^2kJF@Z!<^U6 zI2a)Uyi$VoQ+17z^8r??oPypZl$7tJjW9wuSw0f_v3jW&>N;^r7Zd7|0d7}D*$pySl8Ai1WJ~J=>8qBl+pJFZtoYC_cOBR87oEUW5~?e&$sO2A zFTIsYclm(s;=vA|9pBT8`Ogg=Jmw z!UXU)kN`JAV$B(mlxiy{7K#C=8HFNblY(-CK%ZYyFH-KT;M{YXbanvnuCAepWxm?a-S-35Y5|9=$P0ZmBtCO)E=6px+)q8mQ1S#Ui9%w2BRmXW}Ctb#bQ>w z99~Saf_Mx3ao5s&El;QIHUbADe~wsDiZ$BAI!x|`yLzVV0v@}{8%+fqo>(tO>%*{! zNY0C=1Dc$aj010dPbF|DvY%wBkHT`f#?k&HSYTH&>6WyPF($kqcDXU3cz4>Dq1Wq2 z6IdQ2Mx5rnxR;{ea(b;75V*l#WDX3Jfc3JrUX>!0g4g`rln%B(cpE!PHaWWYCIdnI zAz79x@OTg|t#MKY3DZ1(3*ogHW5SsHRdY_LJLNWTn{6QUNt`@tlEDJxHnkJtCg@9j ziAQ0O1T1q0eQNc@K`2(%i`M~7$-vEDDV-5CjhsJ09)K~H3imXX-VSgo2xE`QiCVin6QrIT)NhRA&4ni?*#68&2 zw&-y>R9}7qkFmb1K)D{{qL6+Awx20^8vqOa6{&N4>iSCJU)a&9+)x)mBpz}h8-wR9 z3r1ZvZ-PAP*j?sq)l8R>z<(EMk~cI1WeM#24O?He9H_f*kIfQCVI(;1X%N0oliZ5{ zX*Y6_+eqbD>?Docm{6ptY@q}Nq_KHUQkus}Oo6VHo3NA4REXPF{-rWv zSbA<0K^*%vcmuli-9B^TrjC^5-wi!$DW{-(2P*wEh?Ju=%Xu?$d=N2v&VDLDvqX6I zCNa8(jg;j9Lz9vRNKycx`JCa>S_s7slQDwmPl9;4KR~l$`n)Z;*#Oa<6AZpN``M85Z8M6s>Hv;XYJ z&jx3fxXWx!Vx)Z?&Zh|JDYuJD(>X|jjQW7nAg;HcGP1;pk|1WUUK<4fKZ|7w=1Eag z#JcDk6N(k6@>2p+ffvB8`5nYnzNP-iVDe<%IK!6H9g@W&F5(CzA*$v_PR07vgzP*?#3Y+mNXk zVf4K;3L!E`>4pKb3dwpIk}nznaj1Y^e7m;cDye{c2RmybChYA^$q18eG|w4i-9DgM z;x4l$iT*SVx2r}d2Cb(A_MttSjSV_$TB5YdcusbVw=mM&0-*r`y^85Mo3&$kWd))K z%8eC%@eV?931J3Hpj)075i5r`BhB^^ik74U^vV=$;kGh3bM2W=f{fM|l0(mh{k-fb z%l4e?g3rrHlfn&yP(N`dK(Bbn9touLz968Qh2o}21KtArmem{amURRRBh8cu{R+@4 z9=S~t`;IBR&?-PE#z8141LPd+L%TQPapOF`j5KNNAP5Z!=oQaWi|4Dr82ag3TgKoF>dcE4}4{EzV;PsPs)aj%N zdfUF+@AYW6*Jp7nYrorL(zopo((H1Tgy>rTTbDl2W(ol%-4&rE(!C(%7b{NH=we;v z=UYmDzEaHho1%Vy@GtK3MOlyMsy<%R@@P_`AXYX;7E9krwmP;aRdTtjl=oXj|9o*r|2*Me(d~gYMq?5OF-X2~we(rf)6i;1>Ce{+{r}5T28I0pQ|$MvD$cibRklds zg#+`uTqzbzc0-l@U3O8sPy$MCktMCgZ3#}6F4}F%zdsg+W}K=|*Y(&eMXscAg0(#y zR`UD3LjL|ir%>eYPqppNh@NBsx{6ea2@_~U9qhh~YMM?WLg-s$Nn&wIA_q*V+)xdz zw&e*E#J~07I6@DP+2V%@YCK$2=-*$$DSSFyUe5yJSfyB6=Qg0+y6@usCWKzkcCW=M ziA*SMq>;s@!v6mV6M_H4>74+K1beOSc-1&!QYhv1PFF<>J%nSGVrr9Bw{q(?)TAg~ zkL^A)NhUxUcjQMbpyqLU4qx~FC-2F!UITdc!Kp{&OXv7;0Kt^+RJhf+V3 zUENn7t@ePy?wp^WGw~saR$R^LnlKC+SRJA|TcE@X6WtjjgFF)hxDIfI=uxZB3z1z_ zhbl}c9;G|70mvL7uY#zzMxhelA7LaLR{rg=gh3nzOP6JY9|_wvj+IVf zeRzUh>=YrRvjO0m7VkMok>7m{Ew^DMyMguw0~jbLt>$o%2L?!ZbmtntMf2FlQ7Kc2(NV4O}n9k5;FA@j8mPqJ`RMfsj-2Bf+I zE&x%QM0Ww50@uwdz1)SBY*?eq4Gfg|mGyi9D}xhv-06btnkksGMUU<^;#{Q&rJ&U| zZ~zD=o{^C2zA6d?bcn?CS?$#Wyx#iFg$X4ig*FE)0D`VO4J+OEivo$dMBy2l`K|8b z9IODLM3d}UUTB@bkN{9E-F;h-yN4wExVl5oA8#{Ap99cuW2Qp!CW=zvssJb!PVJz; z{|>rDi+00ZdLnLBfoM4h#S|cv20%V*bE2RS*+ku;T=&r-^RzI5Wr^sSw?j$}{jF&_ zX{(pg$tLO!i3M4c%|qzzZF*m*jMl~jd)8}T@%R6ee4@?}js>S}`Z|~%9r#-T8D=Py zU~w#Y`wIC)-67(EiDeG~_*teelxRT9l=&*koL5W859kbiH{>sqNwz7klG!Aqq}s4W z5XB{kb<5k+LUurBNKDV+Acxs8JgzwqqqkJ)c0W;dwXbu9o}Xj~bcV1JX%fEH<`<)S z|Lp`MhwfhyNC4;->OLj#9B*)J8+Y3c0Df=TKU5Zw0RXcJkOEMrPfVnf+dAqBF$Hs` zFxJQtUSlA$8-!$1Gzvlh${{lnSG-e9?owAs9G}%u})e*vpeIDgxFDQyCDhIv@K)^hg=gj0K>jvRiDL2b)tEe&% zz~4H;FJ%paf|I~HGMv1^xIC6f z>16TW_0uDGHGm}lRZ%Yi@ah4zG>c<>INp!fsyyF>m26m3vt{rwRktAXJc3(nxE?%~}Xrg04LcYKgdAwTQ^PyVH3SYyj={>oTLVsK1^E+sBC(aB!#~^D+VzDEr8IN(9c{K z=i`IrWWh|@4jChOAX(Ull#m;qu20&oz zRktbWC~%seeibL#7ALcyzj<46Mb`%~Qt&^kc(WKja}q;;@5D9h1ntfWlth8a6@gTK zniw!I?HZ@)p;a!A_++y@fC1xbytFeIG>-Tbe)v$)UU8z7Tl_Tuv%Er(6@V=uK9^Mo z=&Td(7`9|LO-}co)(KMU?wo{}%L~=BSLFaO&6c>e;vH;9Mv(`IU7e${%N_S%@Vuym&nF^NIB|XJBfLc$ z#fb%5n8y0pmowl{{Alrw-BJT+HN)@fwP<$}Io+4vQic?l?4e)52ry#nqcP$(8Mvy` z4SN-D6kDYS=@U);>@!4DJ?P&21%oVJaN$+U1^Q!K-6FHUHY!&!0?I9lfq<@D;r;BRaImh8J*B%?Q!1Bd0R!{zv@;lTHNmAk>r5EN5pNRexRTpSJAS>L6`Dh3iX&73fNQE50s$Bj z*jF#!jXd|!-xcqlU9X>7wtCjbOpRPP@juQKH%db8r$^`Qxmn`e{yC5*pv>n>t&hgx z{BVa^C~Fd9?A#Vz69k!TfhH`$VOABOu~rI>SzE9C$m(90lkF=~TCMKQam9Z=^PFpG zuQw*!{i7I3wsxa+dJZ{odG{xppUlbUC*B{_v8>@{{a6Wjtd)b71;_CO74g4E^zfQ} z=5IBJIBbH{PKZY_!r0E6AdGk07N)ZrTQgzu$7UhV{pbV5=l|T>x(;?z}wmAWACKI;v{?yx& zjcEpcBmUIe7uOmS%bvvel4AiCL$Cqyor4RimjzY^dH^9+>UPiE`mp_WxY-i{PAuGl zyY*WY`xhQmDfk7-^eA?vM!sTa0P-3k7=Uqbtv+*gHw2%+?0EpkR=9)I_Qu|J4Bfa! z2ode9;2ZJfWpwHQ2mz?7giv2M+xq+D?xC1wPXkPB<|M}2xzqOoN{h}(2}P!y=O_T| zY3uj4$=ySG8ZMleJB2Bv&j2`%QYrYuITR5%MG{vP1aI8tYpJs&{(bGMX3qgQQ8=OP zf6K3BZ~U(~37kV2piZ5IS3MYfNBW*2IaBpTJO>Vr`K3%W^uJ@guZU;SIZ+BJ(iKq! z7y(!(l`VZ-u-L5q;8=L31V-MqF63Del=G<-L*~l^kYA;2Faof}w;i0fg}EUj{- zrb&D&MdO3`!1UH%&AyfuSsj=n{PSsdK?|R|vx-wKm_xdFy-oV0uW+917BlSvx=faE zm1ytv4k3r)s3=VGRGfB+D5e_SRzdgb9n&WWS{}vjlOSH$<-5BJs@XqVj7Va4qTrPp zQKyatK%xD$pvU*?nl?eKL9;>PGzn})UAKU27X4uH@AAfOts3c6MA zoW}0EPp%%4CO2ggTO^PYj}%-(YOv_^9->q|_(7xx$9D93n-uYHTddMU(cZudiH|j{ z{b$>+cZjW8w_SP=@aQN!?QhL<#5OxuY7*PajaKfVX{`gmG3G&2Sl%}NT4rq3`{!5_ z+Axq_whwBT;@ z^|^ga=wqL)RjR2#sai0LA*LKKR1J=@z|r(;8E%&Q5R3YqIFsi%+lP4C39y!TP3Np7nfdFM7)?6yIiI2K}8 z4M1%I9qa^hO=Vz<752QXUqbtbM{Qq>nw>ba*z$K!W@_oD9`+e1jQzMqu43t^MJbg{ zpvWM*qu6#)uv)42z;2wWf=AS2^&Llh%Te=%Xrn0{2VcQU4)B#7)Dg$j?YEnvNlR?3@ z#K|=kf|U_k7I;V7wJvF*@IXI;`Up5itat|pCbkt0zjI?*5FX0-zeXNsVJrBk(Tl1e z^YuCae3L^O4LMt*wVK#^Dy_ZtaV0RSGH@KjR=E#1NExpkCwjJ3?l!`x>qbi*CW#K- zlG*^5u&E6kP1#_n3S6PCp0@R$N_sm(qIruF)I-2=jJV5R?jFy2x7&RNxkAIdH5`N5 z<^eTefLSt@$ss*TWnixWoT0A%rjMCM@+70ZWzQAvfWXXDaA^>>!atC~-ZHu6X zbA|5xoTEq`CYHUT@mL{eMX_|o&;?laIOj0(G)CPwKm@c=I{GJgkWTT~8hkT-0!{+_mD z?z=U<>`SI3^|=W0 z8uP~1JT#@`ZUXDqRJPKLiTbQbJY|bgXV`wdvxXy__+5gFlz!l1-8jv$4$6|KPi-qr zWc~Wkb%@U1ukWpjLNC{_b$u=utfPuTw_5`UmISqs=4BeLeDq!UJJW?0OXM?RceXM zu18oj2%{0@Bj|x5WrWrmv~k&By?mwMEFM-qxL~TwRkG+WD}%UtA*1nk=QU4j-{R{X z+jzb6Rc?9-uP^NU%c3RW(+GtH!-{|A@_TI@WYtC}MS%#ufnU;Aj40~Vb76?){l6_s?71T;8xsz+F&S02DlW*y|qlnY|zD9S{x0I1Ymf_Hgx1lS!sp4T7%c z>Hu&g0EGT315X|!wQ7zMy>Wo=UXS(hVK9nAU@&}q9=n%sz{b%>(O9K1a-KouZ;`Nd zTs@Mn{U99*yNoSi1)4+#r9;k%(Ms2}YBZW42v8;Kno?~HNA6G>M5aKNge|ix^6_{U zFd9)rh^v#?0Pt8AwZBOviZd9LN+pk{R4NUIIFZWauePvuw#jr{L=5(LE-)fO2&!GD zld)~Koh1?$0uss2HXB=})7cSRM9k>rIRU03Qk{CeUZGHM5r7T=9m9#pMQ}Yi7>!0` QITY~_A|5OhS&uqn07VG-IsgCw diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 0000000..50b6e52 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,365 @@ + + + %1$dmin + %1$dStd. + %1$dd + %1$s verbleiben + %1$s dB + %1$s kbps + %1$s ms + + Mehr von %1$s + Top %1$s + Meine Top %1$s + Top %1$s… + %1$sx + + 24 Stunden + 1 Woche + 1 Monat + 1 Jahr + Alles + + Songs + Wiedergabelisten + Alben + Künstler + Singles + + Favoriten + Offline + Übersicht + Bibliothek + Entdecken + Lokal + Startseite + Stimmung + Online + Videos + Info + Erscheinungsbild + Farben + Formen + + Zurückspringen + Vorwärts springen + Abspielen + Pause + Like + Shuffle + Sync + Radio Starten + Als nächstes wiedergeben + Einreihen + + Schlaf-Timer + Schlaf-Timer beendet + Möchten Sie den Schlaf-Timer anhalten? + Equalizer + Schlaf-Timer einstellen + + Abbrechen + Fertig + Bestätigen + Nein + Stop + Einstellung + Ausblenden + Umbenennen + Löschen + Reset + Löschen + Alle anzeigen + + an + aus + Unbekannt + Jetzt spielt + + Name der Wiedergabeliste eingeben + Neue Wiedergabeliste + Zur Wiedergabeliste hinzufügen + + Zum Album gehen + + Auf YouTube ansehen + Öffnen in YouTube Musik + Wiedergabeliste auf YouTube ansehen + YouTube Music is not installed on your device! + + Aus der Warteschlange entfernen + Aus der Wiedergabeliste entfernen + + Ausblenden von \"Schnell-Auswahl\" + Möchten Sie dieses Lied wirklich ausblenden? Die Wiedergabezeit und der Cache werden gelöscht. Diese Aktion ist nicht umkehrbar. + Willst du diese Wiedergabeliste wirklich löschen? + + Alternative Version + Dieses Album hat keine alternative Version + + Quelle: Wikipedia + Von Wikipedia unter Creative Commons Namensnennung CC-BY-SA 3.0 + + + + Stimmungen und Genres + Neu veröffentlichte Alben + + Dieser Künstler hat noch kein Album veröffentlicht + Dieser Künstler hat noch keine Single veröffentlicht + + Es ist ein Fehler aufgetreten + Diese lokale Musikdatei existiert nicht mehr + Es ist ein Netzwerkfehler aufgetreten + Kann kein abspielbares Audioformat finden + Die ursprüngliche Videoquelle zu diesem Lied wurde gelöscht + Dieses Lied kann aufgrund von Serverbeschränkungen nicht abgespielt werden + Die zurückgegebene Video-ID stimmt nicht mit der angeforderten überein + Es ist ein unbekannter Wiedergabefehler aufgetreten + Bei der Verknüpfung Ihres Piped-Kontos ist ein unbekannter Fehler aufgetreten. Bitte versuchen Sie es erneut. + Liste der Piped-Instanzen ist derzeit nicht verfügbar. + Es ist ein Fehler bei der Initialisierung von Bass Boost aufgetreten. Wahrscheinlich unterstützt Ihr Gerät diese Funktion nicht. Ändern Sie den Bassverstärkungspegel oder versuchen Sie es erneut. + An unknown error occurred during pre-caching. Please try again. + + Berechtigung abgelehnt, bitte erteilen Sie die Medienberechtigung in den Einstellungen Ihres Geräts. + Einstellungen öffnen + Keine Elemente gefunden + Keine Ergebnisse gefunden. Bitte versuchen Sie eine andere Anfrage oder Kategorie. + + Konnte keine Anwendung zum Surfen im Internet finden + Konnte keine Anwendung zum Entzerren von Audio finden + Konnte keine Anwendung zum Erstellen von Dokumenten finden + Konnte keine Einstellungen zur Batterieoptimierung finden, bitte ViMusic manuell auf die Whitelist setzen + + Ähnliche Alben + Ähnliche Künstler + Wiedergabelisten, die Ihnen gefallen könnten + + Geben Sie den Liedtext ein + Es konnten kein Liedtext gefunden werden + Liedtext auswählen + Beim Abrufen des synchronisierten Liedtextes ist ein Fehler aufgetreten + Beim Abrufen des Liedtextes ist ein Fehler aufgetreten + Für dieses Lied sind keine synchronisierten Liedtexte verfügbar. + Für dieses Lied ist kein Text verfügbar + Ungültiger synchronisierter Liedtext, rufen Sie den Text erneut ab oder bearbeiten Sie ihn und versuchen Sie es erneut + Unsynchronisierten Liedtext anzeigen + Synchronisierte Liedtexte anzeigen + Zur Verfügung gestellt von lrclib.net & kugou.com + Liedtext bearbeiten + Liedtexte online suchen + Liedext erneut laden + Liedtext von lrclib.net auswählen + Start-Offset einstellen + Verschiebt den synchronisierten Liedtext um die aktuelle Wiedergabezeit + + Wiedergabegeschwindigkeit + Warum haben Sie das getan?! + Song-Lautstärke erhöhen + Liedschleife + Warteschleife + Warteschlange zur Wiedergabeliste hinzufügen + + Id + Itag + Bitrate + Größe + Zwischengespeichert + Lautstärke + + Album ansehen + Wiedergabeliste ansehen + + Suchen… + v%1$s von vfsfitvnm + Soziales + Kontakt + GitHub + Den Quellcode anzeigen + Ein Problem melden + Wenn Sie Hilfe bei einem Fehler benötigen, können Sie einen Fehler auf GitHub melden (zum Weiterleiten klicken) + Eine Funktion anfordern oder eine Idee vorschlagen + Sie werden zu GitHub weitergeleitet + + Thema + Standard + Dynamisch + Rein Schwarz + + Theme-Modus + Hell + Dunkel + System + + Rundheit der Vorschaubilder + Keine + Leicht + Mittel + Stark + Noch stärker + Stärkste + + Text + Systemschriftart verwenden + Verwenden Sie die vom System verwendete Schriftart + Auffüllen der Schrift + Textabstände hinzufügen + + Sperrbildschirm + Song-Cover anzeigen + Verwenden Sie das Cover des gespielten Songs als Hintergrundbild für den Sperrbildschirm + + Player + Vorherige Taste, wenn sie zugeklappt ist + Zeigt die Schaltfläche für den vorherigen Titel an, wenn der Player zusammengeklappt ist. + Horizontal wischen zum Schließen + Schließt den Player, wenn Sie auf dem eingeklappten Player nach links/rechts wischen. Nützlich für Benutzer, bei denen der Einhandmodus von Android aktiviert ist. + Schaltfläche "Gefällt-Mir" anzeigen + Anzeigen der Gefällt-Mir-Schaltfläche direkt im Player + Wischen zum Entfernen eines Titels + Wischen Sie nach links, um ein Element aus der Warteschlange zu entfernen + + Zwischenspeicher + Wenn der Platz im Zwischenspeicher voll ist, werden die Ressourcen, auf die am längsten nicht mehr zugegriffen wurde, gelöscht. + Bild-Zwischenspeicher + Max. Größe + %1$s verwendet (%2$s%%) + Song-Zwischenspeicher + verwendet + Datenbank + + Zurücksetzen + Pausieren des Wiedergabeverlaufs + Stoppt die Verwendung von Wiedergabeereignissen für die Schnellauswahl + Bitte beachten Sie: Dies hat keine Auswirkungen auf das Offline-Caching! + Schnellwahlen zurücksetzen + Schnellauswahlen werden gelöscht + Wiedergabezeit pausieren + Stoppt die Speicherung der Wiedergabedauer. Dadurch wird die Statistik in der Wiedergabeliste "Meine Top %1$s" angehalten! + + Sicherung + Persönliche Einstellungen (z. B. der Themenmodus) und der Zwischenspeicher sind ausgeschlossen. + Exportieren Sie die Musik-Datenbank auf den externen Speicher + Wiederherstellen + Vorhandene Daten werden überschrieben.\nViMusic schließt sich nach der Wiederherstellung der Datenbank automatisch. + Importieren Sie die Musik-Datenbank vom externen Speicher + + Sonstiges + Android Auto + Unterstützung für Android Auto aktivieren + Denken Sie daran, \"Unbekannte Quellen\" in den Entwicklereinstellungen von Android Auto zu aktivieren. + Suchverlauf + Pausieren des Suchverlaufs + Weder neue Suchanfragen speichern noch Verlauf anzeigen + Suchverlauf löschen + %1$s Suchanfragen löschen + Der Verlauf ist leer + Integrierte Wiedergabelisten + Meine Top Wiedergabeliste + Begrenzt die Länge der Wiedergabeliste \'Mein Top x\'. + + Akku-Optimierung + Wenn die Akkulaufzeit optimiert wird, kann die Benachrichtigung über die Wiedergabe plötzlich verschwinden, wenn die Wiedergabe angehalten wird. + Seit Android 12 ist die Deaktivierung der Akku-Optimierung erforderlich, damit die Option "Unbesiegbar" zur Verfügung steht. + Akku-Optimierungen ignorieren + Beschränkung bereits aufgehoben + Hintergrundbeschränkungen deaktivieren + Unbesiegbarer Service + Sollte die Wiedergabe in 99,99% der Fälle aufrechterhalten, falls das Ausschalten der Batterieoptimierungen nicht ausreicht. + + Brauchen Sie Hilfe? + In den meisten Fällen ist es nicht die Schuld des Entwicklers (selbst nach dem Einschalten des unbesiegbaren Dienstes), dass die App im Hintergrund nicht mehr richtig funktioniert.\nPrüfen Sie, ob Ihr Gerätehersteller Ihre Apps löscht (zum Weiterleiten klicken) + Wenn Sie wirklich glauben, dass etwas mit der App selbst nicht stimmt, gehen Sie auf die Registerkarte Info + Fehlersuche + Achtung: Verwenden Sie diese Tasten als letzten Ausweg, wenn die Audiowiedergabe fehlschlägt + App-Interna neu laden + Anwendung beenden + Abschnitt zur Fehlerbehebung anzeigen + + Player & Audio + Dauerhafte Warteschlange + Abgespielte Titel speichern und wiederherstellen + Wiedergabe fortsetzen + Wenn ein kabelgebundenes oder Bluetooth-Gerät angeschlossen ist + Anhalten wenn geschlossen + Wenn Sie die App schließen, wird die Musik nicht mehr abgespielt + + Audio + Stille überspringen + Stille Teile während der Wiedergabe überspringen + Mindestlänge der Stille + Die Mindestzeit, die der Ton still sein muss, um übersprungen zu werden + Damit die Änderungen wirksam werden, muss der Player neu gestartet werden! + Dienst neu starten + Lautstärke-Normalisierung + Einstellen der Lautstärke auf einen festen Wert + Lautstärke Basisverstärkung + Die "Ziel"-Verstärkung für die Lautstärke-Normalisierung + Bassverstärkung + Verstärkung der tiefen Frequenzen für ein besseres Hörerlebnis + Pegel der Bassverstärkung + Pegel (0–1000) der Anhebung der tiefen Frequenzen; Verwendung auf eigene Gefahr! + Mit dem System-Equalizer interagieren + + Suchen… + + Basierend auf dem letzten Lied + Trend + Startseite: Inhalte entdecken + + Spieler-Layout + Klassisch + Modern (neu) + + Piped + Instanz + Zum Auswählen anklicken + Benutzername + Passwort + Anmelden + Sie können Wiedergabelisten hosten und mit ViMusic synchronisieren. Derzeit wird nur Piped unterstützt. + Account hinzufügen + Verknüpfen Sie ein Piped-Konto mit Ihrer Instanz, Ihrem Benutzernamen und Ihrem Passwort. + Mehr erfahren + Sie wissen nicht, was Piped ist oder haben noch kein Account? Klicken Sie hier, um zu den Dokumentationen weitergeleitet zu werden. + Piped-Sitzung + Benutzerdefinierte Instanz verwenden + Instanz-API-URL + + Lied-Zeit-Achse + Statisch + Wellenförmig + + Von der schwarzen Liste entfernen + Zur schwarzen Liste hinzufügen + Schwarze Liste zurücksetzen + Schwarze Liste ist leer + + Zwischenspeichern + + Wischen, um Lied zu löschen + Wenn Sie einen Titel nach links wischen, wird er aus der Datenbank und dem Zwischenspeicher entfernt. + + Version + Nach Updates suchen + Sie verwenden derzeit die Version v%1$s + Beim Abrufen von Daten von GitHub ist ein unbekannter Fehler aufgetreten + Eine neue Version ist verfügbar + Weitere Informationen + Sie sind derzeit auf dem neuesten Stand: keine Updates verfügbar + + + Entferne %1$s Lied von der schwarzen Liste + Alle %1$s Songs von der Schwarzen Liste entfernen + + + + Wiedergabeereignis %1$s löschen + %1$s Wiedergabeereignisse löschen + + + + %1$d Lied + %1$d Lieder + + diff --git a/app/src/main/res/values-night-v29/themes.xml b/app/src/main/res/values-night-v29/themes.xml new file mode 100644 index 0000000..e49aedd --- /dev/null +++ b/app/src/main/res/values-night-v29/themes.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 0167352..2842c29 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,4 +1,4 @@ - + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000..2473679 --- /dev/null +++ b/app/src/main/res/values-nl/strings.xml @@ -0,0 +1,378 @@ + + + %1$dm + %1$du + %1$dd + nog %1$s + %1$s dB + %1$s kb/s + %1$s ms + %1$s pixels + + Meer van %1$s + Top %1$s + Mijn top %1$s + Laat top %1$s zien van… + %1$sx + + Afgelopen 24 uur + Afgelopen week + Afgelopen maand + Afgelopen jaar + Sinds het begin + + Songs + Afspeellijsten + Albums + Artiesten + Singles + + Favorieten + Offline + Overzicht + Bibliotheek + Ontdekken + Lokaal + Snelle keuzes + Stemming + Online + Video\'s + Over + Uiterlijk + Kleuren + Vormen + + Spring terug + Spring vooruit + Afspelen + Pauzeren + Like + Shuffle + Synchroniseer + Start radio + Als volgende afspelen + Zet in wachtrij + + Slaaptimer + Slaaptimer voorbij + Wil je de timer stoppen? + Equalizer + Slaaptimer instellen + + Annuleer + Klaar + Bevestigen + Nee + Stop + Instellen + Verbergen + Hernoemen + Verwijderen + Reset + Wissen + Toon alles + + aan + uit + Onbekend + Speelt nu + + Geef de naam van de afspeellijst + Nieuwe afspeellijst + Toevoegen aan afspeellijst + + Ga naar album + + Bekijk op YouTube + Open in YouTube Music + Bekijk playlist op YouTube + YouTube Music is niet geïnstalleerd op je apparaat! + + Verwijder van wachtrij + Verwijder van playlist + + Verberg van \"Snelle keuzes\" + Wil je echt dit nummer verbergen? De afspeeltijd en cache worden weggegooid. Deze actie is onomkeerbaar. + Wil je deze afspeellijst echt verbergen? + + Overige versies + Dit album heeft geen alternatieve versies + + Van Wikipedia + Van Wikipedia onder Creative Commons Naamsvermelding CC-BY-SA 3.0 + + + + Stemmingen en genres + Nieuwe uitgebrachte albums + + Deze artiest heeft geen albums uitbebracht + Deze artiest heeft geen singles uitbebracht + + Een error heeft zich voorgedaan + Dit lokale muziekbestand bestaat niet meer + Een netwerkfout heeft zich voorgedaan + Kon geen afspeelbaar audio formaat vinden + De originele videobron van dit nummer is verwijderd + Dit nummer kan niet worden afgespeeld door server restricties + De teruggegeven video ID is niet dezelfde als de gevraagde ID + Een onbekende afspeelfout heeft zich voorgedaan + Het linken met je Piped account is mislukt. Probeer het opnieuw. + De lijst van Piped instanties is niet beschikbaar + Er was een error bij het initialiseren van bass boost. Waarschijnlijk ondersteunt je apparaat het niet. Probeer het niveau aan te passen of probeer opnieuw. + Een onbekende error heeft zich voorgedaan bij het pre-cachen. Probeer het opnieuw. + + Permissie afgewezen, verleen media permissie in de instellingen van je apparaat. + Open instellingen + Geen items gevonden + Geen resultaten gevonden. Probeer een andere zoekterm of categorie + + Kan geen applicatie vinden om het internet te browsen + Kan geen applicatie vinden om audio bij te stellen + Kan geen applicatie vinden om bestanden te maken + Kan geen batterij optimalisatie instellingen vinden, maak handmatig een uitzondering voor ViMusic + + Gerelateerde albums + Vergelijkbare artiesten + Afspeelijsten die je misschien leuk vindt + + Voer de songtekst in + Geen songtekst gevonden + Kies songtekst + Er heeft zich een error voorgedaan bij het laden van de gesynchroniseerde songtekst + Er heeft zich een error voorgedaan bij het laden van de songtekst + Gesynchroniseerde songtekst niet beschikbaar + Songtekst niet beschikbaar + Ongeldige gesynchroniseerde songtekst, laad opnieuw in of bewerk de songtekst en probeer het opnieuw + Laat niet-gesynchroniseerde songtekst zien + Laat gesynchroniseerde songtekst zien + Verstrekt door lrclib.net & kugou.com + Bewerk songtekst + Zoek online naar songtekst + Laad songtekst opnieuw in + Kies songtekst van lrclib.net + Stel startpunt in + Laat de gesynchroniseerde songtekst beginnen vanaf de huidige tijd + + Afspeelsnelheid + Waarom zou je dat doen?! + Volume-boost + Nummer herhalen + Wachtrij herhalen + Voeg wachtrij toe aan afspeellijst + + Id + Itag + Bitrate + Grootte + Gecachet + Luidheid + + Toon album + Toon afspeellijst + + Zoek… + v%1$s door vfsfitvnm + Sociaal + Contact + GitHub + Toon broncode + Meld probleem + Als je hulp nodig hebt kun je een probleem melden op GitHub (klik om door te verwijzen) + Verzoek een functie of suggereer een idee + Je wordt doorverwezen naar GitHub + + Thema + Standaard + Dynamisch + PuurZwart + AMOLED + + Modus + Licht + Donker + Systeem + + Rondheid van miniaturen + Geen + Licht + Gemiddeld + Sterk + Nog sterker + Sterkste + + Tekst + Gebruik systeemlettertype + Gebruik het lettertype van het systeem + Gebruik marges rond lettertype + Voegt afstand toe tussen de tekst + + Vergrendelscherm + Toon albumhoes + Gebruik de albumhoes van het afspelende nummer als achtergrond op het vergrendelscherm + + Speler + Vorige knop op ingeklapte speler + Laat de knop om naar het vorige nummer te gaan zien op de ingeklapte speler + Swipe horizontaal om te sluiten + Sluit de speler zodra je horizontaal swipet. Handig voor gebruikers met de één-hand modus van Android. + Toon like knop + Laat de like knop direct in de speler zien + Swipe om item te verwijderen + Swipe naar links om een nummer uit de wachtrij te halen + + Cache + Wanneer de cache vol raakt worden de bestanden die het langst niet zijn gebruikt verwijderd + Afbeeldingcache + Maximale grootte + %1$s gebruikt (%2$s%%) + Songcache + gebruikt + Database + + Opruimen + Pauzeer afspeelgeschiedenis + Stopt de verzameling van afspeelgebeurtenissen voor Snelle keuzes + Let op: dit verandert niets aan offline cachen! + Reset Snelle keuzes + Snelle keuzes geleegd + Pauzeer afspeeltijd + Stopt met het opslaan van afspeeltijd. Dit pauzeert de statistieken in de \'Mijn top %1$s\' afspeellijst + + Back-up + Persoonlijke voorkeuren (bijvoorbeeld het thema) en de cache worden niet opgeslagen. + Exporteer de database naar de externe opslag + Herstellen + Bestaande data zal worden vervangen. ViMusic sluit zichzelf automatisch nadat de database is hersteld. + Importeer de database van de externe opslag + + Overig + Android Auto + Zet Android Auto support aan + Vergeet niet om \"Onbekende bronnen\" aan te zetten in de Developer Settings van Android Auto. + Zoekgeschiedenis + Pauzeer zoekgeschiedenis + Sla nieuwe zoektermen niet op en toon geen geschiedenis + Verwijder zoekgeschiedenis + Verwijder %1$s zoektermen + Geschiedenis is leeg + Ingebouwde afspeellijsten + Lengte Top afspeellijst + Limiteert de lengte van de \'Mijn top x\' afspeellijst + + Levensduur van de service + Als batterijoptimalisatie is toegepast kan de afspeelnotificatie prompt verdwijnen wanneer de speler is gepauzeerd. + Sinds Android 12 is het uitzetten van batterijoptimalisatie verplicht om de onaantastbare service aan te kunnen zetten. + Zet batterijoptimalisatie uit + Restrictie opgeheven + Zet achtergrondrestricties uit + Onaantastbare service + Dit zou het afspelen 99.99% van de tijd in stand moeten houden, voor wanneer het uitzetten van batterijoptimalisatie niet genoeg is + + Hulp nodig? + Vaak is het niet de fout van de ontwikkelaar (zelfs na het aanzetten van de onaantastbare service) dat de app soms stopt goed te werken in de achtergrond. Controleer of jouw fabrikant jouw apps ongevraagd beëindigt (klik om door te sturen) + Als je echt denkt dat er iets mis is met de app zelf, ga dan naar het Over tabblad + Foutopsporing + Voorzichtig: gebruik deze knoppen alleen als een laatste hoop als het afspelen niet werkt + Herlaad interne onderdelen van de app + Beëindig app + Laat foutopsporing zien + + Speler & Audio + Blijvende wachtrij + Wachtrij opslaan en herstellen + Hervat afspelen + Zodra een bedraad of Bluetooth apparaat is aangesloten + Stop bij sluiten + Wanneer je de app afsluit stopt de muziek met afspelen + + Audio + Sla stilte over + Sla stille gedeeltes over tijdens het afspelen + Minimale duur stilte + De minimale tijd dat de muziek stil moet zijn om over te worden geslagen + De speler moet worden herstart om de wijzigingen te bevestigen. + Herstart service + Normalisering + Pas het volume van de audio aan naar een vast niveau + Basisversterking + De doelwaarde voor de normalisering + Bass boost + Versterk lage frequenties om luisterervaring te verbeteren + Bass boost niveau + Niveau (0–1000) van het versterken van lage frequenties; gebruik op eigen risico! + Gebruik de equalizer van het systeem + + Filteren… + + Laatst afgespeeld + Trending + Bron voor Snelle keuzes + + Lay-out van de speler + Klassiek + Modern (nieuw) + + Piped + Instantie + Klik om te selecteren + Gebruikersnaam + Wachtwoord + Login + Je kan playlists elders bewaren en synchroniseren met ViMusic. Ondersteunt momenteel alleen Piped. + Account toevoegen + Link een Piped account met jouw instantie, gebruikersnaam en wachtwoord + Meer informatie + Geen idee wat Piped is of geen account? Klik hier om doorgestuurd te worden naar de documentatie + Piped sessies + Gebruik andere instantie + API URL van de instantie + + Stijl van de zoekbalk + Statisch + Golvend + Kwaliteit van de golvende zoekbalk + Slecht + Laag + Gemiddeld + Hoog + Fantastisch + Subpixel + + Haal van de zwarte lijst af + Voeg toe aan de zwarte lijst + Reset zwarte lijst + Zwarte lijst leeg + + Van tevoren cachen + + Swipe om song te verbergen + Wanneer je een song naar links swipet wordt deze verwijderd uit de database en cache + + Versie + Zoek naar updates + Je gebruikt momenteel versie v%1$s + Een onbekende fout heeft zich voorgedaan tijdens het verkrijgen van data bij GitHub + Er is een nieuwe versie beschikbaar + Meer informatie + Je bent up-to-date: er is geen update beschikbaar + + Dynamische miniaturen + Maximale dynamische miniatuurgrootte + De maximale grootte van een miniatuur wanneer een dynamische miniatuur wordt gebruikt + + + Haal %1$s nummer van de zwarte lijst + Haal %1$s nummers van de zwarte lijst + + + + Verwijder %1$s afspeelgebeurtenis + Verwijder %1$s afspeelgebeurtenissen + + + + %1$d nummer + %1$d nummers + + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..47f0ccc --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,317 @@ + + + %1$dm + %1$dh + %1$dd + осталось %1$s + %1$s дБ + %1$s kbps + %1$s ms + %1$spx + ещё от %1$s + Топ %1$s + Мой топ %1$s + Топ %1$s за период: + %1$sx + Сутки + Неделя + Месяц + Год + Всё время + Песни + Плейлисты + Альбомы + Исполнители + Синглы + Любимое + Сохранённое + Обзор + Библиотека + Навигация + Локальное + Обзор + Настроение + Онлайн + Видео + Инфо + Внешний вид + Цвета + Формы + Предыдущая + Следующая + Играть + Пауза + Лайк + Повтор + Синхронизация + Включить радио + Играть следующим + В очередь + Таймер сна + Таймер сна завершён + Остановить таймер сна? + Эквалайзер + Установить таймер сна + Отмена + Готово + Подтвердить + Нет + Стоп + Установить + Скрыть + Переименовать + Удалить + Сбросить + Очистить + См. все + вкл + выкл + Неизвестный + Сейчас играет + Введите название плейлиста + Новый плейлист + Добавить в плейлист + Перейти в альбом + Смотреть в YouTube + Открыть в YouTube Music + Смотреть плейлист в YouTube + YT Music не установлен. Скачайте его из Play Market + Убрать из очереди + Убрать из плейлиста + Скрыть из обзора + Вы действительно хотите скрыть эту песню? Время ее воспроизведения и кэш будут удалены. Это действие необратимо. + Вы точно хотите удалить плейлист? + Другие версии + Нет других версий + Из Википедии + Из Википедии с атрибуцией Creative Commons CC-BY-SA 3.0 + + + Настроения и жанры + Новые альбомы + Этот исполнитель не выпустил ни одного альбома + Этот исполнитель не выпустил ни одного сингла + Какая-то ошибка... Попробуйте перезапустить приложение. + Локальный файл песни больше недоступен + Ошибка сети. Вы подключены к интернету? + Не найден подходящий формат + Видео в YouTube было удалено. Попробуйте найти песню заново + На эту песню ввели ограничения в YouTube + ID видео вернул неверный ответ + Неизвестная ошибка воспроизведения + Ошибка при связке. Попробуйте еще раз + Временно недоступно + Произошла ошибка при инициализации усиления басов. Вероятно, ваше устройство не поддерживает его. Попробуйте изменить уровень усиления басов или повторите попытку. + Ошибка при сохранении. Попробуйте еще раз + Вы не предоставили разрешения. Предоставьте их в настройках устройства + Открыть настройки + Ничего не найдено + Нет результатов + Не найдено приложения + У вас не установлен эквалайзер + Нет приложения для создания документов + Не найдено настроек батареи + Похожие альбомы + Похожие исполнители + Плейлисты, которые вам понравятся + Введите текст + Текст этой песни не найден. + Выберите текст песни + Ошибка при загрузке синхронизированного текста + Ошибка при загрузке текста + Синхр. текст недоступен для этой песни + Текст не найден + Неверный синхронизированный текст, повторите выборку или отредактируйте текст и повторите попытку + Несинхр. текст + Синхр. текст + При помощи сервисов lrclib.net & kugou.com + Изменить текст + Найти текст онлайн + Обновить текст + Выбрать текст из базы данных + Старт. положение + Смещает синхронизированный текст песни на текущее время воспроизведения + Скорость воспроизведения + Не издевайтесь на песенкой + Усиление звука + Повтор песни + Повтор очереди + Добавить очередь в плейлист + id + itag + Битрейт + Размер + Кешировано + Громкость + Посмотреть альбом + Посмотреть плейлист + Введите название + v%1$s от Hamy Studio + Социальное + Контакты + GitHub + Исходный код + Сообщить о проблеме + Если вам нужна помощь с ошибкой, вы можете отправить сообщение о проблеме в телеграм (нажмите, чтобы открыть) + Запрос функции или предложение идеи + Вы будете перенаправлены в GitHub + Тема + Обычная + Динамичная + Абсолютно чёрная + Амолед + Ночная тема + Светлая + Тёмная + Системная + Скругление + Отключено + Лёгкое + Среднее + Сильное + Ещё сильнее + Максимальное + Текст + Использовать системный шрифт + Использовать шрифт, который установлен в системе + Отступы шрифта + Интервалы текста + Заблокированный экран + Показывать обложку + Использовать обложку песни в качестве обоев (не на всех версиях Android) + Плеер + Кнопка предыдущей песни + Показывает кнопку переключения на предыдущую песню в мини плеере + Свайп по горизонтали + Остановит плеер при свайпе плеера в бок + Показывать кнопку лайка + Показывать кнопку лайка в плеере + Свайп для удаления + Свайп по треку в бок для удаления из очереди + Кэш + Когда в кэше заканчивается свободное место, очищаются ресурсы, которые давно не используются + Кэш картинок + Макс. размер + %1$s использовано (%2$s%%) + Кэш песен + использовано + Данные + Очистить + Приостановить историю песен + Приостановит ведение истории прослушанных песен + Пожалуйста, обратите внимание: это не повлияет на автономное кэширование! + Сброс вкладки обзор + Очистить обзор + Пауза времени воспроизведения + Останавливает сохранение времени воспроизведения. При этом статистика в плейлисте \"Мой топ %1$s\" приостанавливается! + Бэкап + Исключаются настройки (тема и т.д.) + Экспорт базы данных в локальное хранилище + Восстановление + Существующие данные будут перезаписаны + Импорт базы данных + Другое + Андроид авто + Включить поддержку + Не забудьте включить \"Неизвестные источники\" в настройках разработчика Android Auto. + История поиска + Пауза истории поиска + Не сохранять новые поисковые запросы, не показывать историю + Очистить историю поиска + Удалить %1$s историй поиска + История пуста + Встроенные плейлисты + Длина топ-листа + Сколько песен должно быть в плейлисте \"Мой топ\"? + Работа в фоне + Если включена оптимизация заряда батареи, уведомление с плеером может внезапно исчезнуть + Начиная с Android 12, для доступности опции invincible service требуется отключить оптимизацию заряда батареи. + Игнор. оптимизации батареи + Ограничение уже снято + Отключить ограничения работы в фоне + Invincible service + Воспроизведение должно продолжаться в 99,99%. Это на случай, если отключения оптимизации заряда батареи не помогает + Нужна помощь? + В большинстве случаев разработчик не виноват (даже после включения службы invincible) в том, что приложение перестает работать в фоновом режиме. Проверьте, не отключает ли вам смартфон ваши приложения (нажмите, чтобы открыть) + Если вы действительно считаете, что с самим приложением что-то не так, перейдите на вкладку \"О программе\". + Диагностика + Внимание: используйте эти кнопки в качестве крайней меры при сбое воспроизведения звука + Интервал перезапуска + Убить приложение + Открыть диагностику + Плеер & Аудио + Постоянная очередь + Сохранять и восстанавливать песни + Возобновить воспроизведение + Когда подключается bluetooth + Остановить при закрытии + Останавливать песню при закрытии приложения + Аудио + Пропуск тишины + Пропускать тихие моменты в песне + Минимальная длина тишины + Минимальное время, в течение которого звук должен быть отключен, чтобы его пропустить + Муза будет перезапущена! + Перезапуск + Нормализация звука + Фиксированная громкость + Базовое усиление громкости + \"Целевое\" усиление для нормализации громкости + Усиление низких частот + Повышайте низкие частоты для улучшения качества прослушивания + Уровень усиления + Уровень усиления низких частот (0-1000); используйте на свой страх и риск! + Взаимодействие с системным эквалайзером + Поиск... + На основе прослушанного + Популярное + Источник вкладки обзор + Стиль плеера + Классическая + Материал 3 + Piped + Сервер + Нажмите, чтобы выбрать + Никнейм + Пароль + Войти + Вы можете размещать плейлисты в другом месте и синхронизировать их с Muza. В настоящее время поддерживается только Piped. + Добавить аккаунт + Войдите в аккаунт на сервере Piped + Информация + Не знаете, что такое Piped, или у вас нет учетной записи? Нажмите здесь, чтобы перейти к их документам + Сессии Piped + Кастомн. сервер + url + Стиль полосы в плеере + Статичная + Волнистая + Качество волны + Плохое + Ниже среднего + Среднее + Высокое + Отличное + Ультра + Убрать из чс + Добавить в чс + Сбросить чс + Черный список пуст + Сохранить + Свайп для скрытия песни + Когда вы проводите пальцем по песне влево, она удаляется из базы данных и кэша + Версия + Проверить обновления + Текущая версия %1$s + Ошибка... + Доступная новая версия + Информация + У вас последняя версия + Динамичные обложки + Макс. размер обложки + Максимальный размер миниатюры при использовании динамической миниатюры + Прокси + Включить прокси + Обновить + RuStore + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml deleted file mode 100644 index 5f9e09d..0000000 --- a/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #ffffff - diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml index fef3d10..00fcbd8 100644 --- a/app/src/main/res/values/ic_launcher_background.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - #EFE0FF + #EDE3FB \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..49022cf --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,384 @@ + + + %1$dm + %1$dh + %1$dd + %1$s left + %1$s dB + %1$s kbps + %1$s ms + %1$spx + More from %1$s + Top %1$s + My top %1$s + View top %1$s of … + %1$sx + + Past 24 hours + Past week + Past month + Past year + All time + + Songs + Playlists + Albums + Artists + Singles + + Favorites + Offline + Overview + Library + Discover + Local + Quick picks + Mood + Online + Videos + About + Appearance + Colors + Shapes + + Skip back + Skip forward + Play + Pause + Like + Shuffle + Sync + Start radio + Play next + Enqueue + + Sleep timer + Sleep timer ended + Do you want to stop the sleep timer? + Equalizer + Set sleep timer + + Cancel + Done + Confirm + No + Stop + Set + Hide + Rename + Delete + Reset + Clear + View all + + on + off + Unknown + Now playing + + Enter the playlist name + New playlist + Add to playlist + + Go to album + + Watch on YouTube + Open in YouTube Music + Watch playlist on YouTube + YouTube Music is not installed on your device! + + Remove from queue + Remove from playlist + + Hide from \"Quick picks\" + Do you really want to hide this song? Its playback time and cache will be wiped.\nThis action is irreversible. + Do you really want to delete this playlist? + + Other versions + This album doesn\'t have any alternative version + + From Wikipedia + From Wikipedia under Creative Commons Attribution CC-BY-SA 3.0 + + + + Moods and genres + New released albums + + This artist hasn\'t released an album yet + This artist hasn\'t released a single yet + + An error has occurred + This local music file does not exist anymore + A network error has occurred + Couldn\'t find a playable audio format + The original video source of this song has been deleted + This song cannot be played due to server restrictions + The returned video id doesn\'t match the requested one + An unknown playback error has occurred + There was an unknown error linking your Piped account. Please try again. + Piped instance list currently unavailable + There was an error initializing Bass Boost. Probably your device doesn\'t support it. Try changing the bass boost level or try again. + An unknown error occurred during pre-caching. Please try again. + + Permission declined, please grant media permissions in the settings of your device. + Open settings + No items found + No results found. Please try a different query or category + + Couldn\'t find an application to browse the internet + Couldn\'t find an application to equalize audio + Couldn\'t find an application to create documents + Couldn\'t find battery optimization settings, please whitelist ViMusic manually + + Related albums + Similar artists + Playlists you might like + + Enter the lyrics + No lyric tracks could be found + Choose lyric track + An error has occurred while fetching the synchronized lyrics + An error has occurred while fetching the lyrics + Synchronized lyrics are not available for this song + Lyrics are not available for this song + Invalid synchronized lyrics, refetch or edit the lyrics and try again + Show unsynchronized lyrics + Show synchronized lyrics + Provided by lrclib.net & kugou.com + Edit lyrics + Search lyrics online + Fetch lyrics again + Pick lyrics from lrclib.net + Set start offset + Offsets the synchronized lyrics by the current playback time + + Playback speed + Why would you do this?! + Song volume boost + Song loop + Queue loop + Add queue to playlist + + Id + Itag + Bitrate + Size + Cached + Loudness + + View album + View playlist + + Enter a name + v%1$s by vfsfitvnm + Social + Contact + GitHub + View the source code + Report an issue + If you need help with a bug you can file an issue on GitHub (click to redirect) + Request a feature or suggest an idea + You will be redirected to GitHub + + Theme + Default + Dynamic + PureBlack + AMOLED + + Theme mode + Light + Dark + System + + Thumbnail roundness + None + Light + Medium + Heavy + Even heavier + Heaviest + + Text + Use system font + Use the font applied by the system + Apply font padding + Add spacing around texts + + Lock screen + Show song cover + Use the playing song cover as the lockscreen wallpaper + + Player + Previous button while collapsed + Shows the previous song button while the player is collapsed + Swipe horizontally to close + Closes the player when swiping left/right on the collapsed player. Useful for users with Android\'s one-handed mode enabled. + Show like button + Show the like button directly in the player + Swipe to remove item + Swipe left to remove an item from the queue + + Cache + When the cache runs out of space, the resources that haven\'t been accessed for the longest time are cleared + Image cache + Max size + %1$s used (%2$s%%) + Song cache + used + Database + + Cleanup + Pause playback history + Stops playback events being used for quick picks + Please note: this won\'t affect offline caching! + Reset quick picks + Quick picks are cleared + Pause playback time + Stops playback time from being saved. This pauses the statistics in the \'My Top %1$s\' playlist! + + Backup + Personal preferences (i.e. the theme mode) and the cache are excluded. + Export the database to the external storage + Restore + Existing data will be overwritten.\nViMusic will automatically close itself after restoring the database. + Import the database from the external storage + + Other + Android Auto + Enable Android Auto support + Remember to enable \"Unknown sources\" in the Developer Settings of Android Auto. + Search history + Pause search history + Neither save new searched queries nor show history + Clear search history + Delete %1$s search queries + History is empty + Built-in playlists + Top list length + Limits the length of the \'My top x\' playlist + + Service lifetime + If battery optimizations are applied, the playback notification can suddenly disappear when paused. + Since Android 12, disabling battery optimizations is required for the invincible service option to be available. + Ignore battery optimizations + Restriction already lifted + Disable background restrictions + Invincible service + Should keep the playback going 99.99% of the time, in case turning off the battery optimizations is not enough + + Need help? + Most of the time, it is not the developer\'s fault (even after turning on invincible service) that the app stops working properly in the background. Check if your device manufacturer kills your apps (click to redirect) + If you really think there is something wrong with the app itself, hop on to the About tab + Troubleshooting + Caution: use these buttons as a last resort when audio playback fails + Reload app internals + Kill app + Show troubleshoot section + + Player & Audio + Persistent queue + Save and restore playing songs + Resume playback + When a wired or Bluetooth device is connected + Stop when closed + When you close the app, the music stops playing + + Audio + Skip silence + Skip silent parts during playback + Minimum silence length + The minimum time the audio has to be silent to get skipped + Player has to be restarted for the changes to be effective! + Restart service + Loudness normalization + Adjust the volume to a fixed level + Loudness base gain + The \'target\' gain for the loudness normalization + Bass boost + Boost low frequencies to improve listening experience + Bass boost level + Level (0–1000) of boosting low frequencies; use at own risk! + Interact with the system equalizer + + Filter… + + Last Played + Trending + Quick Picks Source + + Player layout + Classic + Modern (new) + + Piped + Instance + Click to select + Username + Password + Login + You can host playlists elsewhere and synchronize them with ViMusic. Currently only supports Piped. + Add account + Link a Piped account with your instance, username and password. + Learn more + Don\'t know what Piped is or don\'t have an account? Click here to get redirected to their docs + Piped sessions + Use Custom Instance + Instance API URL + + Seek bar style + Static + Wavy + Wavy seek bar quality + Poor + Low + Medium + High + Great + Subpixel + + Remove from blacklist + Add to blacklist + Reset blacklist + Blacklist empty + + Pre cache + + Swipe to hide song + When you swipe a song to the left, it gets removed from the database and cache + + Version + Check for updates + You\'re currently running version v%1$s + An unknown error occurred while fetching data from GitHub + A new version is available + More information + You\'re currently up-to-date: no updates available + + Dynamic thumbnails + Max dynamic thumbnail size + The maximum size of a thumbnail when a dynamic thumbnail is used + Proxy + Enable proxy + + + Remove %1$s song from the blacklist + Remove all %1$s songs from the blacklist + + + + Удалить %1$s историю воспроизведения + Удалить %1$s истории воспроизведения + + + + %1$d песен + %1$d песня + %1$d песни + %1$d песен + %1$d песен + + Update + RuStore + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2035917..224f917 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,4 @@ - + diff --git a/build.gradle.kts b/build.gradle.kts index 7490649..9ce2278 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,30 +1,53 @@ -buildscript { - repositories { - google() - mavenCentral() - gradlePluginPortal() - } +import io.gitlab.arturbosch.detekt.Detekt +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - dependencies { - classpath("com.android.tools.build", "gradle", "7.3.0") - classpath(kotlin("gradle-plugin", libs.versions.kotlin.get())) - } +plugins { + alias(libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.android.lint) apply false + alias(libs.plugins.ksp) apply false + alias(libs.plugins.detekt) } -tasks.register("clean", Delete::class) { - delete(rootProject.buildDir) +val clean by tasks.registering(Delete::class) { + delete(rootProject.layout.buildDirectory.asFile) } subprojects { - tasks.withType().configureEach { + tasks.withType().configureEach { kotlinOptions { - if (project.findProperty("enableComposeCompilerReports") == "true") { - arrayOf("reports", "metrics").forEach { - freeCompilerArgs = freeCompilerArgs + listOf( - "-P", "plugin:androidx.compose.compiler.plugins.kotlin:${it}Destination=${project.buildDir.absolutePath}/compose_metrics" - ) - } + if (project.findProperty("enableComposeCompilerReports") != "true") return@kotlinOptions + arrayOf("reports", "metrics").forEach { + freeCompilerArgs = freeCompilerArgs + listOf( + "-P", + "plugin:androidx.compose.compiler.plugins.kotlin:${it}Destination=${ + layout.buildDirectory.asFile.get().absolutePath + }/compose_metrics" + ) } } } } + +allprojects { + group = "it.hamy.muza" + version = "0.6.0" + + apply(plugin = "io.gitlab.arturbosch.detekt") + + detekt { + buildUponDefaultConfig = true + allRules = false + config.setFrom("$rootDir/detekt.yml") + } + + tasks.withType().configureEach { + jvmTarget = "11" + reports { + html.required = true + } + } +} diff --git a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt deleted file mode 100644 index 13e6762..0000000 --- a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt +++ /dev/null @@ -1,3 +0,0 @@ -package it.hamy.compose.persist - -typealias PersistMap = HashMap diff --git a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt deleted file mode 100644 index 02c2c55..0000000 --- a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt +++ /dev/null @@ -1,19 +0,0 @@ -package it.hamy.compose.persist - -import android.app.Activity -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.ui.platform.LocalContext - -@Composable -fun PersistMapCleanup(tagPrefix: String) { - val context = LocalContext.current - - DisposableEffect(context) { - onDispose { - if (context.findOwner()?.isChangingConfigurations == false) { - context.persistMap?.keys?.removeAll { it.startsWith(tagPrefix) } - } - } - } -} diff --git a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt deleted file mode 100644 index b07413f..0000000 --- a/compose-persist/src/main/kotlin/it/hamy/compose/persist/PersistMapOwner.kt +++ /dev/null @@ -1,5 +0,0 @@ -package it.hamy.compose.persist - -interface PersistMapOwner { - val persistMap: PersistMap -} diff --git a/compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt b/compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt deleted file mode 100644 index e77129d..0000000 --- a/compose-persist/src/main/kotlin/it/hamy/compose/persist/Utils.kt +++ /dev/null @@ -1,16 +0,0 @@ -package it.hamy.compose.persist - -import android.content.Context -import android.content.ContextWrapper - -val Context.persistMap: PersistMap? - get() = findOwner()?.persistMap - -internal inline fun Context.findOwner(): T? { - var context = this - while (context is ContextWrapper) { - if (context is T) return context - context = context.baseContext - } - return null -} diff --git a/compose-reordering/src/main/AndroidManifest.xml b/compose-reordering/src/main/AndroidManifest.xml deleted file mode 100644 index 10728cc..0000000 --- a/compose-reordering/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt deleted file mode 100644 index 0eb1b73..0000000 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyColumn.kt +++ /dev/null @@ -1,40 +0,0 @@ -@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") - -package it.hamy.compose.reordering - -import androidx.compose.foundation.gestures.FlingBehavior -import androidx.compose.foundation.gestures.ScrollableDefaults -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.lazy.LazyListScope -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp - -@Composable -fun ReorderingLazyColumn( - reorderingState: ReorderingState, - modifier: Modifier = Modifier, - contentPadding: PaddingValues = PaddingValues(0.dp), - reverseLayout: Boolean = false, - verticalArrangement: Arrangement.Vertical = - if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, - horizontalAlignment: Alignment.Horizontal = Alignment.Start, - flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(), - userScrollEnabled: Boolean = true, - content: LazyListScope.() -> Unit -) { - ReorderingLazyList( - modifier = modifier, - reorderingState = reorderingState, - contentPadding = contentPadding, - flingBehavior = flingBehavior, - horizontalAlignment = horizontalAlignment, - verticalArrangement = verticalArrangement, - isVertical = true, - reverseLayout = reverseLayout, - userScrollEnabled = userScrollEnabled, - content = content - ) -} diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt deleted file mode 100644 index 91f325a..0000000 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingLazyList.kt +++ /dev/null @@ -1,293 +0,0 @@ -@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") - -package it.hamy.compose.reordering - -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.OverscrollEffect -import androidx.compose.foundation.checkScrollableContainerConstraints -import androidx.compose.foundation.clipScrollableContainer -import androidx.compose.foundation.gestures.FlingBehavior -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.gestures.ScrollableDefaults -import androidx.compose.foundation.gestures.scrollable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.calculateEndPadding -import androidx.compose.foundation.layout.calculateStartPadding -import androidx.compose.foundation.lazy.DataIndex -import androidx.compose.foundation.lazy.LazyListBeyondBoundsInfo -import androidx.compose.foundation.lazy.LazyListItemPlacementAnimator -import androidx.compose.foundation.lazy.LazyListItemProvider -import androidx.compose.foundation.lazy.LazyListMeasureResult -import androidx.compose.foundation.lazy.LazyListScope -import androidx.compose.foundation.lazy.LazyListState -import androidx.compose.foundation.lazy.LazyMeasuredItem -import androidx.compose.foundation.lazy.LazyMeasuredItemProvider -import androidx.compose.foundation.lazy.layout.LazyLayout -import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope -import androidx.compose.foundation.lazy.layout.lazyLayoutSemantics -import androidx.compose.foundation.lazy.lazyListBeyondBoundsModifier -import androidx.compose.foundation.lazy.lazyListPinningModifier -import androidx.compose.foundation.lazy.measureLazyList -import androidx.compose.foundation.lazy.rememberLazyListItemProvider -import androidx.compose.foundation.lazy.rememberLazyListSemanticState -import androidx.compose.foundation.overscroll -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.snapshots.Snapshot -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.MeasureResult -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.unit.Constraints -import androidx.compose.ui.unit.IntOffset -import androidx.compose.ui.unit.constrainHeight -import androidx.compose.ui.unit.constrainWidth -import androidx.compose.ui.unit.offset - -@OptIn(ExperimentalFoundationApi::class) -@Composable -internal fun ReorderingLazyList( - modifier: Modifier, - reorderingState: ReorderingState, - contentPadding: PaddingValues, - reverseLayout: Boolean, - isVertical: Boolean, - flingBehavior: FlingBehavior, - userScrollEnabled: Boolean, - horizontalAlignment: Alignment.Horizontal? = null, - verticalArrangement: Arrangement.Vertical? = null, - verticalAlignment: Alignment.Vertical? = null, - horizontalArrangement: Arrangement.Horizontal? = null, - content: LazyListScope.() -> Unit -) { - val overscrollEffect = ScrollableDefaults.overscrollEffect() - val itemProvider = rememberLazyListItemProvider(reorderingState.lazyListState, content) - val semanticState = - rememberLazyListSemanticState(reorderingState.lazyListState, itemProvider, reverseLayout, isVertical) - val beyondBoundsInfo = reorderingState.lazyListBeyondBoundsInfo - val scope = rememberCoroutineScope() - val placementAnimator = remember(reorderingState.lazyListState, isVertical) { - LazyListItemPlacementAnimator(scope, isVertical) - } - reorderingState.lazyListState.placementAnimator = placementAnimator - - val measurePolicy = rememberLazyListMeasurePolicy( - itemProvider, - reorderingState.lazyListState, - beyondBoundsInfo, - overscrollEffect, - contentPadding, - reverseLayout, - isVertical, - horizontalAlignment, - verticalAlignment, - horizontalArrangement, - verticalArrangement, - placementAnimator - ) - - val orientation = if (isVertical) Orientation.Vertical else Orientation.Horizontal - LazyLayout( - modifier = modifier - .then(reorderingState.lazyListState.remeasurementModifier) - .then(reorderingState.lazyListState.awaitLayoutModifier) - .lazyLayoutSemantics( - itemProvider = itemProvider, - state = semanticState, - orientation = orientation, - userScrollEnabled = userScrollEnabled - ) - .clipScrollableContainer(orientation) - .lazyListBeyondBoundsModifier(reorderingState.lazyListState, beyondBoundsInfo, reverseLayout) - .lazyListPinningModifier(reorderingState.lazyListState, beyondBoundsInfo) - .overscroll(overscrollEffect) - .scrollable( - orientation = orientation, - reverseDirection = ScrollableDefaults.reverseDirection( - LocalLayoutDirection.current, - orientation, - reverseLayout - ), - interactionSource = reorderingState.lazyListState.internalInteractionSource, - flingBehavior = flingBehavior, - state = reorderingState.lazyListState, - overscrollEffect = overscrollEffect, - enabled = userScrollEnabled - ), - prefetchState = reorderingState.lazyListState.prefetchState, - measurePolicy = measurePolicy, - itemProvider = itemProvider - ) -} - -@ExperimentalFoundationApi -@Composable -private fun rememberLazyListMeasurePolicy( - itemProvider: LazyListItemProvider, - state: LazyListState, - beyondBoundsInfo: LazyListBeyondBoundsInfo, - overscrollEffect: OverscrollEffect, - contentPadding: PaddingValues, - reverseLayout: Boolean, - isVertical: Boolean, - horizontalAlignment: Alignment.Horizontal? = null, - verticalAlignment: Alignment.Vertical? = null, - horizontalArrangement: Arrangement.Horizontal? = null, - verticalArrangement: Arrangement.Vertical? = null, - placementAnimator: LazyListItemPlacementAnimator -) = remember MeasureResult>( - state, - beyondBoundsInfo, - overscrollEffect, - contentPadding, - reverseLayout, - isVertical, - horizontalAlignment, - verticalAlignment, - horizontalArrangement, - verticalArrangement, - placementAnimator -) { - { containerConstraints -> - checkScrollableContainerConstraints( - containerConstraints, - if (isVertical) Orientation.Vertical else Orientation.Horizontal - ) - - val startPadding = - if (isVertical) { - contentPadding.calculateLeftPadding(layoutDirection).roundToPx() - } else { - contentPadding.calculateStartPadding(layoutDirection).roundToPx() - } - - val endPadding = - if (isVertical) { - contentPadding.calculateRightPadding(layoutDirection).roundToPx() - } else { - contentPadding.calculateEndPadding(layoutDirection).roundToPx() - } - val topPadding = contentPadding.calculateTopPadding().roundToPx() - val bottomPadding = contentPadding.calculateBottomPadding().roundToPx() - val totalVerticalPadding = topPadding + bottomPadding - val totalHorizontalPadding = startPadding + endPadding - val totalMainAxisPadding = if (isVertical) totalVerticalPadding else totalHorizontalPadding - val beforeContentPadding = when { - isVertical && !reverseLayout -> topPadding - isVertical && reverseLayout -> bottomPadding - !isVertical && !reverseLayout -> startPadding - else -> endPadding - } - val afterContentPadding = totalMainAxisPadding - beforeContentPadding - val contentConstraints = - containerConstraints.offset(-totalHorizontalPadding, -totalVerticalPadding) - - state.density = this - - itemProvider.itemScope.setMaxSize( - width = contentConstraints.maxWidth, - height = contentConstraints.maxHeight - ) - - val spaceBetweenItemsDp = if (isVertical) { - requireNotNull(verticalArrangement).spacing - } else { - requireNotNull(horizontalArrangement).spacing - } - val spaceBetweenItems = spaceBetweenItemsDp.roundToPx() - - val itemsCount = itemProvider.itemCount - - val mainAxisAvailableSize = if (isVertical) { - containerConstraints.maxHeight - totalVerticalPadding - } else { - containerConstraints.maxWidth - totalHorizontalPadding - } - val visualItemOffset = if (!reverseLayout || mainAxisAvailableSize > 0) { - IntOffset(startPadding, topPadding) - } else { - IntOffset( - if (isVertical) startPadding else startPadding + mainAxisAvailableSize, - if (isVertical) topPadding + mainAxisAvailableSize else topPadding - ) - } - - val measuredItemProvider = LazyMeasuredItemProvider( - contentConstraints, - isVertical, - itemProvider, - this - ) { index, key, placeables -> - val spacing = if (index.value == itemsCount - 1) 0 else spaceBetweenItems - LazyMeasuredItem( - index = index.value, - placeables = placeables, - isVertical = isVertical, - horizontalAlignment = horizontalAlignment, - verticalAlignment = verticalAlignment, - layoutDirection = layoutDirection, - reverseLayout = reverseLayout, - beforeContentPadding = beforeContentPadding, - afterContentPadding = afterContentPadding, - spacing = spacing, - visualOffset = visualItemOffset, - key = key, - placementAnimator = placementAnimator - ) - } - state.premeasureConstraints = measuredItemProvider.childConstraints - - val firstVisibleItemIndex: DataIndex - val firstVisibleScrollOffset: Int - Snapshot.withoutReadObservation { - firstVisibleItemIndex = DataIndex(state.firstVisibleItemIndex) - firstVisibleScrollOffset = state.firstVisibleItemScrollOffset - } - - measureLazyList( - itemsCount = itemsCount, - itemProvider = measuredItemProvider, - mainAxisAvailableSize = mainAxisAvailableSize, - beforeContentPadding = beforeContentPadding, - afterContentPadding = afterContentPadding, - spaceBetweenItems = spaceBetweenItems, - firstVisibleItemIndex = firstVisibleItemIndex, - firstVisibleItemScrollOffset = firstVisibleScrollOffset, - scrollToBeConsumed = state.scrollToBeConsumed, - constraints = contentConstraints, - isVertical = isVertical, - headerIndexes = itemProvider.headerIndexes, - verticalArrangement = verticalArrangement, - horizontalArrangement = horizontalArrangement, - reverseLayout = reverseLayout, - density = this, - placementAnimator = placementAnimator, - beyondBoundsInfo = beyondBoundsInfo, - layout = { width, height, placement -> - layout( - containerConstraints.constrainWidth(width + totalHorizontalPadding), - containerConstraints.constrainHeight(height + totalVerticalPadding), - emptyMap(), - placement - ) - } - ).also { - state.applyMeasureResult(it) - refreshOverscrollInfo(overscrollEffect, it) - } - } -} - -@OptIn(ExperimentalFoundationApi::class) -private fun refreshOverscrollInfo( - overscrollEffect: OverscrollEffect, - result: LazyListMeasureResult -) { - val canScrollForward = result.canScrollForward - val canScrollBackward = (result.firstVisibleItem?.index ?: 0) != 0 || - result.firstVisibleItemScrollOffset != 0 - - overscrollEffect.isEnabled = canScrollForward || canScrollBackward -} diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt b/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt deleted file mode 100644 index 8630c73..0000000 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt +++ /dev/null @@ -1,225 +0,0 @@ -@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") - -package it.hamy.compose.reordering - -import androidx.compose.animation.core.Animatable -import androidx.compose.animation.core.AnimationVector1D -import androidx.compose.animation.core.VectorConverter -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.lazy.LazyListBeyondBoundsInfo -import androidx.compose.foundation.lazy.LazyListItemInfo -import androidx.compose.foundation.lazy.LazyListState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Stable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateMapOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.input.pointer.PointerInputChange -import kotlin.math.roundToInt -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext - -@Stable -class ReorderingState( - val lazyListState: LazyListState, - val coroutineScope: CoroutineScope, - private val lastIndex: Int, - internal val onDragStart: () -> Unit, - internal val onDragEnd: (Int, Int) -> Unit, - private val extraItemCount: Int -) { - private lateinit var lazyListBeyondBoundsInfoInterval: LazyListBeyondBoundsInfo.Interval - internal val lazyListBeyondBoundsInfo = LazyListBeyondBoundsInfo() - internal val offset = Animatable(0, Int.VectorConverter) - - internal var draggingIndex by mutableStateOf(-1) - internal var reachedIndex by mutableStateOf(-1) - internal var draggingItemSize by mutableStateOf(0) - - lateinit var itemInfo: LazyListItemInfo - - private var previousItemSize = 0 - private var nextItemSize = 0 - - private var overscrolled = 0 - - internal var indexesToAnimate = mutableStateMapOf>() - private var animatablesPool: AnimatablesPool? = null - - val isDragging: Boolean - get() = draggingIndex != -1 - - fun onDragStart(index: Int) { - overscrolled = 0 - itemInfo = lazyListState.layoutInfo.visibleItemsInfo.find { - it.index == index + extraItemCount - } ?: return - onDragStart.invoke() - draggingIndex = index - reachedIndex = index - draggingItemSize = itemInfo.size - - nextItemSize = draggingItemSize - previousItemSize = -draggingItemSize - - offset.updateBounds( - lowerBound = -index * draggingItemSize, - upperBound = (lastIndex - index) * draggingItemSize - ) - - lazyListBeyondBoundsInfoInterval = - lazyListBeyondBoundsInfo.addInterval(index + extraItemCount, index + extraItemCount) - - val size = - lazyListState.layoutInfo.viewportEndOffset - lazyListState.layoutInfo.viewportStartOffset - - animatablesPool = AnimatablesPool(size / draggingItemSize + 2, 0, Int.VectorConverter) - } - - fun onDrag(change: PointerInputChange, dragAmount: Offset) { - if (!isDragging) return - change.consume() - - val delta = when (lazyListState.layoutInfo.orientation) { - Orientation.Vertical -> dragAmount.y - Orientation.Horizontal -> dragAmount.x - }.roundToInt() - - val targetOffset = offset.value + delta - - coroutineScope.launch { - offset.snapTo(targetOffset) - } - - if (targetOffset > nextItemSize) { - if (reachedIndex < lastIndex) { - reachedIndex += 1 - nextItemSize += draggingItemSize - previousItemSize += draggingItemSize - - val indexToAnimate = reachedIndex - if (draggingIndex < reachedIndex) 0 else 1 - - coroutineScope.launch { - val animatable = indexesToAnimate.getOrPut(indexToAnimate) { - animatablesPool?.acquire() ?: return@launch - } - - if (draggingIndex < reachedIndex) { - animatable.snapTo(0) - animatable.animateTo(-draggingItemSize) - } else { - animatable.snapTo(draggingItemSize) - animatable.animateTo(0) - } - - indexesToAnimate.remove(indexToAnimate) - animatablesPool?.release(animatable) - } - } - } else if (targetOffset < previousItemSize) { - if (reachedIndex > 0) { - reachedIndex -= 1 - previousItemSize -= draggingItemSize - nextItemSize -= draggingItemSize - - val indexToAnimate = reachedIndex + if (draggingIndex > reachedIndex) 0 else 1 - - coroutineScope.launch { - val animatable = indexesToAnimate.getOrPut(indexToAnimate) { - animatablesPool?.acquire() ?: return@launch - } - - if (draggingIndex > reachedIndex) { - animatable.snapTo(0) - animatable.animateTo(draggingItemSize) - } else { - animatable.snapTo(-draggingItemSize) - animatable.animateTo(0) - } - indexesToAnimate.remove(indexToAnimate) - animatablesPool?.release(animatable) - } - } - } else { - val offsetInViewPort = targetOffset + itemInfo.offset - overscrolled - - val topOverscroll = lazyListState.layoutInfo.viewportStartOffset + - lazyListState.layoutInfo.beforeContentPadding - offsetInViewPort - - val bottomOverscroll = lazyListState.layoutInfo.viewportEndOffset - - lazyListState.layoutInfo.afterContentPadding - offsetInViewPort - itemInfo.size - - if (topOverscroll > 0) { - overscroll(topOverscroll) - } else if (bottomOverscroll < 0) { - overscroll(bottomOverscroll) - } - } - } - - fun onDragEnd() { - if (!isDragging) return - - coroutineScope.launch { - offset.animateTo((previousItemSize + nextItemSize) / 2) - - withContext(Dispatchers.Main) { - onDragEnd.invoke(draggingIndex, reachedIndex) - } - - if (areEquals()) { - draggingIndex = -1 - reachedIndex = -1 - draggingItemSize = 0 - offset.snapTo(0) - } - - lazyListBeyondBoundsInfo.removeInterval(lazyListBeyondBoundsInfoInterval) - animatablesPool = null - } - } - - private fun overscroll(overscroll: Int) { - lazyListState.dispatchRawDelta(-overscroll.toFloat()) - coroutineScope.launch { - offset.snapTo(offset.value - overscroll) - } - overscrolled -= overscroll - } - - private fun areEquals(): Boolean { - return lazyListState.layoutInfo.visibleItemsInfo.find { - it.index + extraItemCount == draggingIndex - }?.key == lazyListState.layoutInfo.visibleItemsInfo.find { - it.index + extraItemCount == reachedIndex - }?.key - } -} - -@Composable -fun rememberReorderingState( - lazyListState: LazyListState, - key: Any, - onDragEnd: (Int, Int) -> Unit, - onDragStart: () -> Unit = {}, - extraItemCount: Int = 0 -): ReorderingState { - val coroutineScope = rememberCoroutineScope() - - return remember(key) { - ReorderingState( - lazyListState = lazyListState, - coroutineScope = coroutineScope, - lastIndex = if (key is List<*>) key.lastIndex else lazyListState.layoutInfo.totalItemsCount, - onDragStart = onDragStart, - onDragEnd = onDragEnd, - extraItemCount = extraItemCount, - ) - } -} diff --git a/compose-routing/src/main/AndroidManifest.xml b/compose-routing/src/main/AndroidManifest.xml deleted file mode 100644 index 10728cc..0000000 --- a/compose-routing/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/compose-persist/.gitignore b/compose/persist/.gitignore similarity index 100% rename from compose-persist/.gitignore rename to compose/persist/.gitignore diff --git a/compose-persist/build.gradle.kts b/compose/persist/build.gradle.kts similarity index 62% rename from compose-persist/build.gradle.kts rename to compose/persist/build.gradle.kts index 6365389..d0fcd06 100644 --- a/compose-persist/build.gradle.kts +++ b/compose/persist/build.gradle.kts @@ -1,20 +1,19 @@ plugins { - id("com.android.library") - kotlin("android") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) } android { namespace = "it.hamy.compose.persist" - compileSdk = 33 + compileSdk = 34 defaultConfig { minSdk = 21 - targetSdk = 33 } buildTypes { release { - isMinifyEnabled = true + isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) } } @@ -27,20 +26,19 @@ android { compose = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - composeOptions { kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } +} - kotlinOptions { - jvmTarget = "1.8" - } +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) } dependencies { + implementation(platform(libs.compose.bom)) implementation(libs.compose.foundation) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) } diff --git a/compose-persist/src/main/AndroidManifest.xml b/compose/persist/src/main/AndroidManifest.xml similarity index 100% rename from compose-persist/src/main/AndroidManifest.xml rename to compose/persist/src/main/AndroidManifest.xml diff --git a/compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt b/compose/persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt similarity index 50% rename from compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt rename to compose/persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt index ded6d72..36a7a94 100644 --- a/compose-persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt +++ b/compose/persist/src/main/kotlin/it/hamy/compose/persist/Persist.kt @@ -2,18 +2,23 @@ package it.hamy.compose.persist import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState +import androidx.compose.runtime.SnapshotMutationPolicy import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext +import androidx.compose.runtime.structuralEqualityPolicy @Suppress("UNCHECKED_CAST") @Composable -fun persist(tag: String, initialValue: T): MutableState { - val context = LocalContext.current +fun persist( + tag: String, + initialValue: T, + policy: SnapshotMutationPolicy = structuralEqualityPolicy() +): MutableState { + val persistMap = LocalPersistMap.current - return remember { - context.persistMap?.getOrPut(tag) { mutableStateOf(initialValue) } as? MutableState - ?: mutableStateOf(initialValue) + return remember(persistMap) { + persistMap?.map?.getOrPut(tag) { mutableStateOf(initialValue, policy) } as? MutableState + ?: mutableStateOf(initialValue, policy) } } diff --git a/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt b/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt new file mode 100644 index 0000000..dcb01cf --- /dev/null +++ b/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMap.kt @@ -0,0 +1,16 @@ +package it.hamy.compose.persist + +import android.util.Log +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.compositionLocalOf + +@JvmInline +value class PersistMap(val map: MutableMap> = hashMapOf()) { + fun clean(prefix: String) = map.keys.removeAll { it.startsWith(prefix) } +} + +val LocalPersistMap = compositionLocalOf { + Log.e("PersistMap", "Tried to reference uninitialized PersistMap, stacktrace:") + runCatching { error("Stack:") }.exceptionOrNull()?.printStackTrace() + null +} diff --git a/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt b/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt new file mode 100644 index 0000000..7f563b3 --- /dev/null +++ b/compose/persist/src/main/kotlin/it/hamy/compose/persist/PersistMapCleanup.kt @@ -0,0 +1,30 @@ +package it.hamy.compose.persist + +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.platform.LocalContext + +@Composable +fun PersistMapCleanup(prefix: String) { + val context = LocalContext.current + val persistMap = LocalPersistMap.current + + DisposableEffect(persistMap) { + onDispose { + if (context.findActivityNullable()?.isChangingConfigurations == false) + persistMap?.clean(prefix) + } + } +} + +fun Context.findActivityNullable(): Activity? { + var current = this + while (current is ContextWrapper) { + if (current is Activity) return current + current = current.baseContext + } + return null +} diff --git a/compose-reordering/.gitignore b/compose/preferences/.gitignore similarity index 100% rename from compose-reordering/.gitignore rename to compose/preferences/.gitignore diff --git a/compose/preferences/build.gradle.kts b/compose/preferences/build.gradle.kts new file mode 100644 index 0000000..96ad0b0 --- /dev/null +++ b/compose/preferences/build.gradle.kts @@ -0,0 +1,48 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "it.hamy.compose.preferences" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) + } + } + + sourceSets.all { + kotlin.srcDir("src/$name/kotlin") + } + + buildFeatures { + compose = true + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() + } +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} + +dependencies { + implementation(platform(libs.compose.bom)) + implementation(libs.compose.foundation) + + implementation(libs.core.ktx) + + implementation(libs.kotlin.coroutines) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} diff --git a/compose/preferences/src/main/AndroidManifest.xml b/compose/preferences/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e100076 --- /dev/null +++ b/compose/preferences/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/kotlin/it/hamy/muza/preferences/PreferencesHolder.kt b/compose/preferences/src/main/kotlin/it/hamy/compose/preferences/PreferencesHolders.kt similarity index 67% rename from app/src/main/kotlin/it/hamy/muza/preferences/PreferencesHolder.kt rename to compose/preferences/src/main/kotlin/it/hamy/compose/preferences/PreferencesHolders.kt index e938e21..1aa882a 100644 --- a/app/src/main/kotlin/it/hamy/muza/preferences/PreferencesHolder.kt +++ b/compose/preferences/src/main/kotlin/it/hamy/compose/preferences/PreferencesHolders.kt @@ -1,14 +1,17 @@ -package it.hamy.muza.preferences +package it.hamy.compose.preferences import android.app.Application import android.content.Context import android.content.SharedPreferences import android.content.SharedPreferences.OnSharedPreferenceChangeListener +import androidx.compose.runtime.Stable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.snapshots.Snapshot import androidx.core.content.edit import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -19,16 +22,35 @@ fun sharedPreferencesProperty( getValue: SharedPreferences.(key: String) -> T, setValue: SharedPreferences.Editor.(key: String, value: T) -> Unit, defaultValue: T -) = object : ReadWriteProperty { - private var state = mutableStateOf(defaultValue) +) = SharedPreferencesProperty( + get = getValue, + set = setValue, + default = defaultValue +) + +@Stable +data class SharedPreferencesProperty internal constructor( + private val get: SharedPreferences.(key: String) -> T, + private val set: SharedPreferences.Editor.(key: String, value: T) -> Unit, + private val default: T +) : ReadWriteProperty { + private val state = mutableStateOf(default) + val stateFlow = MutableStateFlow(default) // TODO: hotfix private var listener: OnSharedPreferenceChangeListener? = null + private fun setState(newValue: T) { + state.value = newValue + stateFlow.update { newValue } + } + override fun getValue(thisRef: PreferencesHolder, property: KProperty<*>): T { - if (listener == null && !Snapshot.current.readOnly) { - state.value = thisRef.getValue(property.name) + if (listener == null && !Snapshot.current.readOnly && !Snapshot.current.root.readOnly) { + setState(thisRef.get(property.name)) + listener = OnSharedPreferenceChangeListener { preferences, key -> - if (key == property.name) preferences.getValue(property.name) - .let { if (it != state && !Snapshot.current.readOnly) state.value = it } + if (key == property.name) preferences.get(property.name).let { + if (it != state.value && !Snapshot.current.readOnly) setState(it) + } } thisRef.registerOnSharedPreferenceChangeListener(listener) } @@ -38,16 +60,17 @@ fun sharedPreferencesProperty( override fun setValue(thisRef: PreferencesHolder, property: KProperty<*>, value: T) = coroutineScope.launch { thisRef.edit(commit = true) { - setValue(property.name, value) + set(property.name, value) } }.let { } } /** * A snapshottable, thread-safe, compose-first, extensible SharedPreferences wrapper that supports - * virtually all types, and if it doesn't, one could simply type `fun myNewType(...) = sharedPreferencesProperty(...)` - * and start implementing. Starts off as given defaultValue until we are allowed to subscribe to SharedPreferences - * @sample AppearancePreferences + * virtually all types, and if it doesn't, one could simply type + * `fun myNewType(...) = sharedPreferencesProperty(...)` and start implementing. Starts off as given + * defaultValue until we are allowed to subscribe to SharedPreferences. Caution: the type of the + * preference has to be [Stable], otherwise UB will occur. */ open class PreferencesHolder( application: Application, @@ -86,7 +109,8 @@ open class PreferencesHolder( inline fun > enum(defaultValue: T) = sharedPreferencesProperty( getValue = { - getString(it, null)?.let { runCatching { enumValueOf(it) }.getOrNull() } ?: defaultValue + getString(it, null)?.let { runCatching { enumValueOf(it) }.getOrNull() } + ?: defaultValue }, setValue = { k, v -> putString(k, v.name) }, defaultValue @@ -97,4 +121,4 @@ open class PreferencesHolder( setValue = { k, v -> putStringSet(k, v) }, defaultValue ) -} \ No newline at end of file +} diff --git a/compose-routing/.gitignore b/compose/reordering/.gitignore similarity index 100% rename from compose-routing/.gitignore rename to compose/reordering/.gitignore diff --git a/compose-reordering/build.gradle.kts b/compose/reordering/build.gradle.kts similarity index 54% rename from compose-reordering/build.gradle.kts rename to compose/reordering/build.gradle.kts index 4f01d5e..0e36706 100644 --- a/compose-reordering/build.gradle.kts +++ b/compose/reordering/build.gradle.kts @@ -1,47 +1,44 @@ plugins { - id("com.android.library") - kotlin("android") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) } android { namespace = "it.hamy.compose.reordering" - compileSdk = 33 + compileSdk = 34 defaultConfig { minSdk = 21 - targetSdk = 33 } buildTypes { release { - isMinifyEnabled = true + isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) } } - sourceSets.all { - kotlin.srcDir("src/$name/kotlin") - } - buildFeatures { compose = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - composeOptions { kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } kotlinOptions { - freeCompilerArgs += "-Xcontext-receivers" - jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + listOf("-Xcontext-receivers") } } -dependencies { - implementation(libs.compose.foundation) +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} + +dependencies { + implementation(platform(libs.compose.bom)) + implementation(libs.compose.foundation) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) } diff --git a/compose/reordering/src/main/AndroidManifest.xml b/compose/reordering/src/main/AndroidManifest.xml new file mode 100644 index 0000000..568741e --- /dev/null +++ b/compose/reordering/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt similarity index 63% rename from compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt rename to compose/reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt index 074eb5c..8bbbf6a 100644 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt +++ b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/AnimatablesPool.kt @@ -21,18 +21,14 @@ class AnimatablesPool( require(size > 0) } - suspend fun acquire(): Animatable? { - return mutex.withLock { - if (values.isNotEmpty()) values.removeFirst() else null - } + suspend fun acquire() = mutex.withLock { + if (values.isNotEmpty()) values.removeFirst() else null } - suspend fun release(animatable: Animatable) { - mutex.withLock { - if (values.size < size) { - animatable.snapTo(initialValue) - values.add(animatable) - } + suspend fun release(animatable: Animatable) = mutex.withLock { + if (values.size < size) { + animatable.snapTo(initialValue) + values.add(animatable) } } } diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt similarity index 100% rename from compose-reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt rename to compose/reordering/src/main/kotlin/it/hamy/compose/reordering/AnimateItemPlacement.kt diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt similarity index 52% rename from compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt rename to compose/reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt index cf88a37..9c7dab1 100644 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt +++ b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/DraggedItem.kt @@ -1,14 +1,23 @@ package it.hamy.compose.reordering +import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.offset +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.layout.LocalPinnableContainer +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex fun Modifier.draggedItem( reorderingState: ReorderingState, - index: Int + index: Int, + draggedElevation: Dp = 4.dp ): Modifier = when (reorderingState.draggingIndex) { -1 -> this index -> offset { @@ -17,11 +26,12 @@ fun Modifier.draggedItem( Orientation.Horizontal -> IntOffset(reorderingState.offset.value, 0) } }.zIndex(1f) + else -> offset { - val offset = when (index) { + val offset = when (index) { in reorderingState.indexesToAnimate -> reorderingState.indexesToAnimate.getValue(index).value in (reorderingState.draggingIndex + 1)..reorderingState.reachedIndex -> -reorderingState.draggingItemSize - in reorderingState.reachedIndex until reorderingState.draggingIndex -> reorderingState.draggingItemSize + in reorderingState.reachedIndex.. reorderingState.draggingItemSize else -> 0 } when (reorderingState.lazyListState.layoutInfo.orientation) { @@ -29,4 +39,20 @@ fun Modifier.draggedItem( Orientation.Horizontal -> IntOffset(offset, 0) } } +}.composed { + val container = LocalPinnableContainer.current + val elevation by animateDpAsState( + targetValue = if (reorderingState.draggingIndex == index) draggedElevation else 0.dp, + label = "" + ) + + DisposableEffect(reorderingState.draggingIndex) { + val handle = if (reorderingState.draggingIndex == index) container?.pin() else null + + onDispose { + handle?.release() + } + } + + this.shadow(elevation = elevation) } diff --git a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt similarity index 66% rename from compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt rename to compose/reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt index bfdc9fa..11856e0 100644 --- a/compose-reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt +++ b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/Reorder.kt @@ -1,7 +1,6 @@ package it.hamy.compose.reordering import androidx.compose.foundation.gestures.detectDragGestures -import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange @@ -11,34 +10,25 @@ import androidx.compose.ui.input.pointer.pointerInput private fun Modifier.reorder( reorderingState: ReorderingState, index: Int, - detectDragGestures: DetectDragGestures, -): Modifier = pointerInput(reorderingState) { + detectDragGestures: DetectDragGestures +) = this.pointerInput(reorderingState) { with(detectDragGestures) { detectDragGestures( onDragStart = { reorderingState.onDragStart(index) }, onDrag = reorderingState::onDrag, onDragEnd = reorderingState::onDragEnd, - onDragCancel = reorderingState::onDragEnd, + onDragCancel = reorderingState::onDragEnd ) } } fun Modifier.reorder( - reorderingState: ReorderingState, - index: Int, -): Modifier = reorder( - reorderingState = reorderingState, - index = index, - detectDragGestures = PointerInputScope::detectDragGestures, -) - -fun Modifier.reorderAfterLongPress( reorderingState: ReorderingState, index: Int -): Modifier = reorder( +) = this.reorder( reorderingState = reorderingState, index = index, - detectDragGestures = PointerInputScope::detectDragGesturesAfterLongPress, + detectDragGestures = PointerInputScope::detectDragGestures ) private fun interface DetectDragGestures { diff --git a/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt new file mode 100644 index 0000000..67e1cfc --- /dev/null +++ b/compose/reordering/src/main/kotlin/it/hamy/compose/reordering/ReorderingState.kt @@ -0,0 +1,224 @@ +package it.hamy.compose.reordering + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.AnimationVector1D +import androidx.compose.animation.core.VectorConverter +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.scrollBy +import androidx.compose.foundation.lazy.LazyListItemInfo +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.PointerInputChange +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlin.math.roundToInt + +@Stable +class ReorderingState( + val lazyListState: LazyListState, + val coroutineScope: CoroutineScope, + private val lastIndex: Int, + internal val onDragStart: () -> Unit, + internal val onDragEnd: (Int, Int) -> Unit, + private val extraItemCount: Int +) { + internal val offset = Animatable(0, Int.VectorConverter) + + internal var draggingIndex by mutableIntStateOf(-1) + internal var reachedIndex by mutableIntStateOf(-1) + internal var draggingItemSize by mutableIntStateOf(0) + + private lateinit var itemInfo: LazyListItemInfo + + private var previousItemSize = 0 + private var nextItemSize = 0 + + private var overscrolled = 0 + + internal var indexesToAnimate = mutableStateMapOf>() + private var animatablesPool: AnimatablesPool? = null + + val isDragging: Boolean + get() = draggingIndex != -1 + + fun onDragStart(index: Int) { + overscrolled = 0 + itemInfo = lazyListState.layoutInfo.visibleItemsInfo + .find { it.index == index + extraItemCount } ?: return + + onDragStart() + draggingIndex = index + reachedIndex = index + draggingItemSize = itemInfo.size + + nextItemSize = draggingItemSize + previousItemSize = -draggingItemSize + + offset.updateBounds( + lowerBound = -index * draggingItemSize, + upperBound = (lastIndex - index) * draggingItemSize + ) + + animatablesPool = AnimatablesPool( + size = (lazyListState.layoutInfo.viewportEndOffset - lazyListState.layoutInfo.viewportStartOffset) / + (draggingItemSize + 2), + initialValue = 0, + typeConverter = Int.VectorConverter + ) + } + + @Suppress("CyclomaticComplexMethod") + fun onDrag(change: PointerInputChange, dragAmount: Offset) { + if (!isDragging) return + + change.consume() + + val delta = when (lazyListState.layoutInfo.orientation) { + Orientation.Vertical -> dragAmount.y + Orientation.Horizontal -> dragAmount.x + }.roundToInt() + + val targetOffset = offset.value + delta + + coroutineScope.launch { offset.snapTo(targetOffset) } + + when { + targetOffset > nextItemSize -> { + if (reachedIndex < lastIndex) { + reachedIndex += 1 + nextItemSize += draggingItemSize + previousItemSize += draggingItemSize + + val indexToAnimate = reachedIndex - if (draggingIndex < reachedIndex) 0 else 1 + + coroutineScope.launch { + val animatable = indexesToAnimate.getOrPut(indexToAnimate) { + animatablesPool?.acquire() ?: return@launch + } + + if (draggingIndex < reachedIndex) { + animatable.snapTo(0) + animatable.animateTo(-draggingItemSize) + } else { + animatable.snapTo(draggingItemSize) + animatable.animateTo(0) + } + + indexesToAnimate.remove(indexToAnimate) + animatablesPool?.release(animatable) + } + } + } + + targetOffset < previousItemSize -> { + if (reachedIndex > 0) { + reachedIndex -= 1 + previousItemSize -= draggingItemSize + nextItemSize -= draggingItemSize + + val indexToAnimate = reachedIndex + if (draggingIndex > reachedIndex) 0 else 1 + + coroutineScope.launch { + val animatable = indexesToAnimate.getOrPut(indexToAnimate) { + animatablesPool?.acquire() ?: return@launch + } + + if (draggingIndex > reachedIndex) { + animatable.snapTo(0) + animatable.animateTo(draggingItemSize) + } else { + animatable.snapTo(-draggingItemSize) + animatable.animateTo(0) + } + indexesToAnimate.remove(indexToAnimate) + animatablesPool?.release(animatable) + } + } + } + + else -> { + val offsetInViewPort = targetOffset + itemInfo.offset - overscrolled + + val topOverscroll = lazyListState.layoutInfo.viewportStartOffset + + lazyListState.layoutInfo.beforeContentPadding - offsetInViewPort + val bottomOverscroll = lazyListState.layoutInfo.viewportEndOffset - + lazyListState.layoutInfo.afterContentPadding - offsetInViewPort - itemInfo.size + + if (topOverscroll > 0) overscroll(topOverscroll) else if (bottomOverscroll < 0) + overscroll(bottomOverscroll) + } + } + } + + fun onDragEnd() { + if (!isDragging) return + + coroutineScope.launch { + offset.animateTo((previousItemSize + nextItemSize) / 2) + + withContext(Dispatchers.Main) { onDragEnd(draggingIndex, reachedIndex) } + + if (areEquals()) { + draggingIndex = -1 + reachedIndex = -1 + draggingItemSize = 0 + offset.snapTo(0) + } + + animatablesPool = null + } + } + + private fun overscroll(overscroll: Int) { + val newHeight = itemInfo.offset - overscroll + @Suppress("ComplexCondition") + if ( + !(overscroll > 0 && newHeight <= lazyListState.layoutInfo.viewportEndOffset) && + !(overscroll < 0 && newHeight >= lazyListState.layoutInfo.viewportStartOffset) + ) return + + coroutineScope.launch { + lazyListState.scrollBy(-overscroll.toFloat()) + offset.snapTo(offset.value - overscroll) + } + overscrolled -= overscroll + } + + private fun areEquals() = lazyListState.layoutInfo.visibleItemsInfo.find { + it.index + extraItemCount == draggingIndex + }?.key == lazyListState.layoutInfo.visibleItemsInfo.find { + it.index + extraItemCount == reachedIndex + }?.key +} + +@Composable +fun rememberReorderingState( + lazyListState: LazyListState, + key: Any, + onDragEnd: (Int, Int) -> Unit, + onDragStart: () -> Unit = {}, + extraItemCount: Int = 0 +): ReorderingState { + val coroutineScope = rememberCoroutineScope() + + return remember(key) { + ReorderingState( + lazyListState = lazyListState, + coroutineScope = coroutineScope, + lastIndex = if (key is List<*>) key.lastIndex else lazyListState.layoutInfo.totalItemsCount, + onDragStart = onDragStart, + onDragEnd = onDragEnd, + extraItemCount = extraItemCount + ) + } +} diff --git a/innertube/.gitignore b/compose/routing/.gitignore similarity index 100% rename from innertube/.gitignore rename to compose/routing/.gitignore diff --git a/compose-routing/build.gradle.kts b/compose/routing/build.gradle.kts similarity index 54% rename from compose-routing/build.gradle.kts rename to compose/routing/build.gradle.kts index 474e8be..4d9b05a 100644 --- a/compose-routing/build.gradle.kts +++ b/compose/routing/build.gradle.kts @@ -1,48 +1,46 @@ plugins { - id("com.android.library") - kotlin("android") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) } android { namespace = "it.hamy.compose.routing" - compileSdk = 33 + compileSdk = 34 defaultConfig { minSdk = 21 - targetSdk = 33 } buildTypes { release { - isMinifyEnabled = true + isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) } } - sourceSets.all { - kotlin.srcDir("src/$name/kotlin") - } - buildFeatures { compose = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - composeOptions { kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } kotlinOptions { - freeCompilerArgs += "-Xcontext-receivers" - jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + listOf("-Xcontext-receivers") } } +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} + dependencies { + implementation(platform(libs.compose.bom)) implementation(libs.compose.activity) implementation(libs.compose.foundation) + implementation(libs.compose.animation) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) } diff --git a/compose/routing/src/main/AndroidManifest.xml b/compose/routing/src/main/AndroidManifest.xml new file mode 100644 index 0000000..568741e --- /dev/null +++ b/compose/routing/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/compose-routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt b/compose/routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt similarity index 100% rename from compose-routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt rename to compose/routing/src/main/kotlin/it/hamy/compose/routing/GlobalRoute.kt diff --git a/compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt b/compose/routing/src/main/kotlin/it/hamy/compose/routing/Route.kt similarity index 54% rename from compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt rename to compose/routing/src/main/kotlin/it/hamy/compose/routing/Route.kt index ad202cd..45e4032 100644 --- a/compose-routing/src/main/kotlin/it/hamy/compose/routing/Route.kt +++ b/compose/routing/src/main/kotlin/it/hamy/compose/routing/Route.kt @@ -10,21 +10,17 @@ import kotlinx.coroutines.flow.first @Immutable open class Route internal constructor(val tag: String) { - override fun equals(other: Any?): Boolean { - return when { - this === other -> true - other is Route -> tag == other.tag - else -> false - } + override fun equals(other: Any?) = when { + this === other -> true + other is Route -> tag == other.tag + else -> false } - override fun hashCode(): Int { - return tag.hashCode() - } + override fun hashCode() = tag.hashCode() object Saver : androidx.compose.runtime.saveable.Saver { override fun restore(value: String): Route? = value.takeIf(String::isNotEmpty)?.let(::Route) - override fun SaverScope.save(value: Route?): String = value?.tag ?: "" + override fun SaverScope.save(value: Route?): String = value?.tag.orEmpty() } } @@ -33,14 +29,17 @@ class Route0(tag: String) : Route(tag) { context(RouteHandlerScope) @Composable operator fun invoke(content: @Composable () -> Unit) { - if (this == route) { - content() - } + if (this == route) content() } fun global() { globalRouteFlow.tryEmit(this to emptyArray()) } + + suspend fun ensureGlobal() { + globalRouteFlow.subscriptionCount.filter { it > 0 }.first() + globalRouteFlow.emit(this to arrayOf()) + } } @Immutable @@ -48,9 +47,7 @@ class Route1(tag: String) : Route(tag) { context(RouteHandlerScope) @Composable operator fun invoke(content: @Composable (P0) -> Unit) { - if (this == route) { - content(parameters[0] as P0) - } + if (this == route) content(parameters[0] as P0) } fun global(p0: P0) { @@ -68,12 +65,33 @@ class Route2(tag: String) : Route(tag) { context(RouteHandlerScope) @Composable operator fun invoke(content: @Composable (P0, P1) -> Unit) { - if (this == route) { - content(parameters[0] as P0, parameters[1] as P1) - } + if (this == route) content(parameters[0] as P0, parameters[1] as P1) } fun global(p0: P0, p1: P1) { globalRouteFlow.tryEmit(this to arrayOf(p0, p1)) } + + suspend fun ensureGlobal(p0: P0, p1: P1) { + globalRouteFlow.subscriptionCount.filter { it > 0 }.first() + globalRouteFlow.emit(this to arrayOf(p0, p1)) + } +} + +@Immutable +class Route3(tag: String) : Route(tag) { + context(RouteHandlerScope) + @Composable + operator fun invoke(content: @Composable (P0, P1, P2) -> Unit) { + if (this == route) content(parameters[0] as P0, parameters[1] as P1, parameters[2] as P2) + } + + fun global(p0: P0, p1: P1, p2: P2) { + globalRouteFlow.tryEmit(this to arrayOf(p0, p1, p2)) + } + + suspend fun ensureGlobal(p0: P0, p1: P1, p2: P2) { + globalRouteFlow.subscriptionCount.filter { it > 0 }.first() + globalRouteFlow.emit(this to arrayOf(p0, p1, p2)) + } } diff --git a/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt b/compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt similarity index 88% rename from compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt rename to compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt index 4a8df5f..47e4c42 100644 --- a/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt +++ b/compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandler.kt @@ -3,7 +3,7 @@ package it.hamy.compose.routing import androidx.activity.compose.BackHandler import androidx.activity.compose.LocalOnBackPressedDispatcherOwner import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedContentScope +import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.ContentTransform import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.core.updateTransition @@ -15,13 +15,13 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -@ExperimentalAnimationApi +@OptIn(ExperimentalAnimationApi::class) @Composable fun RouteHandler( modifier: Modifier = Modifier, listenToGlobalEmitter: Boolean = false, handleBackPress: Boolean = true, - transitionSpec: AnimatedContentScope.() -> ContentTransform = { + transitionSpec: AnimatedContentTransitionScope.() -> ContentTransform = { when { isStacking -> defaultStacking isStill -> defaultStill @@ -53,7 +53,7 @@ fun RouteHandler( modifier: Modifier = Modifier, listenToGlobalEmitter: Boolean = false, handleBackPress: Boolean = true, - transitionSpec: AnimatedContentScope.() -> ContentTransform = { + transitionSpec: AnimatedContentTransitionScope.() -> ContentTransform = { when { isStacking -> defaultStacking isStill -> defaultStill @@ -65,7 +65,7 @@ fun RouteHandler( val backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher val parameters = rememberSaveable { - arrayOfNulls(2) + arrayOfNulls(3) } val scope = remember(route) { @@ -91,7 +91,7 @@ fun RouteHandler( updateTransition(targetState = scope, label = null).AnimatedContent( transitionSpec = transitionSpec, contentKey = RouteHandlerScope::route, - modifier = modifier, + modifier = modifier ) { it.content() } diff --git a/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt b/compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt similarity index 63% rename from compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt rename to compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt index 530177b..51f6d45 100644 --- a/compose-routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt +++ b/compose/routing/src/main/kotlin/it/hamy/compose/routing/RouteHandlerScope.kt @@ -1,6 +1,5 @@ package it.hamy.compose.routing -import android.annotation.SuppressLint import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable @@ -9,19 +8,14 @@ class RouteHandlerScope( val route: Route?, val parameters: Array, private val push: (Route?) -> Unit, - val pop: () -> Unit, + val pop: () -> Unit ) { - @SuppressLint("ComposableNaming") @Composable - inline fun host(content: @Composable () -> Unit) { - if (route == null) { - content() - } + inline fun NavHost(content: @Composable () -> Unit) { + if (route == null) content() } - operator fun Route.invoke() { - push(this) - } + operator fun Route.invoke() = push(this) operator fun Route.invoke(p0: P0) { parameters[0] = p0 @@ -32,4 +26,9 @@ class RouteHandlerScope( parameters[1] = p1 invoke(p0) } + + operator fun Route.invoke(p0: P0, p1: P1, p2: P2) { + parameters[2] = p2 + invoke(p0, p1) + } } diff --git a/compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt b/compose/routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt similarity index 79% rename from compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt rename to compose/routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt index 3a9781d..1bd5db4 100644 --- a/compose-routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt +++ b/compose/routing/src/main/kotlin/it/hamy/compose/routing/Transitions.kt @@ -1,6 +1,6 @@ package it.hamy.compose.routing -import androidx.compose.animation.AnimatedContentScope +import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.ContentTransform import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExperimentalAnimationApi @@ -30,17 +30,17 @@ val defaultStill = ContentTransform( ) @ExperimentalAnimationApi -inline val AnimatedContentScope.isStacking: Boolean +val AnimatedContentTransitionScope.isStacking: Boolean get() = initialState.route == null && targetState.route != null @ExperimentalAnimationApi -inline val AnimatedContentScope.isUnstacking: Boolean +val AnimatedContentTransitionScope.isUnstacking: Boolean get() = initialState.route != null && targetState.route == null @ExperimentalAnimationApi -inline val AnimatedContentScope.isStill: Boolean +val AnimatedContentTransitionScope.isStill: Boolean get() = initialState.route == null && targetState.route == null @ExperimentalAnimationApi -inline val AnimatedContentScope.isUnknown: Boolean +val AnimatedContentTransitionScope.isUnknown: Boolean get() = initialState.route != null && targetState.route != null diff --git a/core/data/.gitignore b/core/data/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/core/data/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts new file mode 100644 index 0000000..17517c6 --- /dev/null +++ b/core/data/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + alias(libs.plugins.kotlin.android) + alias(libs.plugins.android.library) +} + +android { + namespace = "it.hamy.compose.core.data" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} + +dependencies { + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} diff --git a/core/data/src/main/AndroidManifest.xml b/core/data/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e100076 --- /dev/null +++ b/core/data/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/kotlin/it/hamy/muza/enums/AlbumSortBy.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/AlbumSortBy.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/AlbumSortBy.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/AlbumSortBy.kt diff --git a/app/src/main/kotlin/it/hamy/muza/enums/ArtistSortBy.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/ArtistSortBy.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/ArtistSortBy.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/ArtistSortBy.kt diff --git a/app/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt similarity index 77% rename from app/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt index fd10aa6..0369475 100644 --- a/app/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt +++ b/core/data/src/main/kotlin/it/hamy/muza/enums/BuiltInPlaylist.kt @@ -2,5 +2,6 @@ package it.hamy.muza.enums enum class BuiltInPlaylist { Favorites, - Offline + Offline, + Top } diff --git a/core/data/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt new file mode 100644 index 0000000..4429ffb --- /dev/null +++ b/core/data/src/main/kotlin/it/hamy/muza/enums/CoilDiskCacheSize.kt @@ -0,0 +1,13 @@ +package it.hamy.muza.enums + +import it.hamy.muza.utils.mb + +@Suppress("unused", "EnumEntryName") +enum class CoilDiskCacheSize(val bytes: Long) { + `64MB`(bytes = 64.mb), + `128MB`(bytes = 128.mb), + `256MB`(bytes = 256.mb), + `512MB`(bytes = 512.mb), + `1GB`(bytes = 1024.mb), + `2GB`(bytes = 2048.mb) +} diff --git a/core/data/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheSize.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheSize.kt new file mode 100644 index 0000000..0e1ae3f --- /dev/null +++ b/core/data/src/main/kotlin/it/hamy/muza/enums/ExoPlayerDiskCacheSize.kt @@ -0,0 +1,17 @@ +package it.hamy.muza.enums + +import it.hamy.muza.utils.mb + +@Suppress("EnumEntryName", "unused") +enum class ExoPlayerDiskCacheSize(val bytes: Long) { + `32MB`(bytes = 32.mb), + `64MB`(bytes = 64.mb), + `128MB`(bytes = 128.mb), + `256MB`(bytes = 256.mb), + `512MB`(bytes = 512.mb), + `1GB`(bytes = 1024.mb), + `2GB`(bytes = 2048.mb), + `4GB`(bytes = 4096.mb), + `8GB`(bytes = 8192.mb), + Unlimited(bytes = 0) +} diff --git a/app/src/main/kotlin/it/hamy/muza/enums/PlaylistSortBy.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/PlaylistSortBy.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/PlaylistSortBy.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/PlaylistSortBy.kt diff --git a/app/src/main/kotlin/it/hamy/muza/enums/SongSortBy.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/SongSortBy.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/SongSortBy.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/SongSortBy.kt diff --git a/app/src/main/kotlin/it/hamy/muza/enums/SortOrder.kt b/core/data/src/main/kotlin/it/hamy/muza/enums/SortOrder.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/SortOrder.kt rename to core/data/src/main/kotlin/it/hamy/muza/enums/SortOrder.kt diff --git a/core/data/src/main/kotlin/it/hamy/muza/utils/Bytes.kt b/core/data/src/main/kotlin/it/hamy/muza/utils/Bytes.kt new file mode 100644 index 0000000..b49609c --- /dev/null +++ b/core/data/src/main/kotlin/it/hamy/muza/utils/Bytes.kt @@ -0,0 +1,3 @@ +package it.hamy.muza.utils + +val Int.mb get() = this * 1_048_576L diff --git a/core/data/src/main/kotlin/it/hamy/muza/utils/Versions.kt b/core/data/src/main/kotlin/it/hamy/muza/utils/Versions.kt new file mode 100644 index 0000000..1258432 --- /dev/null +++ b/core/data/src/main/kotlin/it/hamy/muza/utils/Versions.kt @@ -0,0 +1,20 @@ +package it.hamy.muza.utils + +inline val String.version get() = Version(value = this) + +@JvmInline +value class Version(private val parts: List) { + constructor(value: String) : this(value.split(".").mapNotNull { it.toIntOrNull() }) + + val major get() = parts.firstOrNull() + val minor get() = parts.getOrNull(1) + val patch get() = parts.getOrNull(2) + + companion object { + private val comparator = compareBy { it.major } then + compareBy { it.minor } then + compareBy { it.patch } + } + + operator fun compareTo(other: Version) = comparator.compare(this, other) +} diff --git a/core/ui/.gitignore b/core/ui/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/core/ui/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts new file mode 100644 index 0000000..54ca7a7 --- /dev/null +++ b/core/ui/build.gradle.kts @@ -0,0 +1,50 @@ +plugins { + alias(libs.plugins.kotlin.android) + alias(libs.plugins.android.library) +} + +android { + namespace = "it.hamy.compose.core.ui" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + + sourceSets.all { + kotlin.srcDir("src/$name/kotlin") + } + + buildFeatures { + compose = true + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() + } + + kotlinOptions { + freeCompilerArgs = freeCompilerArgs + listOf("-Xcontext-receivers") + } +} + +dependencies { + implementation(projects.core.data) + + implementation(platform(libs.compose.bom)) + implementation(libs.compose.animation) + implementation(libs.compose.foundation) + implementation(libs.compose.ripple) + implementation(libs.compose.shimmer) + implementation(libs.compose.ui) + implementation(libs.compose.ui.util) + implementation(libs.compose.material3) + implementation(libs.palette) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} \ No newline at end of file diff --git a/core/ui/src/main/AndroidManifest.xml b/core/ui/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e100076 --- /dev/null +++ b/core/ui/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/core/ui/src/main/kotlin/it/hamy/muza/Extensions.kt b/core/ui/src/main/kotlin/it/hamy/muza/Extensions.kt new file mode 100644 index 0000000..b59f908 --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/Extensions.kt @@ -0,0 +1,6 @@ +package it.hamy.muza + +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.ui.unit.Dp + +val Dp.roundedShape get() = RoundedCornerShape(this) diff --git a/app/src/main/kotlin/it/hamy/muza/enums/ColorPaletteMode.kt b/core/ui/src/main/kotlin/it/hamy/muza/enums/ColorPaletteMode.kt similarity index 100% rename from app/src/main/kotlin/it/hamy/muza/enums/ColorPaletteMode.kt rename to core/ui/src/main/kotlin/it/hamy/muza/enums/ColorPaletteMode.kt diff --git a/app/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt b/core/ui/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt similarity index 76% rename from app/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt rename to core/ui/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt index 974b253..2f902ee 100644 --- a/app/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt +++ b/core/ui/src/main/kotlin/it/hamy/muza/enums/ColorPaletteName.kt @@ -3,5 +3,6 @@ package it.hamy.muza.enums enum class ColorPaletteName { Default, Dynamic, - PureBlack + PureBlack, + AMOLED } diff --git a/core/ui/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt b/core/ui/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt new file mode 100644 index 0000000..c3cbcb4 --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/enums/ThumbnailRoundness.kt @@ -0,0 +1,16 @@ +package it.hamy.muza.enums + +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import it.hamy.muza.roundedShape + +enum class ThumbnailRoundness(val dp: Dp) { + None(0.dp), + Light(2.dp), + Medium(8.dp), + Heavy(12.dp), + Heavier(16.dp), + Heaviest(16.dp); + + val shape get() = dp.roundedShape +} diff --git a/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt new file mode 100644 index 0000000..5618831 --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Appearance.kt @@ -0,0 +1,34 @@ +package it.hamy.muza.ui.styling + +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.SaverScope +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import it.hamy.muza.roundedShape + +data class Appearance( + val colorPalette: ColorPalette, + val typography: Typography, + val thumbnailShapeCorners: Dp +) { + val thumbnailShape = thumbnailShapeCorners.roundedShape + operator fun component4() = thumbnailShape + + companion object AppearanceSaver : Saver> { + @Suppress("UNCHECKED_CAST") + override fun restore(value: List) = Appearance( + colorPalette = ColorPalette.restore(value[0] as List), + typography = Typography.restore(value[1] as List), + thumbnailShapeCorners = (value[2] as Float).dp + ) + + override fun SaverScope.save(value: Appearance) = listOf( + with(ColorPalette.Companion) { save(value.colorPalette) }, + with(Typography.Companion) { save(value.typography) }, + value.thumbnailShapeCorners.value + ) + } +} + +val LocalAppearance by lazy { staticCompositionLocalOf { error("No appearance provided") } } diff --git a/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt new file mode 100644 index 0000000..e67e49f --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/ColorPalette.kt @@ -0,0 +1,221 @@ +package it.hamy.muza.ui.styling + +import android.graphics.Bitmap +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.SaverScope +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.core.graphics.ColorUtils +import androidx.palette.graphics.Palette +import it.hamy.muza.enums.ColorPaletteMode +import it.hamy.muza.enums.ColorPaletteName + +@Immutable +data class ColorPalette( + val background0: Color, + val background1: Color, + val background2: Color, + val accent: Color, + val onAccent: Color, + val red: Color = Color(0xffbf4040), + val blue: Color = Color(0xff4472cf), + val text: Color, + val textSecondary: Color, + val textDisabled: Color, + val isDark: Boolean, + val isAmoled: Boolean +) { + companion object : Saver> { + override fun restore(value: List) = when (val accent = value[0] as Int) { + 0 -> DefaultDarkColorPalette + 1 -> DefaultLightColorPalette + 2 -> PureBlackColorPalette + else -> dynamicColorPaletteOf( + accentColor = accent, + isDark = value[1] as Boolean, + isAmoled = value[2] as Boolean + ) + } + + override fun SaverScope.save(value: ColorPalette) = listOf( + when { + value === DefaultDarkColorPalette -> 0 + value === DefaultLightColorPalette -> 1 + value === PureBlackColorPalette -> 2 + else -> value.accent.toArgb() + }, + value.isDark, + value.isAmoled + ) + } +} + +val DefaultDarkColorPalette = ColorPalette( + background0 = Color(0xff16171d), + background1 = Color(0xff1f2029), + background2 = Color(0xff2b2d3b), + text = Color(0xffe1e1e2), + textSecondary = Color(0xffa3a4a6), + textDisabled = Color(0xff6f6f73), + accent = Color(0xff5055c0), + onAccent = Color.White, + isDark = true, + isAmoled = false +) + +val DefaultLightColorPalette = ColorPalette( + background0 = Color(0xfffdfdfe), + background1 = Color(0xfff8f8fc), + background2 = Color(0xffeaeaf5), + text = Color(0xff212121), + textSecondary = Color(0xff656566), + textDisabled = Color(0xff9d9d9d), + accent = Color(0xff5055c0), + onAccent = Color.White, + isDark = false, + isAmoled = false +) + +val PureBlackColorPalette = DefaultDarkColorPalette.copy( + background0 = Color.Black, + background1 = Color.Black, + background2 = Color.Black +) + +fun colorPaletteOf( + name: ColorPaletteName, + mode: ColorPaletteMode, + isDark: Boolean +) = when (name) { + ColorPaletteName.Default, + ColorPaletteName.Dynamic -> when (mode) { + ColorPaletteMode.Light -> DefaultLightColorPalette + ColorPaletteMode.Dark -> DefaultDarkColorPalette + ColorPaletteMode.System -> if (isDark) DefaultDarkColorPalette else DefaultLightColorPalette + } + + ColorPaletteName.PureBlack -> PureBlackColorPalette + ColorPaletteName.AMOLED -> PureBlackColorPalette.copy(isAmoled = true) +} + +fun dynamicColorPaletteOf( + bitmap: Bitmap, + isDark: Boolean, + isAmoled: Boolean +): ColorPalette? { + val palette = Palette + .from(bitmap) + .maximumColorCount(8) + .addFilter(if (isDark) ({ _, hsl -> hsl[0] !in 36f..100f }) else null) + .generate() + + val hsl = if (isDark) { + palette.dominantSwatch ?: Palette + .from(bitmap) + .maximumColorCount(8) + .generate() + .dominantSwatch + } else { + palette.dominantSwatch + }?.hsl ?: return null + + return dynamicColorPaletteOf( + hsl = if (hsl[1] < 0.08) + palette.swatches + .map(Palette.Swatch::getHsl) + .sortedByDescending(FloatArray::component2) + .find { it[1] != 0f } + ?: hsl + else hsl, + isDark = isDark, + isAmoled = isAmoled + ) +} + +fun dynamicColorPaletteOf( + hsl: FloatArray, + isDark: Boolean, + isAmoled: Boolean +) = hsl.let { (hue, saturation) -> + colorPaletteOf( + name = if (isAmoled) ColorPaletteName.AMOLED else ColorPaletteName.Dynamic, + mode = if (isDark || isAmoled) ColorPaletteMode.Dark else ColorPaletteMode.Light, + isDark = false + ).copy( + background0 = if (isAmoled) PureBlackColorPalette.background0 else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.1f), + lightness = if (isDark) 0.10f else 0.925f + ), + background1 = if (isAmoled) PureBlackColorPalette.background1 else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.3f), + lightness = if (isDark) 0.15f else 0.90f + ), + background2 = if (isAmoled) PureBlackColorPalette.background2 else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.4f), + lightness = if (isDark) 0.2f else 0.85f + ), + accent = Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(if (isAmoled) 0.4f else 0.5f), + lightness = 0.5f + ), + text = if (isAmoled) PureBlackColorPalette.text else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.02f), + lightness = if (isDark) 0.88f else 0.12f + ), + textSecondary = if (isAmoled) PureBlackColorPalette.textSecondary else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.1f), + lightness = if (isDark) 0.65f else 0.40f + ), + textDisabled = if (isAmoled) PureBlackColorPalette.textDisabled else Color.hsl( + hue = hue, + saturation = saturation.coerceAtMost(0.2f), + lightness = if (isDark) 0.40f else 0.65f + ) + ) +} + +fun dynamicColorPaletteOf( + accentColor: Color, + isDark: Boolean, + isAmoled: Boolean +) = dynamicColorPaletteOf( + accentColor = accentColor.toArgb(), + isDark = isDark, + isAmoled = isAmoled +) + +fun dynamicColorPaletteOf( + accentColor: Int, + isDark: Boolean, + isAmoled: Boolean +) = dynamicColorPaletteOf( + hsl = FloatArray(3).apply { ColorUtils.colorToHSL(accentColor, this) }, + isDark = isDark, + isAmoled = isAmoled +) + +inline val ColorPalette.isDefault + get() = + this === DefaultDarkColorPalette || this === DefaultLightColorPalette || this === PureBlackColorPalette + +inline val ColorPalette.collapsedPlayerProgressBar get() = if (isDefault) text else accent +inline val ColorPalette.favoritesIcon get() = if (isDefault) red else accent +inline val ColorPalette.shimmer get() = if (isDefault) Color(0xff838383) else accent +inline val ColorPalette.primaryButton + get() = if (this === PureBlackColorPalette || isAmoled) Color(0xFF272727) else background2 + +@Suppress("UnusedReceiverParameter") +inline val ColorPalette.overlay get() = PureBlackColorPalette.background0.copy(alpha = 0.75f) + +@Suppress("UnusedReceiverParameter") +inline val ColorPalette.onOverlay get() = PureBlackColorPalette.text + +@Suppress("UnusedReceiverParameter") +inline val ColorPalette.onOverlayShimmer get() = PureBlackColorPalette.shimmer diff --git a/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt new file mode 100644 index 0000000..4c9a55b --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Dimensions.kt @@ -0,0 +1,44 @@ +package it.hamy.muza.ui.styling + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.unit.dp + +object Dimensions { + object Thumbnails { + val album = 108.dp + val artist = 92.dp + val song = 54.dp + val playlist = album + + val player = Player + + object Player { + val song + @Composable get() = with(LocalConfiguration.current) { + minOf(screenHeightDp, screenWidthDp) + }.dp + } + } + + val thumbnails = Thumbnails + + object Items { + val moodHeight = 64.dp + val headerHeight = 140.dp + val collapsedPlayerHeight = 64.dp + + val verticalPadding = 8.dp + val horizontalPadding = 16.dp + } + + val items = Items + + object NavigationRail { + val width = 64.dp + val widthLandscape = 128.dp + val iconOffset = 6.dp + } + + val navigationRail = NavigationRail +} diff --git a/app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt similarity index 57% rename from app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt rename to core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt index 8f2530c..93df9a6 100644 --- a/app/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt +++ b/core/ui/src/main/kotlin/it/hamy/muza/ui/styling/Typography.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -import it.hamy.muza.R +import it.hamy.compose.core.ui.R @Immutable data class Typography( @@ -19,7 +19,7 @@ data class Typography( val s: TextStyle, val m: TextStyle, val l: TextStyle, - val xxl: TextStyle, + val xxl: TextStyle ) { fun copy(color: Color) = Typography( xxs = xxs.copy(color = color), @@ -37,46 +37,41 @@ data class Typography( value[2] as Boolean ) - override fun SaverScope.save(value: Typography) = - listOf( - value.xxs.color.value.toLong(), - value.xxs.fontFamily == FontFamily.Default, - value.xxs.platformStyle?.paragraphStyle?.includeFontPadding ?: false - ) + override fun SaverScope.save(value: Typography) = listOf( + value.xxs.color.value.toLong(), + value.xxs.fontFamily == FontFamily.Default, + value.xxs.platformStyle?.paragraphStyle?.includeFontPadding ?: false + ) } } fun typographyOf(color: Color, useSystemFont: Boolean, applyFontPadding: Boolean): Typography { val textStyle = TextStyle( - fontFamily = if (useSystemFont) { - FontFamily.Default - } else { - FontFamily( - Font( - resId = R.font.poppins_w300, - weight = FontWeight.Light - ), - Font( - resId = R.font.poppins_w400, - weight = FontWeight.Normal - ), - Font( - resId = R.font.poppins_w500, - weight = FontWeight.Medium - ), - Font( - resId = R.font.poppins_w600, - weight = FontWeight.SemiBold - ), - Font( - resId = R.font.poppins_w700, - weight = FontWeight.Bold - ), + fontFamily = if (useSystemFont) FontFamily.Default else FontFamily( + Font( + resId = R.font.poppins_w300, + weight = FontWeight.Light + ), + Font( + resId = R.font.poppins_w400, + weight = FontWeight.Normal + ), + Font( + resId = R.font.poppins_w500, + weight = FontWeight.Medium + ), + Font( + resId = R.font.poppins_w600, + weight = FontWeight.SemiBold + ), + Font( + resId = R.font.poppins_w700, + weight = FontWeight.Bold ) - }, + ), fontWeight = FontWeight.Normal, color = color, - platformStyle = @Suppress("DEPRECATION") (PlatformTextStyle(includeFontPadding = applyFontPadding)) + platformStyle = PlatformTextStyle(includeFontPadding = applyFontPadding) ) return Typography( diff --git a/core/ui/src/main/kotlin/it/hamy/muza/utils/Pixels.kt b/core/ui/src/main/kotlin/it/hamy/muza/utils/Pixels.kt new file mode 100644 index 0000000..ea56166 --- /dev/null +++ b/core/ui/src/main/kotlin/it/hamy/muza/utils/Pixels.kt @@ -0,0 +1,21 @@ +package it.hamy.muza.utils + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp +import kotlin.math.roundToInt + +@Suppress("NOTHING_TO_INLINE") +@JvmInline +value class Px(val value: Int) { + inline val dp @Composable get() = dp(LocalDensity.current) + inline fun dp(density: Density) = with(density) { value.toDp() } +} + +inline val Int.px inline get() = Px(value = this) +inline val Float.px inline get() = roundToInt().px + +inline val Dp.px: Int + @Composable + inline get() = with(LocalDensity.current) { roundToPx() } diff --git a/core/ui/src/main/res/font/poppins_w300.ttf b/core/ui/src/main/res/font/poppins_w300.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2ab022196b0fad3910d38ae050ab6814be931799 GIT binary patch literal 159848 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 literal 0 HcmV?d00001 diff --git a/core/ui/src/main/res/font/poppins_w400.ttf b/core/ui/src/main/res/font/poppins_w400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9f0c71b70a49664ced448c63edc9c4ff2bf8cf4a GIT binary patch literal 158240 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%0AC7VmlS@LZ-TEZV}oirP&oT11@@uCp8_l( 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 About +* Fixed issues with reordering +* Changed some corner rounding values +* Fixed inconsistencies with all bottom sheets +* Fixed visual glitch with pre-cache progress bar +* Fixed some performance issues +* Fixed visual glitch while scrolling synchronized lyrics +* Fixed visual glitch with removing songs from queue/Songs tab +* Added 'pinch to enlarge' lyrics +* Fixed inconsistencies with the wavy seek bar and improved look +* Fixed padding in lyrics picker dialog \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/33.txt b/fastlane/metadata/android/en-US/changelogs/33.txt new file mode 100644 index 0000000..07f9d93 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/33.txt @@ -0,0 +1,8 @@ +* Added AMOLED theme +* Added more control on thumbnail quality +* Added rounding for consistency with the rest of the UI +* Improved performance +* Added 'wavy seek bar quality' +* Added more playlist/album info +* Added top/local playlists to Android Auto +* Improved animations \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/9.txt b/fastlane/metadata/android/en-US/changelogs/9.txt new file mode 100644 index 0000000..5f517f8 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/9.txt @@ -0,0 +1 @@ +* Initial release \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt new file mode 100644 index 0000000..fa7dd60 --- /dev/null +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -0,0 +1,23 @@ +Features: + +* Search and play any song or video from YouTube Music +* Background playback w/ notification +* Search for songs, albums, artists, videos and playlists +* Discover new songs by mood/genre +* Bookmark artists and albums +* Import playlists +* Import local music +* Share to import from other YouTube Music apps +* Automatic cache system for offline playback and saving resources +* Fetch and edit lyrics and synchronized lyrics +* Open YouTube/YouTube Music links +* Local playlists management +* Queue management +* Favorites and Offline built-in playlists +* Sleep timer +* Skip silence +* Persistent queue +* Loudness/audio normalization +* Android Auto +* Simple and minimal UI +* Ridiculously lightweight APK diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f23c2652b0539184d2b3427b1e2dda10a897ed9e GIT binary patch literal 14782 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�I45|pI+DFvupB3ce5au~gGSAWHkWfYY)%E15BrLblqgp6iWogLbdyS$qzJ9DRS8fQ-d#87RkQeUS-=7vtiBK# zYDL3GMEX6I2zHQD-h5$e*ws60@E|koGcMORE&_G^ydU z5H|RR23C=5URJ~L{arqfQK|3`94}BwTCKtTuSkJkzzq_tj#V$h`W#egZRUqrtj6)S zuH!w1cWZ|S8>1^6b!CjVO5f@jq!WR%AN!1{)7I%H=U63Drfl!W9jp7B2;%~NG3iL$ zV8yOR)8Vgj+*+PoFe-aqLAuO9f=w}9&A?re zp2;>u|K4LShe1IEeN5s(CChxMaV-w{-nglidbFxuYf%5d#B$=YLk_`7mK>CN2|aHu zpqWa4@WtklNeEzg)svLSMjdFL*0w+`>%e+>Ip7dUN|lB?{jH?glOlv1s>2lBgH&Jb z5?WpF0tvEpkH(~-W@k!dQ+2f^Q+Rkp;|=#YV{sCcO|i$KqNp&ZZ|Rnv_a==3|Ll8g1Wpn7o$Vn0HV zEZl2rDs?_6y-vTghkW%^hsbZ}-N3g;9yYG3(W-ulem`CFhpt@RC5xNH(*<5IyWe;B z#0JX0A%6Aj9;X$F$)`?$SlNni}c7+*lS(-)*aNxDib;vb4Baf#-R;pz3H7Ofe}8f z+tm_;&s-v8DNjSUP1a{+0qzfiBJP!2fXrsj@HU;Dso_ocgW14^{>riIY+g`zo{C}y zPHeF?@jn*iLwuIk-LaP~e<#I%Ti`iX;%DeBAd*IU7!Dz67I0K4c6YXqPyz&`bbS3R zueB%s(ze^5=>2PE=zG8Jy_G^?^|S zN786<M+6!e@DZu3n%(fw8&Wn_(d1NwY<`fC}3Ou*o~%pmaXPM z5ZDF9EID0b5xh3QWa{Lu!R_HBlY(+`M?>Il3D{g}u36=^y;OM{65NZ<-bgo1j;u>* zj0kuxHzDfwNkp(WMR%d{yMld`FXE#(b&so>M3$iD#maP*BlG+2}&38X(I&9#E5-KPHo_SkZY(d~X@8Kl<6u)IxOs2}Q zwR(EGcl}F+FM(Vi0xSTaYqEbIh5v8Cwlt@7tFN**1k!9LXWOl;Y%hvdZEYuudWw`% zU{TkjeeoTT?j89U!5LBCY<1=BMc`26>}uo;X{S=Gz@564w0oB8#yorXDx?PyT9Tdm zj8V2;r2nf?1W&UL^VlC5H}y%gJ0jhA~(tm-8^`zwD%sM40Fp<*IkA&@mNJjx8pN_h0zKi)AE(Pp

t)1t4V^xD=wGI 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 `v9Vr%Ue{gx_+c$oDjN?z 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 literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e04a11a74a3bc1fbba0ccd1d0b56a044dd7326b GIT binary patch literal 104340 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 utE3+mgZA6}1c{Q`W3mGqYx9&D#6u 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 literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88c54b7f6977f286315d71c03b17dc7e0bde092c GIT binary patch literal 103269 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 v$lK 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

jIN0{>X(aFJ`aYoUHm&>K@X(Jl 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 Wwfct2sr~SOdk_C_&))xK=)VA8=h_qi literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17ce690269fe2aaad001763448890470eda2d0c1 GIT binary patch literal 102788 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

c6%uIT$rGI3THOgu~P*Y0-u z%1BSU(8k^dYunQ1c^ zZ-ZGFbO|NiLAa|}8IanX6L^D4#*uCg_s_A<-i}*JH3^SYx*oDwYwp;(TrNyX#0!1~ z$QhyqZp9e^(jfva9wMnA18-)#m|nJ0w|l^hv1A`qjNV)KUZvw^%N>Dk_x_Hq*ujyi z6Ozo;XFL7D@;e5I00CZSiX7o-XuvY3DbzmIZdHc%3=E0v%Dy&YMk0TO-+0v@R z4f++LHQhoJ$7{Td`T}?Ro5nLIwC|uo+@-!aH7606Fa!VejMa{R6hB;#h;_#!S_(($ zJ2tCpHaP3%qTGMHXMPH1!Y{m-tpNe8AnoWo=NwlR-PnCKzbr=s;b}0$hOu!SUtXMe z(^>i7XMLe5#8wCNbViVGQ#JIHR>^C2&oO(H7Sie5JX(7*2whLiP#EhC zqvkjmCeX;-MQ&?jdbM{4J@_#PS6z*wEgBN@sBA*OS zd%h<^c9&d#am{F>{D%k$hp#`ApI4`qCb{meDP`F%&FxYI=^X&&WCxt0N75na_S-S( z=B@y0&Fde;pw`V?ozVyQlY6$f&a-mI-Ze3Rlzp|JOP9r>b^5bI zzo#$8hz@;{WDanFVp;z=SyBRBs)BF}BFpZFf8&R9@?#9GbXVRDNLf~Z#9Cc(>V%VUIJkGyxkRg0<(;_Qr{Q_Ac^Ty0X%=876&R$%xR`&(kVz`xCY@sQ#9x> z9jSRsQN6`S$kRo*Pv6u1)PV{`p1NcXsw+%xGBO^(KW)=g5txL{D}n_}vpa?tPm4~m zr1WMpd|LUu$-(KoFRLQiwV=sB6@N^2dOI_0TeF4?VlmMZ+q+n);aUeps=As3;^lQ1 z*uKWQ!wu=TFVkeWmX%rq)u{>Er#1$~xm-9MyDUM6t|fl=`@sHIvVv@uX^5cu4D^QL z0yWeFp;46BYG6~IwKC^yvKHLij?r6&N3Hl>&A1qlaEl=ROIRf;GOlml2~8?RHJ>%p zTbQGi-Np1j9HP^XO#XH31ATGQ<-MFl+WAN-qA`R_T?N@t9npynxE2d*o216Mw+a*A zhZsByn>DiNQRQ9pzS&Ico1zU~XF8M*+S-`nQN8kj)*_b)Hd*QCfznSFa(lb;226sE zu6A2|w)1=8;#@$N*N3{~bb7Z@@8jP;YWnWMAJ!;BjTS`wLE*Sa`Dm)gn>?EbX@5W_ zmRk|?9G`1!!o0nvy?ih?T=lie4CBx`{abyOXb~6W<|ME1BlBAZ-m812V(6KPdFl2` zHnp-!#q8_y%WYk9g+v-%rIOi9}vz!~N zi_p$1*}&KrUzokVcXPpD>zovjBq8VsNm1g+;>Il~;rzCJhpo!-?q%U(4P2)XZ8e>W zvBCk-QGFd{nsT-P9kBZln^E1QLsVrnZD+JXfTGpk-t${PrwbsTe2U0{F{VrsW{U4F zi0m?;sBTSaz5HB)8y`JkOK3v6-B6;AKJ4-#Apkpt++3<{;1XW|!CkhO^I|x;1xZRk zv$;PcL&`S~6SScgn!XWdY@(9`->c`D3K!M1VE2B$hA|C3>EH~lAZ(0tulJYTj0!?# zazRpW#1~uL(EdvmW&c6{ukoNJ4?o8?cz$zF?X7E|OHTMn@?9X1kS5~zCd<(#57n9< z!n*i>$U<5gH?FW?8?KNl2cWgobc|EF^>L9*>l76rja=}9Vp^PxUgPUC%*_Dd=ncB| zu=yaMN<)Wk%bx`%1%T>Wo^G_@Kr6NPjaJbel+xIjpv&p7uU%vXj@q$-;;^Pmqk29{ zYvx+5$k(mpt))}CAMPkss5Dc0+G`)3X>5u5m>ITm%_bD^Y>NmfTB_)R!i~lyz^H;P zsDhZ|6hhVMo3d8cE1@f}&Qn)TL8UOB=xu6%1lS_8@YE8iveR_bQ6=Ec@sf` zRbZNWFBW^Vl6M>fNfWzXkec&rVau}X2oXs-vfo5a$rOR$-jOP7FU^obHCkcj9dg~e2AtrZGSgdKmq8e2CDsA3>H4k9C@lW<{OZ7-Gi zig3Z!fFLx96C<4Ihm{=BxQDG1dl@h5J$14&yN6An5|bZ2m8tc%WmpN)rJ8<9tr`H7 z-j(L$g@59Fy+6hXdXu|DYyP3BJ+x_<^F6`uTdu*6}cB4LOFpODXbfdba!NY9|pM9QI8-RMLs`V5x zeS{o7In!zl(``o!_S0gMDV$ZV)p;TMvs%Dw--VOt!Cyx4rP`F)8^Og_U$b#$eru<| zVU0pdDeSXB3=Uuy#6 z_4fV3r2q5fgRgeLhBxpfCo1ciDe#ei>QxhQ-YZNHcHT-9J(zr>A49seQqxOQbJ^Y+1Aa0%7s zR`Njqq<4DDWcHK)hQ65mX+Qf}%Isd3q~!6ZF<|JIrKgc?zV=x7{UG+)M?95tSV1E7(<)qU>hU$^WpzfM&OY zh1_t&`>MS2wt$XM8(6Q0kLKDNhw_O#FWVE*D~nqee`xlw@%>+<^@qKZMltF_3_&rG z{pw(H#?o9n)o0{oZ{gnq(!0xWf8o{cVTSVTQBwT0VLZ43-Kl)|;s8BmoA-6;Mu&5Q zP&hsWV_>B@)Kj{AHP&6T&|^D8VPWtDzet#moaMGlfyi_o$RFtjnF4O z#6LFGgyK{5`Lgmw#kIPABm9MV?GMxK?}A^DbP#~_o7_3}ENGk63OibWz>GW+kyq5S zOpu}A$L69m?luBCQ4WB$>grk(HE7MgLsQ+#CAot;$}}io1)h9xs_=u6Q|sc*w>CQY z&49Y8m||CpC8|B`g8>tdcy#-E7lw`cP)ox9xR3wWF^I|2N$J4ah1!P~*#r_HZRaa= ze>ch{J38*hp#HteI)l*~$fDA|p(qSL#)>LnGf2z{c@51MZ5Ccx&$ZS(gV;) z>|mQqTbezsX%wKBb~CjBE?_+MO@wLW6d!2Fo%5fjFiW~H(|!4lMHMRR@Z!jfI_ITM z&3Gf5$6kLt9b%X$Vmf&ARD3R*^}bzyYM6`Ja&nPCFVu`6p^muDOg!s+RLw}|+eKN^ zwDa?O#kT&AZiBGUPg{rHJaR?Q?A_`wTgkeC9X?QlgOIyxUOClV{g%$W_!Q2!(w2)n z@)@9vA{?f$S>BjtO9|;v-}Ejox?+VhP6^Jd!o9LxsvG%`0=y0HM1#{o>N$#1X(}7> zALO@FUeulbe5OOn*zxh;1ds}-a5>~O7)DTC^dJ2R1qhD9DR<+)@-CE6zaSw7BaG4^ zmDsvj9X$(8anGj)cbi~?l2fas6-yUG6pi%NB$GXMb6FjxsxlS17a7l~!l67Yd1U{y;;Ho_aH&7)&WXIaG{|boP=@tKt=EwGyxq>5i~MdetU9QDZh%9 z)@O+0h?O8ZfpsZ{FLz-bzI?hkfVCs#k$~Xnhs}QUa@U~Ztz&%ut=!=~;Qt$y8sYty zE(@5W_DZcTnh|Iv%mFEV+)zCWl!Ipk?u>5jzfMXb{Ntgh=`r=Q*F_s-hNjCg7Kuy2 zU%d>RZ9;a6(GGWz>!V8b>+e-hs|#qMIdS?q)ys3^M`AuUCuiug)q32RwzdIis9WsALQ+&x|Fbn~D zda7xH0A%?)@tbQ(cBNWw!;ZTI_NPDB?;<5PxJm}zirn~kT|KC?u-#_5Ez`rrK`Q9Z zIqz|$W5Vc8Z7G*)pHJO>WqlF`$a+G=%&fm6PdPYQbhT&T{mn1lVm-t9?@vF$%K4a_ z2o8lI;aYg2Px|b9Gx5%@w@V)+HrysU3_sH1smW3-`TjL*Mwl7$;YlFb-r3Qm@W`5cyRPbf7xU5BPVH@WeC0G$3e(>* zv;D5y3xBl4fX8B+beku}zRCXUSmzL>2f`kvo0l+#|7Q=v9+yA{!)1V}BmDWJ?%my8 zPhWQ<`gNCV6~!@>mWO~YV9RuDUhR5eV)qJxsl^O#5RPzixp;**l5V7c4zzCFei1xT zWq^1sMIff3{XoVj57AtT4$%e`cK_V!-K)wv8<|Tz?2yA;xy7gkKC8fJAL~)O+n%uA znpol$USr7Vol+XQ8x7+${a@6u(m?8mx%i!{?k8^02Wba$LZ zgw8_#zm7R|6%a1HSu^wpm04kMhcXhni{|_dzBvHdRP_&qD)3AqUVTsW3*7?R-8Wm1 zHFh!PO_4dQS9gBN+v=-1L5b9Bp{^=h@vmd9gtU>x_-@~l{Ff3;Fw=%EyL=v5RTUma z2Jj=s=7zWHfBaw*&zy4 z66LH4(_uu(-?naJzG}(bX22qESD^;X#IToFZmZCTyBQ!@O;?ry^oa9B@eHsIf>g2S zEsLE|`Lq_5a${|ca`}nYEEM4`N$f^{O63QvncGe|b*r5_$kYW80}xjBtZ=g4Xir76 z1A=%Q1oz_*3F1a*g^IDa@e%4zCZZknm{DwiI@B_mPOhp*XKNTBjtikZZL4}(1KBrz zR@e2xwZ)!SghE+H1qrU=m9(yGVPwbCgdcm~T1?y8BU0Hmcs2j*@GI&AVpSgh1ht1N z-OBLOV>PH>KupJoWQGx3X5dN{%JChD6zO<|zqrExxgIO-KhvE%)m^Kb*ZY>Mrzy$nNP8Pj7^~bRrH+EFANlB-1ISqG^YS1PSCiwjkASR3Qp4GG_x&nb8h|TwT3fLsJYjo)t_r4 zE2Z%19z^`3=MT~fg<#E_{B?1$`wC-)l5>}oV(uM(aw-7poBp)t+=)}BgxUF8?Z$U} zNmuY0I*q}`7M}A`11^D)k{e4Q-?_WH56a^t&9AC-D1{XA#tb@MwihODr!e2)__=m; z-QSh=b>5c=8q@wV)Rh3qN2RXStdDwB65zsX;qSp|qZ-<8L*A+9m>&8yb}K z$Ke~~(2>DcC`UcZ=L&mjXQXV1&OIO{SDtC2)>!vxkix|8NDM>;OKqoA+-=w|f$7=~=k z@25h_{4rDRh!->ZDy?}0dznYKce-{)>X*E1oNXxmB<4S!S#weh{ZgH!{kgY5-3R)3 z{~3Nbf5CL+q=R{ul_C^=k#6)bvZQoMx3uJ4eU_JsDH^>DteoC!(yn?{^Gny)Hr+2J zy{5Hxe&n4@eSNPXDmi4&i^?dn%ct#TcMkdEib4RAC4PS&jzm6`NqDDrw_y^i>9~jb z<`5zHtD3h?W-u3JSealY91hCrfHeU=pwIe)dFlvrhh16r`-Co%@u1@#cgljwA zS+6)2ZEz07`^Ol?{>Hde>z`|FD^ z@9-=8ks>67$BW26yE$tXCyt%_?9P&uebSxiFwI8p3iV`bH$aWAn%pzJ_1D!?|2lS} zHfdzU0f{vyWVkd~4)i@_4X*E|nyAViO?>M3Wxb(2R`8F}Pb6+;(zd1)Y^Si;Em(Gc zFDtD!WTn&P$1H3=BTkxXQrh?Wpm9`wN-act;>!!RD38;U_2p~#K)-hOEOGgnDfdEe zNrY_Cw74$FJj**c`Gw(Md0{HYsY#=ClP0#=+_L#H`>W;le< z8XjX47-zXWe&_Ccy6mdUpkA`IZ37cC*Fy|zzVSIp)Q%lE88Fxl$<6*QwUlnur1ZqdUC2#ns7E<>CzYgX(5=#)z)hDB zV+CtV;d`a}D;pd36&E@IzhqY@F1WA$sROJtqAc2d0Ii zM{_oHUgHV63Ut-U_#LJ=@@Ik})!R%hOI3O>8gcqUa|FHjbP$eA4|I{yoc1SEYb}2-(Ky$vC(OfTHEimkkJi{_jPllJ^wN=U(Upi;&iDH|HUroe&3 zsix&J7r9FL!q6GYL+OWsxbW9WCPB!>;b^uNiM!cIf`RmiW@MtR3tSc9@iqs?7fj}) zQ6aVqoY<+Z=jvn4q-XApKc2v|(-lVed;JG*cx*Sk3MM-IiS&+{S+adoP)Uns*!Dxf zdDdqHGTI_sRuajx>mPO_nw(kxgR=JwN^_0cf6d-0YPv19n4;Kw*NEA=qXvl(u{Vqw zG!{fGv74qTiW&tWqT;q7_QYOdNh~OK#f~Kw?7c>f*@t(|nKN_V|Ne5mFvByB{!ok%uI&zwK51%|`L;QEnL+y~10}M95 z(9oyNV)@8(2Ffuv$;fzj|DO(pvnQ3azvwimV4mtS-6U6)vG1lkOg6T zw5_AGaO6B2xxP{xpj8a*=Dq2yj+g8#UR~1?M^%zX+1UU2{|MzJFn(UWr)9qMixEV? zCb#6RN%oP7)LE-Hni7@s;V+#KD!@m6Dle6EL$8SsF9`mr1O*guFiUaMcR`4aZ#6Wv zGEscG%60lJ7|i%y(YH6@k5;kpNIT!rE<~1FwLnMo{_UM9u&~*R5l7vb%R44U-TY%J zzy*Kv`R+U81BpA(_vD~ZL7Y@sNlXLNRh@|BrZWf zEcrYKdSkPB z8baG{kdifxA2VlmWlHCGM2#PR7BIzGqJeSex_+h&vhpS#S9P9R->>Vo)%ZBm0ZS8# zUS1d8fs?!%2uI5UUuLh>&kp2f4kB({jCkivwlMKGdRI1El`6GdU+y8dt{S&4B4d1< zSY$F2Q5t?}UrII?J#{++1w0ZD(k^Q)Ago%DY{u5l&E^%SIy&ag45CRq&p}T%w|5g3 zk3zHs3yHyMwp;4v>hAu0l1H{z{aM6)f_P*-bE2W$q;&B;c0i$bhv6NjXP( zRzu{$u41|Mxf~^%J-b)u1cva>8aa2ZA53bs&XTPSLS(UdnW|a$YUyu?U6PMMy&}kZ zLRm7|IL($phk)-PW=fwhp8F9;I1`8td}C6Psb;WI=_>WoQ-H*|-#d(1XR-kd0`}T` zZOUQZRm1O#*ILtuiV5vFaiesSF%8*#rfCm3)TfovSg^o?MQ<{$&!T2vC)t@0d~?9C z4$&}=b$Bd*FI;c$GSB|drtQOx{)0nyM@f#fmb!IxfuCGE!3h_5`=Pw{dNaF`vqG}$ zb!lZb<)#0RYWzQM1Wc&LpqZlnH_tnotUx`meiLM>cZ=~7tfrzNGsDrCV9nxf8XBw0 zB5wtM%Bj(iO-1ON)%r_q>}wXLseNC5)?5IDd-7`tGzi{cHQkFo|3a9vY! z&PQ=(=-PCKS3aQhc8L`73omfgpq?HaEJ_jn)-;wJ(NC@_Rmu3AdY(@^GKFzx?%pLu ziHw&2@d$bZO;CRT3$>iqoXXe`o#I*;fxi%XC6u!`T<~>YuS@sU-R!=<(fm^ovnYDz z$NAGM@2=J)RXQI*v{bpHmjdQo?iF)z?qwwpprqu+X)^Yk+Z71u3VB4P+yYQwP18cq zqvtUzAvl=2>bF=atZ!LtA`2GujfXa!{0*&XeNf?VByveXuWobLS;H)3OdS~E zT+bHh4KpM0ChVF}R>&fYYr>eOZ{!=9n{_~uzkZilc5HOS+E&~#Fhs`*QDKI<4L99r ztd7ghj8BqwborvBvBLKPw{4wusm`}e*&_ZOHjb0`_J0o58(-Z=02*$IcA)Pq4HMqw zjM0h#ziWP_LD2=l7LZ~yHC$a6aLQ3JMB-iIWR7hp7u9mpkE7U{mP)Sv`w_vAtJh4v zfU1J!hx(hQO8L1)(630zyQ=U0DQ~@m5od}qYu={+EyLk=8?OVs%HE6&8*Yktip#{d z-G^bM)T>maeZjy>ZeC?vtf#ea0^rZ0S9RKJ$eeW9O zGXHe3BdcCKk{%A)(`kKmX+}A9JoZZQu-0ceE9NcEr{w-fm-4CucJnuOV)fUf<0oR? za3}V3vgZ}<*z76KLs;?mgClZ;^4I>)Bs-Ojp=;{MV(IZo{rU?z*%~&h>oQ<)TT542 z-d@Bb>yq{LuSQNUj1`N2oA}mH9n~5^5fZr-rfKXTr<}5+!Jh}Vr;Z^CrL$IH!22Jk zEGnVlG67qm!k@1X1kT-ZqL-M268TC-(6&5Ti&|pwq+$j-067_0xsksS zB)9j!_!i%R>fBKJEnh|yKIC;l%OY662uHMl)|9=m=`!S=UT7>!*d(jmlqBC%>B04_V*<`V+f#*=}vGqJK*0xHmz%t2*KR>a_ z7lW=;s!Hf9ahT*SSoD)NpH06zxLxw}CcCAhx-~jnpvce3u+R^glVot*SfKE&SVgfw z{&bEe-l1iYrETWFV!(nPAWYI$PKSadt)gETg5CIh<>e?Svqy(e96{W*rNq!C5`3N= zlV~lPuA=pq+u0v`N%I{+E9W~VB~tl4!=rhsb|nhVSXCQZ;Sk|v1Y&?&v$A^DB1Is3n)?#fh+>5u-Tn`E+gEvlwP z+y4H0{aD?F27gxR&h?cL(=TK*VdR#bWAWpLoO-+bA=ExBwGw|DyX5VFmX?l*D(fOr z(UGwb0krW{0Kj5S%H<-<<@SM9p2DbG8N1UPTH>wiowY@u`J=~W`bGc;gWGKXYwmc4 zW7kmGHM563iKu~hRsN1SSH|8M`l&t0OD#U=QgUy?r)C*(#dBM^U$Ee_Zm}j$UlZOX zu*rk=o+>j!V)9&lnwFd&hkdyYQJ0O0w%b))?$Bx1buvoSdYb5}b>`($wu_&>Cw<|6 zg1@Aw$i{~G#9}NcnN;<2Z{##QXSwe}tpB(tI`JGLZLh7J*o;aq-yVFXPd0$?3Nz&s z97BPOx%1`&zLS*C`2WONIrjDCyEUg zt%P$=xyNnC`^iSOkuKs@ zEs(3X2){)N_U3J-ChoUkJ=-B$OQNDqQMfX8+Qq4;SD++Svix zyUScTJ6)ji$t3~qOBI^_hikCb7chfnB!3DteKVMnaEa1>sX{@8!~5>A4~4a}Jf$vtDDA+3)9QKc@s~v8knuLo65^ zOuO=Rvk`_-Z(MUKJPH*O8$i}=Og}&b&osiMD=r}i@q+G8aKTK)s_B$J1%vnYX|96P zuz4pZo${$iV7E2-0q$4UY}WhWDg+7hc-uqP5-qw8pZ&|MY^|Ew|+bk&PAjP*8FzZeXAw9n%T^g!g>wVd^N<)vXYW|+Yo#gr)uXtW#t8vUj62Uzpn~Ne#f5qBEa#9&CN_eDdD3~N+sTy zTo3-5_PCPLUF;k2aF8Nk&LWQ0K%g8(&wIMp1qU?&LLN1kEP$4R*zVygTAo9%Qly1; zxah666bYo)s-c-LoqauBqo4Pg`$kVug=Pb{N%LZ0sjuVNDC@F!17yzvvmq@V54cgu zkG|-cavr`8_U+0&fMuOj4kK*4Ut}@LtlvA2(mppCqN^L`nT5j0CRAtFRYp9>m^sLD z_B7}IP8;eX)tYd#{2=6-dbI%{n)&j&B)W#CaeL47|PsZ>aID zyS*8pNfdO=p@}l{r3|mk-7pHAB!3*~WMO=f({qx<%1Bfx2If+B*?jNX$Z~<=t%d!!FMDAi=6H@jm6|SFy7s+;oK{VUy^jsAb&Wpv>hH!o=gU-w$`?SH z1llN{j??FZ4fI2*$P)ju$=sYcgrs8OXtzRS4@x^FT(IYn1|{%($;i3?`IwXjNCTq_ zc7d2wj;Lg{$$wpKJNt_VpH_FAT9FDoT63<2DoN2$^9_}TIJ?k&4)LuT`3A&RG+1*U zldn49i(O8=;q)|$_eXrnL`hLcVTM9#)750dOM8k>FY$g(Q}8q>S@5LPHP*EQdQ5vx z)?ZK5i4pHyCKPbtlca+0zHjx!4L?T`x#Pt9>-C&vdQ;Rk`J}5}tC&Ce7MlF;6g2gTnhx_b4s{uq%JqXTq|1xspR zp-)K1f8~y6ZbJnYJQ@%mgU8MwL)?Q(J(*dqL48=)a(ptI*Y`KKp9)}vV;NU?16pJP zE&F4{wFut28~l&{`z4po5l6cos84ph$qCxQ5Io8H-vUo#vHIyRTH>F6<90MNoNN`IUT zs?WmtWaKZZPKNt{1qlQLl5T!q+1gMEF*!Vl2gFigZdEdAF4E zdg@+sNgh-112|Liv&agTAkjA(`OhqQq&;UtnFuD@B~$0%7(b}l;^4q+xdYfX0UWMy ze$7qtq*HQW(=HD#QyZ_dzo(!=8%op>c?XLPLAogo-9k4r*MPhou?3%Do}7Ynyq&!l zQXMre6cFBJ<8LWTzrmI8)i0QVlhdBj0buQtP$S(Y3IyHb-2E9h)MSc->n5t~jJfeX z`~LY+CPL6U{5e2Mf+tZUL&g)6U7|q)qY5)CB%8dY<#h8tQcHUt)gL9hyCsO#;+%|% zecYym1LT7M{08#DPLJJ%Dt$eq5Q~8|d9m9IsK-YIGFq~CWFh&~Wqda(53%96W|6>0R!1F@qUvZm9GAWd1|O)v3vX&;De`Ef^2*e? zOA*CCC0ep#Xf&}3G7!(VBx))WQ@Y(P^R{Z693S{)cZ!m;R(^MFwZ;Xw(5d^r?!=`L z(v{KRB7j`za=GV@qDvBEHD))_BA*tX*-wmA6^IvoU4aTZsNwM%z4t#1{6u5z%8dD8 zspdo!3z*GmW$uaA)UtQQD9?$PXK#0otxFdL8g8U6+7c-?;&Ym;zoo@0*`rVO+PhR> zn1|`cAlbqwKcqGkLnS6|it=|TU`=V?f8a(s?;Q;*+=R$q$Hi5)L+_gZGJ{b&y@W}T89a%{osAa7)c}Zx z&}@21vbV{i%#@(BCUxS2dZ|ITL<4(Zf$&JnMKy1&PeW-tgfg*Nf`!J~L-tR>JMwg4 z1QR*@Fy9xWT=Oqm*UKh%6?l4#!eDyn`GHB*BbDn-L(GqWg0Q5a2w{2OAV5+drgTF0 zw#~Wa*I#qRvAYJuL?xRl5KxC?9EX6seW$*-q6r`GRR1eb`~GXXI5Hovy;hAMju5_21W=b`a0X$w|b{XW|de+N4!3 zI2qJ$87f>#$vr-U3E}eJBa7`~6?2E-9OO?co@|eIyFN$(yPo_ZUZX7KHtu>4`0bnC z8ddqcFJm$pJ95ihuaGO|4{5Ch69YM#POwmz@{qm5_o2A_>+apbg*%6@8o&MI`56-% zvQDpnrrVNYwt;B^rdiPH42bFsFAKcrb$x`_n3F?N3Y|CcxNfD^X5*#O6DWE9eJiiGr= z9Evk9nLkz`SOO=>ziCp&$_E;h&3m|I*5rDASlLHjS{ttspk-JzEc&k7z-8ml@dFNp zy@+(j0qCzs`|`xZ9XI@%fnfPhIa#Jujj;^f45;rb`mokF`l#lBw}P*VG456LOmk)2 z6guwOZ8H=L(3f)6oi`XD$a-}%jb$?8Hgv{+CLbIA%SN*w$GLy^NX@zhRZ%Xu09D{j z<@3+V%riro|C6%R%c6-6AyMFWj0(;wnS@y;Cy9+50N6i`Q5caj>a~4m(P69)B@la{Q#n7Xy1uCk)NE z)F~m6k-YZs0{pSKN^wJ=y9$peZ!r>K)RhFxkQiEv#+a<+PW_G=VKL2{$A{WhG~GlV z6_dK%a+pbB_F8U>)SU1xQKNez>1DP_X&}kp4Zb5~c?&uTtD$P_4Fa>1+VOe82W=5) zHocDmAY7rW<+$+BaVwC1(qTYB(_mhe+yV6$X4+Q2!eDZEL;6|JBn80inw_wjEK*6+ z>NfEj-W16xD)j3j@7EVKB%yp(z*ik9geecIGPWtC{t_#B75YwT@f|B$LI+WFFLjdg zw)LLvzWLXDSYph!+A$@gqAH6&k1=5D*iX3sIk}@e%cLj0qu2#@HHc0DLZCEqW5Uvp zEKYYF$(<={!=pHdz0AjWT~9`MB5hu?-uvYJP+NCQAE7LL1Uu$nZh0^yU5|S*UFPyl zoq^mKUHbX!NNasV-qcvgWlBHQmvML_m#Mbk7Z@X@Cg?$ml9O4~oY`HCbCu9i{dH0I zsnkYFSmzC01Ht0d`NL2?dd@&sNg}OYi(t?o5P95?%ijZ|{u#V57Wwp&--=7{(Jlx`1a-Kb#&F}w*0&-^8Jt{BuY~lK{^`Pexxq*qe1}f?jJBQ28DzC*R z`OlGM?`9`1IL-ZY-bqE2jfWWg0Ees37Ti&4zbIa%h!5r;q#0T-od>jciKcbw?2Fea z{izieH+}Urr8%!ob%jQ2ggl&a^CCq*P7+ifBt3sCqTlv>xc)v?&bMhkWih_W)noWG zEPGPz#~4KxwIx$Qs(lO=uz4}>T=1B#xnn)K|G={Rb_Pdqs~Xn#d*E|AHb`wnjsbP| zwu3uL%oGJsBktJ#QZNB`B-K<`4upypAnY2VjC(X;x!dphWrb6`7^CLIvE21_H_NGX zw3G4GMM*jM$XE8E+Jc=>aDJyiqzJJ7s&-2J+3d1(x>tjQS^OZ~NfJ3QqY zBt>)asIdzf3=Qwv0qQ^8X~Z6qdOLJ2a#)#DV(zJz{=CEgtx1{R zT(vM=V?DslukEw2kOxkR;q}`a?l>M#E~?VCurzMuZW#Gm&?1JP*d{gnh!qm@K3F#r z5k55_R33XH_{p&nuEQhMh1m^pCgAFYrx zr(zX`T-muUYV|dVj)U`Q*q3bI%|amsD)JDUtG|t02U4Ac|GtPA+0rUsEX62AjZnUk zJhV0~a|Dk~Tz;H)|1K9G?IdSXewy`u>l6B(`ad}Dta^=31=`2#tt=R_4ux5~*gH6y z7c8WGrN}6G@Ac|@BS}x@`yeKd)|74UcH@IV5nX0GPRmg5V~`(#s^Z)W*9Of~^nz(ToY_ z6yx-Y4e22F?~Bi;{-Pg{K9>dXXxer?9SN2jap;wh%_?aQDzfvmejKG)-CEVCksxoW zoub5;y9UeR&>PsQ%MWmD6KNx?n?jG17=ihIT)R~oFcY2i3hi<(_B9o6EQ9WSk zR~u~yDu!39brpy2D_K30?n%Fzn>v@Qc1irWekWM9jKDk~5z5Ci-1SKj0hU{MJ{lD|O${Qx=tMNT+XV-HjJ}cIQ5#b12V0IlH0p|2O_y|q( z>Ol*CGI2`4VaIqN>Eg$UF(J`&`JiQHqH&7-{ONaI3y?{cW$CtCmWI4kZu!oyZjYGe zHH2%v;UfXs*$?7>i{9ZLbkmZd;W}cT+rNIQl?=jJm&zb{J{X+~AU!1{D3BM&znppZ z*MA?{{_85{Nc>?7-ub)5eDfLQFCF``^qCGBKwiby`SXCJu2*=5D;qA{6cv?8mgRBf$xAzZB`F>e3j?;Ub>mVqo!_fy_YRTajc!I9F%}Bq)A)*;wouN zo4*4z(zg0Le()s0?-YPl6bjB!LxY*)pkUhu=qd4Jo>Edh2H%GPM~ z0@+R^9eEOKtmG*B)@)0!ydF{?yLl<9D9F(?bHxnWtgsAVW{b8zkM=fS{``CHg(+u3 z|M%M^4b_bw~PMQTwE8epC7Lf7x1kz8-k~x?12k zXkH{^vV#$N@h8(<>JV2oy$AZ``)zNid?06Uj=xFk#?`%q&`mx^!P4q4SrWTsc8`O( zt7~c-l|}4TeRq!=R|W@m-#g9eNp~kGRAiPwl zPRH!FR`8E9A>hm5ioD5AIjx|SrtmPDW8)u@BsVSD+#Rq^Y> zs&j60Z|~3+<}SN4?^}}A(I)iVS_zBwcH92c#nTMHH zh)Ov%PqeFew}R358fO!qibai#dNK03JZ@Yz%ONM5ge}x12 zB`Wz-S~Wx7VQzVFVy1Ffa0V6?9*`J{plljhTHHCGr6o3h(7E94J2&zoUTXYYP+E~p zenKiakIX+K51#S^oZE@Scii&*&R9Q-t4?ct$9WA$JWSOLNI4o%8L5H*6&_*g-n3XM z>*=_{k!A89cE0W3W!9wW@yYdHODBBnnXys9a#}CA$mVuN=oPjeX9<<*%4s(L5iLYT zug+VTXrvwQ%Vx9Gwj=L%+5TO*$By71i0t~*E|1Yj#^Z>uJT`i|n^L9(4oex!Z z4Nw*j@%+e!_)m-EAO7x#6&X;?A+eWnB0|kgE3T@GI!lq{xF8$t31jo+$FXUe&ah@s zD0sz++?+c=Cf6N>dkw1;vuTI9;#^>9)`eQk`(~fOd=6}9|94mYoC4{LbPQK-GLI!2 ztL^s(R8vJj^LPH?D}I-ISe%`WedPbFhAIz|x-tY|rkxLLn`ud~@L+!2e%&ic=FTXX ze_xUO{zqI`yAlt}afE6B>B|)^vWI@#116KN%&z2!6y`1h6}{k}`(37A$8j?Co9lb% zSa+@@D~IlejNC!8tcB-bZKauYP;WwkM2>q3C=i=d|FGz1uR%T>CEJ&i25vvrN#SK4 ztJZi~JS}sez3Pih@09j$)i}s-kbv3T0nILaR-d>v0jWf2>DK%i+d9nKNH#j)o>lml zjjX2|zVgCM*yH|6!Rg|`6^W|L*>x+QOZ7xfN)%1kx(kjWEH%OcFWSc`Jk6q%>1fH9 zoBiB)-rk3&`dnk@@8L6iXl%nd|D5>Q?;9##H=J%1RrNN>R0qj>D|f%XJa^4gx_*>Hb ziOen;wFu8%qKeNpdz;RSOD*%_s^8m{%*|Br&7r)8J@7lDCbJJmAnJ6 zW#ZAuhlPpfsLpn$MeUl9o8TS=%LREJcl}{p)?5_tZaO?H4$f_}kPf|z0Rfq*#{zL< z)}u{G@$_+TTPjJ#&$ujSJDI+`uPB`*MFrR52B)U8dQ58hCJZ%<{bwYH<842Moz``q z+`GbS(4(R8!P2x#TFO`uutHMlKWz(r+s_)l2V}Whro=hflIl?e5OP1G+O^J&FA!1| zSpGFXpBN2tkzy(2T|Bu_v}}CLEqb{V^}tdH-uQt^-FEPWdWwq;nD7?S+mf|(+Fy^+ zUeuk%ud&vCEvX^iyqaRO2Z{t>3*cof59GcUYg^~ejfO|M8Rx+=?62Mq=Ni#(n?X;V zJ;yC;Xu-iQ? z`Tj}Ir7~$P$#}6RIJ^k^r-n(bz5i|b`M=LaXSB^W3iLClA7O8^?Exn%x|SzBdZNmD z$K7f4hFPLrx2BO-z;}l$+^}q({BE<}M+k!a6@tv$Mkb3O9$~$e6=QE$WKGZ6$w;kO z@az7%s^&g9n^PaWjB&a3A=mZ9Bjo>-u(KYrZKLLnU7rd1Wv1LwMuz=x7iD8biD6wJ!t2`m9`f@IpeQ_QQ=B7RGHZaxEoq& zm@gYhY3V{cb45tgkAec&4SXqSr^Zrs;G6}fPI*QzIa({P(#s>%#2@8J3<`helF_;L>mKQx3v{XP^>G|N$H2t*EH_t=x)X?|K|^ zTbd#6Lo7xeoUx(E`4MF!va zoTAZt5juB3ELq&R%~(h_uyGF!yF~St%`YsIt*90>^RDlbDz>fC<|TRP%OozjZ;eWz zwdS6M7mnk1QJRwT=<+$sL>nr8%P+6U0{G6YoQKSB2bBg<(hqIAs$MTHST_gmbM2|R zot+?V6v2ooxg`zH)oe}A&zO3s=gL-WtIm$&ll=_W<)NbwB%|nr<5$E5EPnG4T(*LCYpDa}hnS!3!@Qi6wK04Kto#3F=m9 zTW4Ji$(|jmxlI<*U_qA~Z>K5WrV8{|0$lF3nnFyyl?xA>7%ZP(7~j;wT&(GH3n_X5 zB#~6p28)N-EH<9T?NpWpESb;QLnbF7IbT1S6Mg##Z~5bBZUQP_SZdGffYb3YUnA|5x{|3ax*c)m=SWmA(Ej_@+?w`mw@b}uYi(&Rca zkoGz2Fhzd&BEImrJr)dTkfy2EX6unbn-)p*Xl!s;%w&-<8s{QOD}7G|Eqn5_S4i$m z6fH72LSxLIBkQi)4RT|S&`4ed!Rx4&Zykp{~ZyQwg(?pNjgdbA;fupPfv zXY3cfQ2E_zVfDV_oCcy0EE)qVGOpf~HV$IuEuOu+0YDl~*KWM9)0);b{6HN1KP8ea zvL@3Na1(q+8l9>-C$htxTl3&ejG>~ZwTo_s(wj@sJ%523BFh_Z-+oAZC1CXM`uRs^ zaAPAsR8<1B$9mo)<28Pj#f88xYYxn8$Jja;GOH~5uGd?d`j3az-WSD_%*mu2rk62k zV0v(|t|)jkRu+GcdaUZ;c2o7~agE^mf?~wmaa+mOkaNy5=7)ysfVU;>L)m3w4dN5e z-GgtdxL=qW4r16_4UTE)xbSx>HG4<|!0#b6yF-fTC#JAGewlnMrUa~Q7uOG3oU0nX zUW7ch>&)-OlA<<1;cXHh8V;6QBg#DI#N*mH;sc#=BQf$YLW-MmtVRH}ND4sE9;Aai zEgc6hjL5nlKF4Lmr<`rbddgx7dK<(f@CvIa;D1pAFTYA^Z&t>DKi<+^PsOgEV=qR> zN^IjA|4h#K6<2I#opKVpF@hXN**`vc>R}$@<$X(5{o63ctfI<#0ejNTc$!tj1VlEb zzbYcPK7NOT9kZBH|FX?U0FJv)Kb?H*K+TV*Yk8lZ;6z>X=^%;rEbL-zw94z0ckkC6 z=;!Mr3bJmuM*CDkg}Rw3JahRu8cmaP?NMSAF8s0$*6RM+K2-7o%lQ-EHa|_`CnPK&X)v(W^_9t|yOEsJO%C zQEk$4{dBa}P6d5Xbxqjoj;mIee;fTBYgRc^S(0VgftwM5lqbS`dkyM{ zhX8D^-Q={5Eu<)WP^#xzB&7!&?At5qP+RIKRXqf-s8>lXogcaH@PYKejkV49#yvNO zKs3Bt(wkn6R|Dlz7H3%bN$5SB<(h2h=$Gk);V(taNw((R67Zz*r3&;6tc%VNQpZkf zPA9ZCy>Pv*DXY3g5<$!LSrw7T>}-ji3`sOXjh7jY>{#+dCU`3Q|fxR!uIY z<7ZhCa{So8D2sDAxj-bGVfq%RO&mGR&+DRRNXgDkuBpriSDWEdbC#RD zAyE9p@eTUea*}2<@NUgr)!Tc9mnGiIG3Gm6E@|vH6lRVY@;4{itactPm`O>Q6e1U5 zWOOtuFyV;D5gbsk<4f~=DYq1p^~xqLQXUZIneSqTMrkhH!OY>c)z4z_X^G&@JX}d! z@N(*Drgihc_L^v_?D90@qw<^pD?5R7`ly2J*IN>>;$rKAx<^?sl2YG|uV$Z>*L1ws zdGpe6lQq?f^v4i?m2kx}-k`2d<12H9Jtw%ixo6rmPd&*9>s)My_Z^427{j)|NJv$d z9`VP}FA(agZcpV&0+PCq6VuCc-vqySr42&KBYhum4GuhP5MYYH|1xTsT18u$eD`8N zotMggl{z={nK}fYu+e*N0o!{Ql|6$uY7>afqslMO!`Pc1B%}&_cLwk{XHDKkJ2;A& zPuaPAHt}13dFJi6|5VXG819BQRLKg&oRptQ-2coL(EX@sV9T)53(#2O7n#whukI&f zG~l0KOMLnkP1=?!O0Mj_4L1G#r==&?TqH|2W!wWD#rsDrlj3Cs#XQ*l_&+(KXXO4d zx6w5Sk`Z{V+^0CoM>RENR*$?jOHBmpbjWq|7_Wd8o*Z4f&Bj(a98+CGF;KgSy4(;` z08|t5Fn2i?XY!Qr{ffJBA!`~fXak~ZVWI7NTy*19clui*+S>XeN2{a`QB9FqyW|D2 z%{)95w5#oq!CG^6ORl0RBbJINiy##At2nuo?oi!%8CAwAIy$ZjgAn=Zbo#*JU~6jy zCAVHGKU~p38pzjBY73lzC`7;>HDE+x(954$4X!)F#}zAfXwHD#nR250@6xcoSshbH zL-j!?m{LaoKr?&lzLj?<9{%@@#}Li2HB)KNy4Xifw-q8+^qWw&ai8WEHjK(tle`D} z>`$ts+(t_du??xB`bs7X**G7^(Py4>6$LKO`UxX|pXb8GlYJ42_A!|6H_DX7UeB8* zz2TaF8uRC(!xxr8n#(+_oL=?fS28)2;AyKI!fBV=KdA4#a^ok4|sndXH<|ybmnk*;^d;h ziEd^`;C-2|Tff@X89lz!yZavqA6$>ud%l$SMb)uG$q>Fwbcfw8LECkBFgR%)sg(i_ zf39X8ehQ|s^wr;v`Nr0KQ2<#g7uDg(MFM8;OBuO~^Ewn}uVfGFjB5wc^Kwd<+{R<_ zhgW5~g%XBht2(KA=WdpkGypkjRHyP>irG>5QiwtqN!)hE;#J@u1rTFX&&yB8qCsn4 z(lr)5WfzT+N7+a(Vq#ERmD5Aa9EWcYLs`IE&KNpny~|5;V)}_nu9!AA_sTwbllSd~ zdh-ooJvt0(qPr6swhYWXYK)(-X`Q=xB1l-l#{@Yi5usrGZz<4yUDAQgH{HKQcx|nE zFx;sn(y&r3Zu}M%WDC>Y0MjCFI8+Ht&dJ7HZ?%p!MW)$IZ`1Xx~%e_RLC){+Vr3D$WctI4cL2a4+alG1%?Xs0@yL*g(B zbC2%WwM)S5l$}3162Q16RciaKoIU91tM7i&Ws4u6S}w0B4r~Y6lLBw4!*-}Adw&Ye zD`Kl8icPB`X;@| zk6e+0LwPP+;#r^ajDA?pNvSg!nIil~!ec&q2JW5K-yMR1U~hKRtKF83oBy(1Z<4D_dua70d#aEeH8@Q5t*lNelJQ=x z?TyjuJP>3lHw@!pmWvlIO)tLUq)_o6(O#^ZE?Ciie8FUWOcLHxoJACgn~fG`y?*#D z*uc2SpT2REb282y9aUyW;gI5+^`|vrKy8$jc1?SiJNEVx4 z_MD`}9gT6j)Ew@3@3Zbp&k2e)+QT*x9ozGI#tT4lYae8%WA&(XQh5SxmK)~92k5--|52AT z>olng;Ts|V`maSNy6fE0lKqITUOaA9C9I?_(Ffx`3*g+eHLcyj_f5$l6s_D_Sz7mU zbgHnU`G`4kHE8@&WU8ZTU#n{mEXk16t?;21uk=BJ6eC_y4jbG~H*>k?U03^q0|sJ+ zc_SVVEi0WC|!fqi!Tb!slugeT*7{{TAF@McEP&(h5BY# zl4#PJ*cT?>(TN5>9p;Ng3F9Bu7=WdaD|*@*_;OiQ$N;am1j~~|G|^N4-S{^|C(&fH z@=82s8l`>ETkd4M6o(6~W-g=nk!z)l#n;C@2UP+oWJGbDy+75)n?trxbzr&sy)2IdgPQ z+DS)zz6BwcXw&2O7BP3#xW^F^dFS1I;_k}1Vg-RQ*^M2i>WwKlnVx~)N?aZhPQGm8 ziN|kO?Jk|^uy)tA2H$@bs|8h_FG)mWZJ>nwc?)@yHlMd)NKiKZ`TpHON3s6M-TqLp zX!p#_$zMbHzZ3*Qb&dsZDh+LPk9Ysv*{$5v>AvE5N8qUU=EWIF^7{>Q3cDUcLg8_- zpr_17A;FwsKED-F4*8UQuSid$Kw;*Fb%9nJ;B1P0Lm509Ub)r%zVSwRadCHN*nLIG zXXli+bxqWMc5W%(*bK7kZ$EQi!5lyDlxwnBCa+PdxT47JyF=fAul z@xNy>|F5d1-2|QjS?36kUi?D=P-WuemwU-G>8I(hJ`K+d!mG92k6OJgP|cF`9E$Hg zIK`&PptyrtZcCx)`rv&~o$2r7e{V7^%%VN6k4q8BhtCHpiZY>6n>QAsFAe|r@5pGG z6mPpv4;IR5gn6R{Twx%;+fz)#TZ(6R0Q@V7ap<(t_OvS;?7i>xVLhTlvNQGA<8P~W z3~E{}ESGuVgV^+=U_NT*Qe%5%{Y_sFHIWI%f_biF*h*};UT)U{aa%A6a1(m<+-|HG z$@R30Uc79eas#Gr2Q`Mo!?x@m-Lp6kGk>LvvhJFqXn|K0@3UJ0E zQ6iXFfrwbS)Ap{^^p(1hSM9UNd++@^K5$;V7V0NA`=zy8gH}D0M5ijI|Bc2wrIv`5 zx+-vp54RxXj-nuVt|o>Kt+IBrQD2patfGZ*wFDS!^q)&WfvI-Wx&x*`ahtNQ-Q{#6 z95}j{at_9P&+ss7-6_3d3@lY7X~7B_w1{1b$=<1QSC?+mq*M5VSNqSbDBQ@Tpjv94*_ zzIl^Wp83?w`d^0!+%5l9L3OG)3RO#|e$x17)ZV4~JDb!W-9>|it0a4J@aWoI*MRB{ zW$WQDht1P#>eburzo8{=3w+md1R3zu`#qOSn4Q`HjMWaIH+;n!V zH$*-Qjf}`-T(E^DqD_8W6x9xfs9D}p5zHiuXV;Wd0j*{Q({dql9Z2Vx+Sxv_j`+u?b-eFB`ZQ3~M@hD&e0V#r& z5+ESGgL(u^B195;i6R6HEmTRU9t8`{V-kW=f|L*f1f+ysj#TLap*JZZ^xli-m-qW- z-kCWwXRi0XzM21if9>^Ekmx5oFYhL8B2Y>5J8QF$1RpdA3bfm z!Yr%81;a!z_iOGw{!BW$yDAGDR!B`7|BW|BvE+tLr?-hECayl*!)RK%l70onsf~Yi z$W|OEIRA`?4%R(g=#pr7o=!#dno=&O54p|CU4dQbHOXv{E#ALTv^g^~W@?%_5j5vk z_4-!%OkS`x?2#HFI9yUJx8F*UbHKNpAxB?R1O8VhLQeKAdz{f)hw6h?xpyCU|2^6Ia&7dl-jWE{(rGk`nUSLe0$51=mN0!x!TOY zO-Hm^vhyvh3L2Zal$yXXmW1SXSIMiJwnB%bz6dW!HO#|k|5y5`8RaLIHBZnGzL{^9 z5u)v~@nF#Osab2Iv|J#eH$_nGHTG(O)|ZKxDUv>@v$|pp zlB`UvP`QuU+&KcxkRESkbIhY#(jXm#v znfnZxX2d_r3crCgw125k7jg5aW3qz33#zCmnSoo<++}k_UTZ}goNEl8>`3O_{&iy) z1l~>`#;jb?-n49FCJna(9Nf8A4vhkZ)S!TzR-49Ps|tyLz+9_EV>JIUX*J3#X849<_*9bqOO{{Cfbh4 zY?*7Ww10fI!Q_rqL(mBlR=?(+feN7MlONSUkvPUTCU`k={%C2sP=FAmuCFW01Xc;X zX)klZFvhHcU^v99wOCu?VvIR9ffv#$?j7}LJ|!Zl+Gf=4N1<~?kF zfMgv~E(vDl*$s8fMv*&tYUf@6fO3}ah>B10UL}$&+6SbHM%dqkdrl0h`KA%;lTfsa z!o=oWqtA+}hi1q+e|ASjuL;wE2jUp_TSS`Jl}mYcRuebJe92wd>y^4M6k~#t8`foU z=sbDF(rQpa8zoUMQaX=L73Ph$kms{$X@nzQ^)6X@X^rjkm@pC(pLEy5);F5l8^wkp zy&_pvIRs~6<0K3@`jEG2FsT_vmzynDjd++js(FZSTyS1HXJ#5>fGNwt|pNoIDBsgxeF7I5e^mZ3t4DC$$h_t`C)A+#2a+Dm`>&;dFX?U8r z+v4aCbJaUv4+Sz8`wj#n(eg6#ZQR7+jE#9P_$<02kjcL!QK>#ojreGSKA&uGvO_)6 zhRuMYh?;BE?N;t~J+HAIDAe|>BhTPP!AM_{l=jbU7Y=Xl! zW!npSHW(z-Z8=ZQOuU6k=f zjAg6iLBpla5&aG*CP%F#|H56b02nCqC?`*(ip1=R+RS17tdOB$FN)x_(B~@JDs4h| zEh{ym3qdwL>=jdI7xwaSz-UJaDN?Kl;q8NGON@=iS2@<>J3e!06#r?C`*%^%M{S+k z3%h!4OpzvSn9iB|m0ZbkFcHO5v1bl)?2w(AS-|x6Y0@ksOs1t_D zY1OU-9Nn8*IC+gGAjtHJ{fjH+$q zi}Jxr@gQXSkKeN}gfuNogAr)wJ*#j!Se3ZFiZFR(zkV=Xq@PnV_RGi3dHx&Ho=uW` zU{zGjaS0R9VqXApn)8H^5J&qtSq3J!!EpbxyGXa|sq;nt=d^{_3}t@r^FH8EtZG*~JlZy%N;~a{`|yae}@$3qsJ5l9Gw` z{9Q30+^4H+F~b?Rb8QsM{2W;oNUT&H=4Hq$dRA1HaeDmd7IN##OWjv=vI?dCXvq7N zL9!=F<(ILRmE{}8-7d*~Z!tkyB{^{cTo~NsE(QkrE~B~}+=CyN9m*iT zs!4L%v3Dfs*qYy<3>w^5FL0LLX_ zB`Ig$(m=Hj6SLJiEqbGlaoft!j3m-7FU`9h?(O1-aR#)!j^x+!?gj1>cQQx|?j%Kn zSE=8NGDukLdu#+qqH<7;uVj^_eginxqOsmveq3GuBNL&ULqw5|f!j~i2U*Dcw{&vJ>*VWYYS}XC z_sCL<<$B`3U4y%Lv!dME`J(5`mc?s~4RsUoD4mFQw=OGeW5c=^q^^zJ1g;knRodXf zyB7++7xjj^x88uuct%N)zr`ay+{%dLi^wduj`zWC>hllzG!X}Y*(RC0kCe`RdQX6KSYA(EzV(&4^pXIXP$b`9UvfU+UdhOXbvjs)toFqvFub-(294mN9v= z68havq_npv8-c^T!1VT?CJ$SV0Zm6tYeq1k$32UD-LfBs(aQi16lM3<0+TbeHhi}1 z6b>TD-gb-zEB2W4MsD3Z=kff{b@-R~u~!A39go2fvWoqu4HFc^NwzH`2{SI{vNoJ$ zPlN_5#Uf&@x~Nifz2_`#yJlwXM_^DQeVY_RK3$s^XdE==xqn>MW$0UZL^jx1#lozu zKfG;1Zh1Qy7<Tix_FfU~i*b z0|rvqJ~8K| zkLsCTo7)x)R^uC=O<2E$cfD!>CxNTDT_*S_lMqHKudDHjV*=9LY)-0Zy>fWkX>G@} zXp6YJIcw#xZkn2<&%iPHFOzq}d;xbY*ftk>6a^sT4A~8;gZuU&f7Cnwe0}16wzL;igpP0s-U~u!z8tvh*m>FKMB? zT!OfOHn8CI_3_)P_F=eMWTdeKircU{E1q%(V{ym2(7pXY=gtwktJo-Q_yeBlZ z02~2PMEl-xL|n~}fogdx0MHcAF~wwE?A77f^^K?k=>Rwu(|PZ1Wt^W*pVtdWq7AN* zg!BhW!-li0jyJdP17{n}98wc~$g(r~X7rurr>4VomY6R=Ps=Q6>S4Sv_nb2KZGN+8 zNrzL8WrJyH9OV4iz zx)oI!`8LZ72sC4t?W@M#kY$Ce##{9`&UrT~kWh|oaWBuAbn0TAV4g8^%O#fA0Km;0 zwdvv$(onzGC93xGAb{`m3)keEW5XYDFxdFxYZ8RQ*YgS22-1lj@e@)k^S5KpMvQVYe@Ud?*$yU_ELyUCIs3F^AXJ`{ z8Egox@=Eqc092Z%oXlaxR8f%n;t{tiybwPoE#K~Trx8F?Xv$A8iB{p8Nj*xjZ6W%O zZDu(Pd>v}^orjnfQfA`DMo^fN^!(oMjKV~g_f}Qm*0I4P^D&E8wj0xRCYd9j2*~!j z%SRTJ6jKr84S-PL=kh!<4ZnH+^;&16VQ(GB9pOBDwN%Xs~T_ck^e)|C;8`nX%a=canUj6#T5 zYA5s439_YOiNmY(D4$`;Tzr)0@Rw=K65|Hbub)sFH zO`{o8sZivrI8`^c08=8hIip-Wk=U3NHm>&;r;H~*@7?{cQCZ|H&HVswUH6Aam?I$g1@)gFg@rIrUVS7q2 zQ~DF)o@DOjeS!?ODpL2s7-Dcct~uK~{f$m~{J?7;^&g*M1V{R@62tm(0S8e}3o%Gg zu48^&Y;<86|3{?Zvu)<*)YZ>Db>r_jt6d-?k)Or{*m^?MkDquOIq9hce0V1-&TMUK zOCL#Sv&cAI)E$Ee4l~P^!QPDf#k$Y~-$v>rLPP>Hinjs@7M3ZJoj{+{!xSH32K8H* zHMRKWn3@4y-M@DPsdDM{qT18UaOX`9pe93R0PGH>^aO70$=!Z(mMJO!W>h<4 zV^MLcB2J?Ap;fPFP32FYw;a?*>UZMW1F?(trSrj>?`?{Q-PH=#rS7Q67LlHHaGDaV zE!lWeIEtRsClrB$p4S~$JYyiD62)TVx&*Q`IEv^FIEMC(-{YxsP5EmgH@ znoLb(`B+mm*oupTKVRCi)Ns`2{23$=_QgE!9DG}dXs05j$9sI(SceC+ z8p8&-=M3$(vT$tb2B>oksHSwMczsn8&nlV+$1-!K3Rk>}kAya5ocC4Yh)xG)-ND{g zLP(!xn>vHX+qF`K*Fb((H@@kV%$~G(HZBF$jBh+pYVaBsGD)iUp03Er*{>8^maiRR z&SQS`w!^DXl^Q(}Hlfwk9Ns7}jOg3?pnOVj9T;1sUgd>{tv3ro>clU_6?R|=46}>w z{34!ENH7oCZpIQlg0y8c`3vrn^Mxk)MhfGihZYtO@6sn3&TQ$1;&Gf}4=YZxw?KI+ zBG8=_Hf%FBz#|f|miV-+RT!COF<><^@&y3TBwsQ0$tG(U#OOWJ*wn04^`V?%v!wNQ z{&u-qX55J|pPv7LsRWCQ)OCiuYf)HcsP?uiy*CJON^oK#eJSc2*zF5`$sc`aGX+&9 zKhITr-7#$`d>SPZtDj7Zn~b}Et{jKfI{k9S^Rh>TV!174`M08l@f+%hb zKf$_dyH$}Gs1PcC;PzdE-Uo>v*L=)D?@65jJ^w53xiF!zirwKC~Mb>g@*0d^Fvy8;+LmoiMON%r6!X+11atRZ!^4sQM zv{MpU81b9MEvQ4DwwN0}I=4{hsN9b?K}+Hl9_JgTw{IrejCzd2G#<`W-z0uiCc#`u zTtjUW>UBbB3FYP{t?G;?)2ZLnNn>Hw0X=K7!D7#yfRyl>Qt?TQb$rnH4PKC}bARo{ z&>Xr1@yFy_sm(UesLWQlSB&RI*`+w~@EXbuUT;{(t>ftu!{f;b&6gy0PzTMRIuQrm zH`!XPdNx;ETZsF%$qCoY5oeIjA?ZVbYzen7W`<-4r}unWEMFO>;71WiO#_1%8HAXy z65Wh(!~V&4ubJ43_uQ23#`N+NqikFGy2n3C^Ro>G$sZrTAeoC_R(5{yNTQW&d>&JE z_!0h+Z7&cOo?bN{W+r|lBy97DXZ_bejel$c`L|rhYEYgOajt^;a?qAChgi65vr8cM z2Dk!NK^1h5;%8%?$i{_j0g$iIE3ygDsX#4W8`)S%LV{A# zs;PB+NY`bZ;ek{us7z>46J{HHHc#;^Ek8<3shG3+8oB_~031JPDu`^+j&ngqE?`h? zB(G(u$=diBB&Y0F)Af#%Zpl|?E!cHf4eH1Y`~rb+k9l03 zDVzbR?mxb(U_)yIW2PUXE<{-OiAYl)rH<}%2`3K6=}8!gWCvA;tOwv*S~g`Oz4z6( zKQdN7cMn9=i^PSanKjp&%M9d1uJa)V1FJtgvGVTlVwI*lW14`pBkY?wBh`_T*(hzv z*EfLr9veFskd07)hP^K!C*Qzmaic7tHL}ifUAheP(A_!y_=5Gh$qODH3Q@eBrQr=# znt-R&ETeV(V&7OBeNpe2;i8sY6uiX51cxX3EbWJSxIb7$5&Hb(uV?1at3if9?UIDQqY*&#o6@Qc3ZD6GyKl)}+YRG!$p{kN z6?G$wT2i*MMBRlOpy_TCD$`N+^m)tFqXsykaAJ@EzJ=es#{|)fa3M&AXe*ClNG|tx za$L6H+zT$UaMuy$p!3EM2C_lR&iaF6J);jl*vaY9d3LB}cS_m(^5(-pERqc;H`Ju7 zgi8YCfh8ez=h6#nl=DmODtTn}0~Ro>#OeN6Xm7JYOJ*_jOkd6+>Uv^xGZxDWRqE~J z0H<%OAb~r`SY*XWcOKkbCgJq_YUX^J?niu`nj}yt61$ERQ1GQu8#X|W4Wo8^6nOKo z+L$F)TbT|zIJGj`bkI*{D%uca1*Taf-jTgd;VQIjY^%}-CVX|jE?sI2;^`xs zW#&lbhL^{^H|KMvBGtN%6`tf5B{|w}bu7w0MFih%9hMpRs>pn^xLSORBvFi+D?PIH zQM#0rT4LiN9f6|1sX+m~ZJfQ;N0+N|@F-AaNlevg!BMrE)N6JP4{$0#`sCK`q znP(3fz+S>VE&HNz7Z$mRkzh*WjmkiKCAduQ@%QSBeaBUSu0f<6=XN>LtAm;p;QHj@ zNa(VU7;N|_&nhd~2fiL2DKNYVRY*_r2a?zL){8O3*sDtOCu6sYtqd4t%R`nkJG`=Y zSS+87`vu$&Ootcp<$Kv4+6%;GU#4MwY{~wZfY?oGb2;Nz@_^dsnfe*?#MIUoj(X z5wvJ%ny|JG355%`4$f^CNW-v<)Su`sXymq_B~dB)Nzm7+Aba-6b(bXkE&u4*PfH^bJ*7Vcw%fh^xG@%;z!4?XXU?q(4b8VD_B3e zKi}9odD5pXOSSsu^XuO^xc=#}^50%i9*w#Sxkw0xt5q}yEx90a0f_~^^DW7eCBGTM zV%s}tC6AUHWtM?7b25@*JG3unDd6wx%(n0=HAw*U&D>8F+Gk1 zf>Te)GF4d9sBA9pcs%*iT++ufVH4Ae>LqdJi_{|%2w>4ddb7-BmrqL=#=I;q{&gr? zum^lA!sIqw5{wWi7~EL?)-2a$o8EWrw7zraSTI+*gOD?4!1uj(ym2k1^etx?09*(e z2;*;G+^l;rZkfvdle5u-4OsV}_w@mKX>#|nVbn{buq4BnTreMnGvsf&0bDD>vSq6=GLgL&7W%D2en9twcw@3T-N-$9`-B&S zr!}a<|6*Ro%Xe1VjzdY74Ng!_@8%S&3L^4hWFX7LPy-@=^4lx%WF@lWpFb?gzq~qG^&Q9~3+jFN2TC%+1V$N7h{@xjHlARsB@Tjg%CEtruqW)q0SN zvP6Mp$k@*+*dU%K_z>)dO#QRbR0xmNu&%uo-dIbgOi8E-Sl48*_mO}Y=p_Db%<0_% zWu#7tj>LC%%v%;pM)z^$s%9Kza(zEk7e8y;k4V2!WX^oQ@bwz7B-H+Ojf6;R@TCC< zn9)k%@dMvVEMDO zwnW(MMF(wzARCb68oR-;J`qO2j~>95SL?=cjJsNSlhNlp-mK`2*I!!+ z&p=DlU9X69^eFe=6sX08=U?7piMbc`8@%#W3s1a2NMI%%{@!jV+HJKF^aeXIA!NBX z*b&sG?Xl7N_?qle=fGWe1E5^Blcc#qi0Jsh!(sHZ+h`flGylwA=rKC1k?qX;BjZME z9iw>sl_?EmN?=?Zl_y720nPN9Y&rx>J5EzLPhY6l8mOwO0cF;2;@@`v{FN zbE=;Qa8;E~8PU0Az~~>&J0D-WV-~MZnRj%gb*g0PVQ1{>2xN+O-@pJ}6F&x$-Mb#M zSYg+=EN#Fw)E8v~nowO^Q>J#WT%K>HF##%+5T_)S)Ep6Gg!mj|*|KMukrp17EZL(s zbMGmf2EN#xayl==sj5NnPW2XY&rdC@F@|cK3O(=GA=)-!o-n*#PftG)|Z_jdJPJi&K0!E*S_T(fGoJ9)#qTv(bnYI;td3sXBV zlxCMVr&z+0n&zHDc^tyM6KvO8R;b;SJ1q(=c8YEbG2!Bx9`d=?DtVKmu@=JaRT?e0 zr(~~$e&u;|jE!4VM?~WQcHWGtyuCxbnL!jMmI)&To4?G)52wlYl9$Sn9^N)QtsB>K z;*EjieA_2m^GZVWMI`}xj`w3bF{{=QmEPqxXA$)BHR71%C0U2gZ^RpHU7=^|j@2%$ z5Z!OG<2)hv9E(dVzq0O@02c8 z47+`xTHhKxZvTgl{@+IA=%7)PzX=X? z;{ioI(6b(=9Nzl(dZ26!bw*alF4@M2dzr_AmEDJ7tnmJ3K}y5KXzq3*{SS_c=J+DC zMJv-wFaPC1FYbAo6L9LNQQy)mE{1GcSOIzF zmj)XjEEcjF@V z-a%DC0qRXkncp4z%`f?*n?~R3(#!Rpn`z0zct>-9ts}zk?($!Z=uq7{E{$;iUKf|g z&{+T4-LHH{s+}d&2}9d7E{s_4zn-><6E8S^R<>#wND(SsTw78&EncyM^IlEILAwao z$13*(X-C{BXTJ)Gl-CpE-=f`iU@aj(p1XblJg)MHm}|P#0b=S}*$W1h@yta9ajKP! zIg!-X99Fo7UUa7kIS9^Mk{l|qvz0A=B|ycVuyXdw`DUMzz|P<@U$!Vz!(Be77iP+= zw#afC!iQ?w90(b?p93zEwD-gGQOTCY`?QZzWep`%a;xH@2{lnWP0ri(98~OHubb9e z{fUVwA{Wa`!!4hG7WQ){$JPI;-~4r&P?YUVn&=3L=fyBe%C?(O29Wr1^_e|4;>u~j zR3&k+(Z!vAciuR$(AYb21Nsw(h}R_l zdPTEFp6vGlO5oj4J<}@*BQqRYn@lk3DK0r5Pvw`&snj)0`kQs=k@5Ouf@Rj2Cd4xj zDq_av6??x$p%HFdEtyb*OT0W;KsHG~;{8%$5i@F56kC~gGPy6tBx9Z}9L%>mN$mvI z+)#7~-rB|)hIH_TCyIbn`0`&SJlZUzN`LUAY!#;H-f)#M6gG3nCW-$QqYO0ALTp21I+Ig9??XX9PQDG*%V@-YYo}vep#BaVvb)$M!@s2oqnUvb%{(iSBR4JU;1JF{f>VTXmgy} zutC(?E&h1VaWWzYk7kQZr;|Is-@XLD1kcNW*!me}L4~wp51_(*$&!1=qhPfzdBFT> z>^F!C)ors)EH(^U8KVE#Rh?9GS2K#E6qjK8s?0&?I!7xZSwrvb^S`+7KbCy)Q=0T9 zFC)cC?2F|c@JGZ12X)`aa;!E|5 zBHcRTyc->xwsJAddY*}kxGWL>!f$${Jbm@O^Z(&-(8T(zcGLWg=YQad{DOLY3p34L zGPC9pY5Fsq%o@e&|G?>xVEr41(9{3DC;7)p1{M?SeZa8k^gqL`A<W8vi|B{OQPoiP}SS9`^b8!Rbvgi}W zP%fyDTAnP*gm(890Y?P_)oO}n;=0LR{(3)COMet4%VVEdz&G^IQ{a;|$M#ZR_fXd! z{rWX{K67p!kHgdk8}-(qZB<-BN0%ho_Nytq{k%7WJw?k0WuW;EzrdP{_mj+E7d^A7 zU>%|3=Ko2f_J8t;{;{%7c}Gn-*QS{m0&@;*)SaDb=^~L(T%W6qn_5)vt1@TuWogl^ z>4oN?k($6CR>%-Z*rk{YCcaa$da7=W*mI)p;_O$3>#%Wp%|$ULqdE$pcVR}=T|IhV5{RU2DEWUHT)+ni! zP$KRMw)Sn9=s;M_)?92$1}&Zp@cHhOCQ#90h9LK!7YyzEO_Zy%uu`-!+;VWZIcLt( zI({QKwlsT*-r9J0~ztfDZ;pypzBJrGb4;paK>MAyY!?WjUJ+6nM&8;S-8)eHExoO|9WHw z*^GSUj92oFS<%GBs=RZ>;q6;ey%jjdR!&yPTkJj|X!IdX%GK0GJy`tGySG+b*zLSu zdrFr@=UXtnf@)V{POp(VJ%6aV%y&hrTM+!f?`fgZ4J^Su+FUa3KZPlFRCyaJcy6!CiiMIA}-}7 zd^=itJnK0o>Ry*=9GmWC;N!=KB@>Df&x0IWjEZor!RPv204)@k+_^6pGE4!|n;y6z zCR!J$Rwr(465%@$Pap9C=&?Rsk)|5Zm6O2m7r{t@h|X-!Di(s0e+2#?pK#;nkDMw5%4Bu#LD&)y*}fXRrE7BEi~TmQ-l@N~|{1rSXARg0wkX z-fF;43%Bk{%?iw|e>h>W%@178S(+b( zC14XTddTBJMC^k73LWzjvL zzhf$_HVS1V+tm>*FF2fWuG6tpG=$sLhG}*~nx38zC1wii>@Pcok30G9%o3SQAm>J9 z)uxNgux+Jdp99Ygnp1x%v@phddH4L>k9XDkbvn?d;f5TeC(l(}(kbO~uCWOof8ZJT zG3Z^9Hcw`&8TSVt+sQvT_E1JrRl81tpX@79AbbEU$>%inTWlA?7y*fRZn_e@Ru(B+_c2yS~Y?Duygcl0L zxEIs))uz)|gVOgYPeKa?st5nzi2ik^R8$JG{?aFQL&ky-T;{r>^@zY7QB*3f={sza zZDoL&|2(Ffm${yMMaV%Ms9&EEuiMZcM{r8FA^s~wK^U?mLyZ;5wR3r zS7!8WC1p&!(^w!RjbXQ~6y86v5qGxD6)bH^k&ZD54*4wZGY}~RVT*>U(4>7LVT`!( zEt1~5)n!1PbmO}VG#DMA-9svoYMp8(y)Lx9SY)gBwr9n0cCcZ0a-M47+6|~F9X(7j zO)b^o@@Wc`ZvNs|3zc7ZbV1kqFZ%C4o_yllGwVuc*wpL3u_TOYT&~)Fb=_N^yXO5W zQcxBgAF1T*C1X==ae-wFn(F+vxEg5Nc=ann8kiWcnWJdA3q@LyRNQ1UsbJ4X3A5EhrbEj`p_yPOXkQK+kD@RD19r?ri zX|Z=Z$o&`gfF~;wAlkSME&fbTF(J9h8I{}x`DF6c`N_A>?DW?ni+^}Wna>n2A+->d~0EEkyK zTgXOFG`9VA5+;n#^&H@|r;DR>#43jv{ z{lUS#guXEGjBjyib{L!}f?`A^jIz?>KK{G7L<*ItkHw_(`lFiOT0a}_> znTw<86fLL4iHdOZ^t8C1^HS@KEaPZPGYU{CjF8%IPM==0QS)jZS;*P3Uf!1^-m$Bbl`3de`H#2y@@ z*XJfJ9l5@4@m@X93^s%m&}WC&xC-*j`BLYU6Q@%PV`n^n7uoh-|2!EpBPKQP0@6zo z=%6*7o2WF-E-#$qn=RX=7-tNGw2|D7&GD5w|5QX3_Ct-0GAyB-je5VbW_x3WS810f z!`Oo0il0wqPx<$SCb)vT=^ADg1i#E?HV7xE%wf#CLc`B^_|06NdSmocbx`w!T(+Kb z<@EEIrl%fK9rP+1?S4mimAGJOWyVqVK#ck^J2}q!8r3n^c<(e5RQw~jrrECEnTmuw z=XxrP0vr*4cfK!wQG4J-|7v6me_eJED*CVdOkmPt-8-u>cX16)XP!DdmRXNMuVIvwCph&00 z_sh8+E#Xx1)WZWH7e38VTHueoTC%NaD5so}WNIEy6n!|UHyZ12Ce9hq?7pVFvKuUI zibO=kL&PqX?T%-M)xKWGB zS!QmE^{q{#o=z-IrxddH~ zCT%^tav6~`1^E%w?&GvhYd5+Acp0NaQTUSMME|o6@qb^T|CO_n2G%lgl2QhHDd2sw zI9H)Oo!M;UJb5Z$a#?`kpxNaDWB#-bM>hb>GpQ|dXBQJj`PW=sVtq|1mw+;7<($H4 zNdfeHGNn!KdV{I7y&KoAVd20Te~6`qHcDFJdm;4Us_aXB|+G%E#ppi{@_r*+8CVn zO#9XEoW33Yw{Rg-TH3y~^Cy6GB2qR@s8QzuD|PhOOT{4*c%Y9$l;77gAH-J-G<}Y} zXSM}r`0pHxEwp(%1@HM} zHvFhq_+-ADoEx*&FyEnE!)oil#o#!0`(N&Q;yiIc5o!1vkLC2xNV#_3v;$PP9@Nz8 zcGAGrso&hZ$B5akp>$I`_g= z{b^IK@No%?8}c|K;EOFOj^iAn%O?io4?Vic4Kne*1nH+PCTK0monOD4D)@urw%i{a z!

WgUasfC%JBJuA?36geik_9@6r%=cUj4qv{Sc?ZkG<+U8x>vOX}^W-IPS!4N2^m#Xl@yhec z|F=2LL+iBo>*b#sR0aG-59@o9k$^{ZgvTAdswqyBCer6dQC6Oi2g&(+$vCs9W+?NqDN&))#@H)xF?*DOqe*3S5#3r*>8Rak_@Hv{B&c z4zy5U!PpYYy?JQ{8g8X4-oWO<-0Y2y8QI(jHNRVhezJQR&}D1BFBEH+X=sc{RxU5; z=@|;Zjy9%`il2(zCrsr+dTZjV^Q~pdAEx6nQd5g6CCcn|UG!{|dueG31Zm7r!KIII$lW3+m1j%BWdqp1)Kf*t;DMhrL|y zoHs~PP0mRCaSc)#8TqO-r-~cx`p&f9@}LzPn@o=$`W9}fN}{jr*YNKqiix{Q7dZpVVE zyD4pIPkil>LRCpD-T%^M$!3ScamFC+qwExQcDJ|i=z8N`t6fmx;lw7JH3Z8b32(^j zxVct)=R~rd^g;3{Qy&^KXKM=xVf37-k~txwx*w&dtWZ8uers*!d6V{W4vtI_ft`Nh zXV2n_JOd!JG0Bi`oYYu)V&3jUo^^@igf-nIR(g&)m6#Bx7TuX>IvHd@(|~7(`l*AS zn8c!#`wJz%9Y`KUzusZ;ZM0Zome<%dKy%6Z+ngG4i8w~^ zsRBQzgBu3MMlC#%9_cYk}%Wd#bYCg?8+BG>rZoQB(PVD5|zwFVsjd*wFQ(n&H zifFJBMKVcfx@TQG!JQ2rsv36g*<~bo)VBDEQNcrr3BixTf1S~i8N{qvd#rE6qO&kj z4uuJ}JF_v1ZWTi2C134FG|Rg4VOaFRVBKz#7%wel;2>n*BdMm@2WHX%bFJUrAq7q+ zyn#o^7B+NFW9!=Nj)! zuj~`2eq8&5}u?yM~-4wwtmQJs18 z6rV~MODTiKnSa8#2Adv`1h(A;2_CkPca7inTVUmyLPKhbx|oU!Zp_|sg8j#6(N zsiN>*?E$^PZPd-*?ofqARFRF(uop6Rxe!T6U&UFu|GI_f>za%$h1p8L;c(+riY%x} z^t^bTmKFQ60vH+}?ky$yi2d+Te3vnoZ$A{GRx4GT#4MWsh7jCY^>XcktToSLoOvgb zvgz3dRg{Q$>p6y1V?g7h?Gtr_6(K4^S>7~{6oZ*!XAo%1W;vg+wNv%(`)^d^$w#|3 z)?ni-zblbM#oz~yxF0Vg8+xTKxrF2Cz%xkL>H_;~7FpVxNpuEuKDahp7VPLS z*wNty{+3`56hzHVH%x4OxdJ=cL7G@aHA*WbZMg zq>y-@I(scLj5uGnYbrY$er}H8(?3NhjB;SRN&Ug`^I~)?_sQTU@rsxdqs|AYJc}8( z?IDHOou8r~JoOtQ1{IzmhCFnJY4Z{u4~1ouwFAXYD?wj8vx&OvyQoEn$*@c^8EFfz zcf}NUp4$zreO=8Y!^j2|RBu@1!dx?Jpd*;p-cIw_?xumw6rxRsp{Ftz{d(J1P&c&p zdu5FIBuC3>#bw@|bb?>n;8@2h#1b0Ghz8?^%|OZt3vco^6dn~`J|AV(Qgbp}*vFR4 zsdjk}q-)Usbne+R+NPfNNC*Fv5h}tPVvIPDM?pEO7ym!@zB{bRZBI9Dw+*)qL8Q9( zmR>~(z3h#GCYS)BcM$;-3=n$90u~6cg(N5hqCyCvN(nW9(jp*1NC4@Q5JK<0d9%;V zojG&v%sF?Snfu3mp81|UU%s-|SJqnJZ>{w!?^}Evd(%CNJt~<^EF>j5>D|%~bxtrr ztjk)*CxHD>$&n%o+9Rau3MzZk=7PUPmYxzw(S6!(XT=ZvU+I#Ma&$!7121cKk17FK z#;+L>_T@nVck8MZn`;Id%E`e{!C%CIzgEV35G#Kwnln(rvZH zW#IZOaGapH{2J1mgBN*BPo3PsH+ihA1cw0|RT-Ji4I4o87}E5&e+72s-z9pI4;i`sck!u`Rx5#_=0X`CoD_Ot=~PVa8J)vLq^Ej zw9Qqb<9*PIi*j`jhCcx)!>x_tltppB#4bxzu;3KI8cdDS#C}H5rW=FLY8Z^lIwG{RhRhGCjxh_+T2;=vPToOFv=$;sP#e~dH1RMeYF5Q^xI`{tVz%BFQ za3r)SE%QWg9BzK?!S+``B>&L!uQ%WKR0dbHH+J+xNCV9PSNjNV0dy9q^sHSsg=x<|P6fq^3g6 z0Go9&4W;Gd!12IPA4Bh21W>+JsZez+C}cMNg*jW$8#zfaWLdd(jC zj;AtMPL#Ldn$v+^92F_F)Y7d@$FSMho7L~xCxSKPp;uF7tJuZRh^~wvm))DLyJJ;r zE|{c@raG*_^x+aWJR8GK zAhE%tR+}3LolMJRquYzB-P$BWMGqL(#e>=ruoy?z>rGHRK{K!`zvIB1`{9yFp-ou^ zxsoWq&W4s-w{;q3NA&F-lwPf!Tl6T9fsR_{GsCA~7I;Gb6z_ooN17KF@`f!zU>;qX z$%(LE|M;&6P(Z~fiiCpt+o9cY3A00kf?h-I!U%pSjAnZI)k$*VKlyzf-<#%D&A6tq z+iGfg1A<^X!m_a}3NM<~7vm~O7{BOco1?=M5jXpTqGYa?p}=9vmJ%3H14F&DGXU{iH5Y>bNoQDA6jX1c;UV4j=&cCNe_vN@uc5 zDZp8DgC^Cx&SLc(EmBvpnzXlnL$b^_hqaXHtXqLj{a8F6b@o~M4f1LwzePY7fc&r;+Jxr%uF< zKdCO4lcam^&3~zp{&i;UjgugG0XbUy)gW>V|HBWUCP$(}q8JYf3nH3)C;+9z2~Xv?xNAv}_hU^t;_uC^q&ZY6l4aOJapqB^ z!a2xV%1DF9{4T`nVh&M%)r1W7N9`M(iWcvo?>mp023bK*Ds{sxF!pd6@vEFRt_g3# z8mwoMPjj>$pvB&7swB)%HdLHJkelw(DJc-DqC2sRku&-vLOK*|Qd4Z?8qr_bbhKc$ z2IiOCjACv0MYF#HSPz^`TR_}XMqK?@9(BWF7V$%Crm*jT;oTmwVz9Rt-ORUjrBlmw zC3#|XZ$;Ne*sdz$W&*=UqQqj?GRei}T)=8)Z(=kju4^z-=S>t)lZGc4Mw0_41nrl1^a6NgJ8! z>k#+I*e_m&5I242p7>v^B-25~+$G=)mH8ljz`#J-a@6^{BCiejEENe`yx=JTGH!ir z)cX8~2w*LG3QOCyQhB09b%?z5kGw3u=9aA68aL7LM47=vU#lr8RF`j*GR13_Re;8}941qC?gi;)F7U zU1ZObv4WtTKLdKI>unbqQTQzF6u)qj^Nss1oYJ$HQj+F)o0Mb?^4U7|;vm0;9mu3P zZ9s41AdElFoVlFlH+E)wb9d}z-egWT3<*_gD^Lu8FRr_NgMem0RQ1iSq7&`eQUYad z5mS_WiTsZK)DI4fL~+mx57&GsRcdRSGAU>^XUV0a$jn4N4Hs1Ut4$2BvX*4v)A=26 zfVNq-ehlj{UpCO#D=wh4UV8$={UX3D>qRy&JEpHW=5t8a>gH(9Tvu!)T*Bl9S$-*J z<^8nGp3*+4tXK**pb@hXD1~OpA)*nw&(7z|uLoAaky;&5g;W*4UFanhXXhkdiKOyP zYj!H;Bu`mfM5N(-yWK-&bjt)PAN$BPT+9VcI{SX?O|N;~@u^+$gKE?+Wg{kUi{pG*LdCam#z{Uj zQ9!I@)#hbuH91hr$O&4WHj!7cysT$)eqLnf)pa?aG#B5=V|w2U7UG9r*EkR`cqExP-V*)YETpz2Ba_6qX8*LuoCn2B@O zSG&PYsu8(Uv8~S$&%O1%Z!9u zloK*AyvLwdah}$G&Uhb=Z)l>t+^aXgc@%~A-$--(!Rm4=vbJJ{^EA~ef!^?7+iutM zJK&b6%hcxSeAg4Q!Poxf?USym_lajzMa#SyhmjVgQs2}e9Kove+? zjCj6LW8ru;Eis@b-{#}PXFq+@HNF~~6^FOc_78QQ^v!BKFs0>w9Z?G40BeRU?dVzd z6uz`6%M2~H$eShlv!AMpQLP0Wly#tFPO?98{19c(`x5-le7%W@ah*LC!o5f{fcHjb zyf1cz^pHlZFn5R7H4^QHcyQY~p7gE(gB>X0e8#OHgdY*BJgMNLRJMNa6hhaaj2!~>;JGRtj!TEAE%jT5Cn^r_UemJKUciWztyS!P z;4JBP^;A_RjBGecQRPSp)FJge-_b+CGCoM_4DG#l;}$x*5}yaz%9guY`fRyiltZL= zJ-ex;stv4^lWE}uSa)=I{B>Z-9{cvD;P}NYCZ|hIuQVXsKvZ*SYcGK$bFrohxwYJI zRTo8fO3#~#*gUQk9;lcWnfM)GQMJ$F5n8dCTe|mqvH3~uyIuUSlu-JvUVN2{XRd-( zU^6GCukf_JrA@vj*3!L|E4UzP9wU84QeYvXecofTAEYl#;f)%D{Aa89n|yLazODq$y8vYgo>&TZbyjJL8h z-Gg5&LQuZpyJz5E!>hWUGP86^dDwB#9rKPwkp)d_$u*5V?Cvlg=T}?e)){&4`3w6#XE!tM+Z|VUs~+I@{YrtPO{Hj zm#NRUvSK9#LjUC;%lCeD+&lo6ma^Os;Ijb!RN!b=_4YJ6Dx?0WXh)l(TBgm_ ztF|F0YypCY>jq5XE^JzHoGIF%kCI#|vBeqR-z3@>x*j<@(pi*sB_1=Avz*_@CN>VQ z-}_~6%o!Mn=#PsF;Uqe*CjX!pEkvb|2Wa4oPGM#@r7BRwb zeqR1SPV(|GdF&f3zf|=k-L@l_s2C=Riq^_s=yn)pA~G(5WM@K}BLgWNT8;E>a-XHP_}c$l)3ut zsoo{=igEc-VrNE}UlpE#inZLX+t7FrQkTSEvaQ08xvYEFepH~&Vya8xP?DG7(4(d5 zy&T~5tRp@T;q~<;w~8yU$MwUXPY?+;GfiLhR6I1hRmUlW(zPuY?$dMPylx<*H@tKt zegnMu?-DZqa-Bo(sYAd{p87>etGA{}>S&*8(j!^+rALBtt`90_-nqAR1PatWwH&kd zLk?86&m{YW_%#_52%`^{w%SHvLzvPPgLu8V{-27i@owM(3d65Ot8G!`=4{zU23!wb zEfY(&q7u1!n z-K^E-tM8VUC?=`2{E1M$a*lPDw}?PyKwYLDbW@1v1083Qooxi|9XCMhQC-)c$yK-2 z*>$~4xoo;W>Sm)HL8}?G>lqK1JsnvhHaiS4VYC}#!v0_`q zj(6&(Zgu8m87gqq+wy!}@?IRarT3{_pQ3&H%j({bZa4JNQHTFr9sTWM_nE9q5C2>} z`s3(dB|4OFc1LyV)SoM1z|9-_aa-pC?(DdIwLPj#AsL#4EW{j z0JV%4einZ4j~?|ZQ8EoOzIFwGs}4*#Em*-g_Gz+hl!KqTkT@$&JIZ=_ z_Ts@YHG#oVNBezCD}A%!l=fbMo=xCm(*%@|&?Ss)%c?o)Vli24NiVy4I?yC<-62rk zefQkyjp$nsrHzIx0;NYCcF>5>$s0oFGEBATlYu6mpI^L|=j`#1Uh5y7cQ6*=q_zo) zV%Rw+F5IZ(2Z;LrZ5A8*%v_GYF`0_6N=!>?Tky;s0|E}=9{z2*|Hu3MIb|>f<}mR7 zcYw+H`(ug$0KQLudrJ$yiug?-LC1)ed8xIsAzOg!KZ+C>tQhYP_VufLH<@~)&!xma z>KpL)>h01^%dBBt8aD(dMB&b;qMC~4^UO&0iBi5j#1}I8nyu42Z?nwAZ8!Ym+o7su z$Xv3nWs*!sG3i&IGBG%)WxzEDr}Nc6qUI6p7}W7_THam}r`15s3Z5&omdruI zazdE?&HAzJ_bVGahuV%g1^J-$E|zUiR~_I)_wUIJ94P!WOJShrX0E^Mn4LPND6Zvu zTJB=CjuQs&GJUx#^>ymNf`Zs&ucEF&PZP3?JHbohv*v?V{0{iGt=Q0WJ+(PHE5Z$y z)TZIbNZb%x8l0UVtb7ssBak>yuPSJv?z84~bzf3_NdK-lp0%zvU2bZl($mzT9|egp zIo~f-v9*<|0e$t8-wm* zINYjh&1+D;3wh^I=Rc@$J#0pXPM#`B(+JdK{`5Pbn>n%R?9AiRlu6L5JK>Q%t;LMD z%Dc%w{n}HmScOZLZ-txHl?P(wOLAvAoa51LYN?8Qb8E8$irYsPy4`IXMe5<3z=lx@3s-%1)8XrjgiPr67-a29%#vSXJa@{T*=cxw;}3 z<&J_5^u)j|bJ?-ozgJ>*<`Ofkc|bdGMOHe>)MJoCh#rPpJMG&G7UJJwB?sdh5so-* z9vZ>h)4$l)Bq`hCu8Jr$p)QSagdM~zPzRe>Yc zxC+4ubs}TT3`77Wm)T@V0cNBjO)f?eLadQ*M;T`LveZ{?J{7w~#ZC2*khCx8Sy@I3 zIxSJ4tU@9*kO$^qD3V69w=Ch&VXk%RvUSGw*7h@>8KUtB$sRmePU^z@O)rwOllr9j zarL4J%wQI&r8JCybAdKI5^Yb3qg&KtJer%z0YQBwOs3$HID7<)apx6tVv5B@U+hLnTvK<(@nZB z65&ygXP<5IA;ccndh^4Zzxk^EGrK>u8}u{}{*6>V^s1#DtZIiG|5=ac6Y-NKh8P%n zVgAipt5$1u)N!thtvuCu**6ZTVBa0V!YA8~MSDlm3fX=UqGbV!O3}ppI0doMDF4m< zNpH{7pEtrXPKJ=3td?k(3e_u9YnQGSvbi4?P|kGg@d$P72x8eEk8ua7qz!iIE`H+J z4b|4Rt9K_q$p;>hX>(8O^Q|bauEk_|84_&-ac{-OB~l+PK}B0a#BZc0>^Z>FQ96rdL0fyMjF8@sgWc1i$Gk$*Zt3( z`InoA&B#b+B40NHhR5F{q{-{q@aQrW28I5xwR*=kK+G;hn{yzhauEQ)L%^ZGh$(w3 z|9z2-xIcR*|A4<=(q{sX6|Kyqr!Z%#VXe9*JgM+32ue$Ys%n=f3K#4ud4O?rWq2Jhh7OWpF{0os_n zR(K(6RjI$F%?-D^t{pI<$p|FNn73=Yi#zPOG(UOPSo9XvI5q8a{aK*ccvY*84}+vn zU9P{-*_zw)hExihTK;Ap?GFrb$}WtupX9^=bG~gXH->lxZO*Q*t9v_XQ*wu_myJtv zlOqV7Fz2fHlO!M8Dz2O$i%y9j+-=&iVP`u)Fq^#tw1dE1;%#0c=C`!|4U>LM_x&NRX2j3=DzO# zYhHGic1U>pMZXcYM_GUO9@xt`4O3=qK`xYSQCcoV2DXmQ?cBp^F;h=x5#@%nS5{-* zr9(}Jy8V4pt&4d4#MWf%tLYiC?b+EYn-I@#r41uvN+Bg|Z5j+zFsk_03tmYH>6)2g zFcb)RUuVrp@-H!$o&6hodTmMbD+gg>d8riH#wbLAd!Ej;sZU&2^Q?W}lNk3SirHmY zY6Tyo49jO#I6p&f%|@8k#=~haQ)`I}zL~1%m5o=mHTk9-3GplF4W#F~+h$rn1*1uo zhsaqFwY@Vl5mwSnBEh3&56q|G5BpsEm29MzDFV?ocslw;%gV{hFVFaDAW(A0BYnHA zKHR-QuMQH|$p~7_GH(T!Usgnp`+@BugWT2REzmuqTTG?`ekbys;p!a#0P|Ken)KY5`dMWZVY7B6JKuJTc#BK4+ zUNh45^3(uiZY%!$(^nRW{7cFpu~1_(+-oCVh{jQX44;*BdaM>mImGV6SpeXun=piR z&MyjdPmR%Jd*=>6T1IWyRZgnwbh$1$URcq%pPM6lEBow?O=t>Vo zd-IDIj5}&~#kR5rF-o(>@ax8db^3cdB6>u&m`=R!5ZoNL?dYB=B=pU8#4}~=*wIne zHELz**$i;`FF>-E#yEZY!VSt??TrzdTdqx&OAZ4ZzAs(5YnRwtX;Hd?m5&DH;mi7! zRiqpZ7YJ~l!YZFLp9|&MEDJ48E1Z0wxErPNrMA4#Wm*5yN3voef@s-bZLrb1ehxZR z=y;*eZ+m|&s*0NV(}q)BwOx6+X<%Bi3v9Pb#ESsxe-E(!4e&!gVXD8pJde8roEP-0 zcn_GI`umk3!I}xv?Cgk<+Ciw1RBT?TR7;3$>i*756)%MHo1u}@v?X^wcr6z(Y>QMnLq_knXHT) zf^$g*sLGFpoa-+p&tr1iG0CPU&&Y9oqWdRH@W3Vt8HODbs0_4lVw;ojD!PmFO&hzX z)86$YSf{5g3OH+^8uw1Q-_*-urNn!i7z@R2h2ABm?!X|bNO%p>Jq zE%a=n6w!NWTXHmbb45Pg^u^FeIiM&sggyfgAMM=1^>|-cjkQnI=gE<)gFBggg{-XR zDQ!P!pb}R~E+o0R549If|Dht!SUD~5=XdPV){c`Ad-^?bz3x!UT%!eUjxxNe#XE&Z z-m&|wlLr}*^tqvKNIIzZr3L7sNx<9=U zX4kP5=_#VxDPq?%kq3Y51racC~#S;y8s^ zj@2sdK3}duu}6|@EZMK~5LDPy&$0?dbmYyqm+XN1-Q+;|D2bF~ojc z*I>eFw-^E{=ZLxL6MUMVOlG_~=>8hDxuE}SP;^wZk!`rM^DNR{sWk=$;jmSr9C6&Z z(h?rgnI%&7c_aJdeqU*Q7J2*D_OQl)#X)i+_c$AGP>z|kr;qWY{pGEAWUH$;@#O*G zDuX*4`^*_w@x?}*#4-$Cu&ZHQIq@B^a}d3>vU}HMuxp-3`VQ#%4mc~(kc3L(ef=3N zh^zU+U54gxH;)7Mqk)s3mQQ!19BO=h6Kq?-Drv*DE6)j&Ucm|VW(`f3UvF!D2RPU5 zGoyM=_g`cWt2{z!zbX$bR*;e}O+0UM(L|-&PaPlP;}xQi_Dr`0Y(fJ^cQr57l^!si zcU=#TXOdQe_f7qI_x}!Pd^jF-vuueaW=LIpo0m{f-YzaZ~?Ml zHCRLKCTu{B!QM+IZ(UFGp{ly+Wd6&ZC%r-ii{tAMTKNLSh9!$ef^>WNp`l zKBBZ}2A`SN_%Xt`JuRU%Rn`0QWuKzu>@&K`WYEU<7+b%y&FN1tCSUe1C z+v3*slC-To+PcnTU$yyqWHTdYT#WyKLOcnghYjaL(|A-!D#4u@Co{zx!%f_Mf@M9f zHnU;+!frY(`}entMGk6NmzIGB&0TMTOm;7s4%qD7K4l+S`mHYzn?WhO9qr;hC75kC6yhp{++)sVgKdqzdK<7 z93I@b`J%g~jBu>3X&?{bQY=K*@7-I`>S0wnWmHqgab>Y#s;N`Mo84GKLu#5XDvoeEnAHeS4}q3h#jbr1$*KYZEHZ@@)8)l~0Mn;BFIz2W`6U6h`o} zE@*x$d#1a%DGz+cCJ>hLrOyxV?8_5!ZPrr3H>pG`NKWljj+`2g2au+lspa{$`&&Oa zkZ5AO<*h`lRH~TeHeAOVjp&5^5kT%udB;i*v%WI4%E5mJD2{wv4k*G3iTyqU@`tz~ z_eXSJV(*(T$}T%AgbRwi%&S|Gj0^g+mu*Co9829j|>I>yb9{lWwWXQXe1{fKlL zF-A`t3j2}OM=g+WJ0IOL9HD4(1kqEO)s)Y8jL(wClueWncFgI4ju>}fjyaB!=L2gu z8JctnCv>WVM`h{1K z3%B3aSz5viQLymrzVo#H%GDIN+Qr2Mw#F-+=JXYa+D3TjDee2y$ZCXL$0}@SCK`|n z>&@fH>4H^YG)1+YaMeYHfQgx1=azDKOCGO-F+(-Yd`4k)ypBYFJNlvr^4YsrlUy$1V^IM{#;9;{>n8p1D6Z(Zx2n>=Rs;5!ONRt z!(Ru#pw-5QCJJd4McTwDn1huAdSdW-N(iSb-vONlai^*kO-?MNJA|Wqz?NC>z>z%| ze}Yn3L(%OPjiPIbcSc1=0=XN{6VkWHjPZr@J!=$U|5hG$#^pxTX67~D-TKAJNqti= zUGI!f^NiKo>oM&LN~Zjf=nW3K7(Tu=huLar?g5#YG&)2uZMDAr@FvW=ZFyAuquie` zc+Im`a2cp7+$h|B=Ah~GLyeG@T~>rOYdHrC3bB}cS7GukA+vM&{*t$XXxdABZdH{f zTC04oZ02PfAguoKpoA!oN#?Yial&US@jSAzR}twa72jHix*K2=w~2^6+$Fsz`BD zRj0$QX*$f$kE9Qa4{g#52zUKZ#1=`du&{D#gJL|B+<3vQs~?W#&kK2RnhS}Zu3*di zraZVrZIh0Z$-fNfciSzQc*WUR=F_dDvuks6N|LOTlmTB^g5!bB-bL`7x7OucL1no5 zD3|;#GVlHP@KJTasp0lK3%i)R?Aj88$GkrYBB!k*rWKFKxbrUlBdyDFunloqSdkP!#dw5_BRxq@syQ2DriP(1lem>be zGLxti5}eSABIoHjHW=d;yBl7dK4WdA{6O9WGo3S5k+#d(NVWISz-6$^qlvaOM~2;o z*nyDWyxgEAKB(n*vE+y*Z(x{#&J(kKoCH^XD{Rqee>Qh01cd;FXHF_uxJYHcdq;7W z(-5Q7$$1iPbMKC7y$yPL-aoO1sit{7mGekr zStrZ`c)I1ZK{?kJ-Fm0!%$#{1Ljj}UPL?cLdq~B$EpoCfL6eaZXerGp^XYYW4Q0<7 zhs1(l&wk3T*gs`oxB}KuDMef2@P4!LrLAZ9+K-c5H`&=w#wNvF5ZqD=o9*9*5}t9l#%etI8>nEob6HS3vV~(Jt@f6v#u& znA{#KkHICbsFqY0LvrgB2t1jL`L%W^S~N)sL`pK~d-=*DRYx?_J#vD{BuS@nJJ~)STU+ndH5>g%O})1jd&exo>-gzs z&a`q)EF)G(tIqgnK0TTQxF7@pq4tM(ZTbx_?RlsAw|H5MjNc62XCkET1Na{P+gAIZ z+B?ArAq&kQ)1>F5^5nMDIEk+TBL9a&rCfEmk&p<5n3uKUz)$I-+&O&e@89!Sd4|@_ zG7YOTfti~+G*w%AM{sPt|G~|8{TG3-$HZY~&Wwd^%$sQ~IgMu-jCQ-}IVr)Gb{ia4 zl^1!dp^e#gvrKmI`wr+xU1`5R1kS)pjtgpng+V#EUvWdLAL~v}kJhvoYSD>6AsIy@ zxVOu?-rh^6vC!*JnF+G;aRQ!_EJj>NyW`G8J0)aa-f#ZQ=_G$~KW}Ze(jY^r0_5fecp(>h-pj3#Yj;b;3P9Nhqc_1DG2ZeH6m!@DBCoJ+ zJ;a_y(&c_RCBM-PL%Wl%qT+laLfG655se!6=H2H^f2;!EYx=x9&F9fr{_mSS%@MJN zmby9_8Xq2>w*R&vjgqhJ4gBSZQf5!wP(ZcxcELK|8c@+n3I4z%k~Jrzuu*?#;LHf;ud5RWi?BASZU*MK%$b%Yi5vspAgS-ennDckXw;6|{*n zwzV&kOb%a-K~);Nz*KEOnq=v9|1r#a#8Rd9#-1@n%h)%c$M|VbP~O7R`l@hWe<_6G zvx&l6IE{&9?q}F#5zBgWImz)H)#Ui0vH2m1&!K`2J(jYD$xrdWgJ_q!K8#>%6SUea z>A5*6Q7%buNXL6g7aOBwb0{sY$jX%6=XvrL`$xdO&WcjF4R|q`X`VI&iVYK4&5jO@Q7+E2le|%yl#m=tm4F-3d*fwYRkIzDI}C%y zf@Hh#clT68xnj!=Euv8E`xa)z7k(yUOZOej$>FW?{TZhh1aRlmz>vybH_cWQK|N5` zJhBH;RX%DR>N0y%BpL@K0|fTTT-7a`K@J72zh@D{H`2Ru3d6 zV_3(}`ob>elX8?dMaqU^sl`8FN|0uh}JN(GOpm?l})@h19+HYPThQsPwfa1=*cJiRK1-lF4d>_0q}1%e(1?JrQ6$w;>x-&*?eM3 z$!T>czK9R(xeeff%KzPEQ#k>Vsy0$CFwU18C=%BWad)lk(i{PnId15xuHPESPAC7E zmBBuSmFb9B?B~%07b9=pfcKJRgmu+RxEqS~PT&P`8{^{eQ)Z~JU*zDSt@}}IS93;S zAsEu-DTr6A+)&|u!nVlf`NbZ;DdHS7JAak&l9q2+h<$p$8q}M`cF5)AtS%k+1rU9t zhu_MlER(2}AkR$yiqWQ|=6l?M9r59ey5rq;amckLQcRzoUIuhur(KzqP-8+Z6oQ?z z3(M-|c6_sxyH65!H-C&k9HvWXdIj+CNxs*STAXEPw4dK!?(W;Y*{9$!J<^A((b zro()a1wtLez?8fOc0Sk+xajr!7vgbELj>;L1l~STLL;JNmiYwUW_UI5*S_8hQmK;_ zwAD{j%+iEg#ESC}Qbp7egY<^mGmxBWibR2HUU;5=G_ch^V0O$}V@P*D>>^Q48;StB zolvBy4Ws65yPAg2V62Q34FP0wZ zWRc~-;7C<$gezK&4@z4eFMi$Ww*IT#xn`ax;=k)!p07#! zp`OYLERxL&lR3G3$vj|?!@4%H!D5IDxFO?uvGegR<>tzX%Se^-;))CFp5RgH-4X3DObJ7i_Vs8B;r#gU-5I>+?~JOP zb%tN7vo2v65!4pK3v%Fo2V`@C!eZ@*ony$Pob+C~fLk*gU06az^xC7Z`77=p#}z)2 z%@Q=*K}8`=E_Ot>K?Rfa=k}ZYMB%zCbk#YUp`+KX@^?VB>HN)??+@Nr?9W9pkGYla zsb^4Hqg{3ibS;LzYk+Mqht6^5Q9ieH5>ru-hv zEvO)BtjmWdarW)D&V4>#2OMpehqQyu%<$RSxa^J1Lto~Tm+f|Cz5_tR89E5OG~c}P zq#9d}+vd7YJ6{nox6d>8W%Ht21eL>eo&t;KykB%PGS86L#k_xC zH)U=ZI+`Gt-xpf@Ra<%ua5V&@@)PX1PXp!)=Bmz|*@k?!%y&g( zUR~v!@32WGw$4B!viyd4UgQRdDSG9}m}wc=f2xPY^;nOtBs-M+m}KGaH0q%IJLuIl z&B%A-zT=x`$-m!?bsUcrnt=PJ2`X!5Q01ftbF&AhQaU`}%_rQ-Hwg<}u1Pfcn!5d{ z_b)}CR@?Z7+-T9I^!|YTdE?0oyV35q;7&C%=%5IjbiJ(ASw}@NicT0z;y?cPX(kWd zQvmDeb=w~H2EN&04?@(o)jH35&2{xsPo34L{l{w~W=v?C$eqZfyzTz!Ba7}z6)U55 z4F$^evu{wa3Jmoe~lHzSk7olrxMx6Q_ z5~|{Q@%lb9wePkQYUV5O$J{|PA~d;KpwhWkx};J$itRUwwO1VjihKuzlLppB7vxP& zNxP-~(PSl$!le7!6V&4`3zWRd-Zz&*Q~gzeiaDh_ciur{I)$&4C48Rv<)QWqkg>99 zvfUjwW>btiU2fMJax?Ok1)@6D*I+SvPT zh*s6?da=MrD)kF9!Z?jA+m1Cl&iulyxHhu+y4AnK=YDa-R5#Y{OKz5kADO6GDfupQ zXlMU7Z#S)9`}82%!(f5SPRuNzyj-;;!&_e7&h}vCz;}3riQ%5$SybALhnFpIwWoprvJUungH7*n|7m}cm){S}l6UWG>#%odSp}4b7bMCTeja4BV z#&?#%2I+F@(KEI|?+CtR6rZ1;iO9DU*hW?dK+g)w7-Zmofg@#mm>D2Ah}|uA@CD@+ zC0*D{m8aGAX26w0R(w9O9wr$zYt9$;9}Tjc?z2++=mB!$ne)GlJ6I-&<^k`eqj|$4 z|3>%U6l!T(ot5V+iO?ANmd3Em@>Emfju0ETzNw-5CX)j@XNzWcNkH^HGXP=J8>!D6 z7^$D;vnO_Ba}{^+B934`w!q@T5KcOqX(Kg}7;?C5@U((Y^GI!F?5)kPvO+0d-faoo z!a|VlX(6>9%v-*2{d~D=A2J)_N9~z&Y$9|LJ##;&+!$W(r6VXz8gv$YW^KLxi&f$B zk3*Yy{cElAD6Lj`y^-U(t->8Xo%r{^k9@0pgN>E)@jqetuHGw&oj9na&~sa4oTd}IV7`?35r{3ykH~T2z;TPB&wm{+KABkva z+5qL*`U4N|7&!}kp4E-0iV-6(VhxL>g`kJ zvO~i%Uc<(C&sPXE3~}}8*8234_VtKIZ)P0eC~Pvy9;ar+O%7Mlt2m#JNa;sj5*<@D z)$NP47BY}d*#E4ST_S~@_+njGXlv<@${|;8@rIN`iFIevHfX!1Jb=AFzj#A`l5si~ zWGuj{u8euP64gBlYhYIft4YAyK}Op|fwJ`<{Q*b*qf-2@9+ya2Jw=*Vi00orHYsX4 zXni2HCFZL*yr3~yo;B8x04X1O`6y3Iv80Q&#TLk?|t&Y1anwEoYHUd6phUb6Rm z(;Y$C`?0a9c4hyH1N&d?&Hpp`j|4^`Hn7|%ckG}4fvOIfxF)E??OwDcRpsq*y|QX8 z?~0WlQm5QLr95$nseWnxwVkFazyTg7gMBb}OFOrGC6ug{Q5C*PKyvn1>%@T*+v!+M z)AJ;HE2+{AoR<%pB10Ozvj4b|xz#2X_D2H5RP43#n|lG1Zf`R_{IreMJ@tX-J++a3 zl@i>d&9GUR8VEHy`~m)8Bfrx~hDi0|IWcgfQHB_) zas(8=FYmvp@4mxxiF#R!f`iTd7#C`ERmxZKZZThqv9j|C1jTFB&>2g3ZfBuZYxeuH zO#`T5P3(QG--(G{pSWY{+RMYm*in0WPi@R*6CC7iZrV8LH}rO9_jfm_$rX@+N5|rB z-5F{23(bx+89gs2e{7K1#?@Rs&BP%0eD9}UuV@SVeOkNqrrvKO6?2oTRFjIk_64B! zDZIw<{Qv6h%%hsh@_mnG+m={JIWQ}f#TXC}nZwkj1(>8riagyP*6~iIbjHpKp;#Kh5!i!g70+S)qU?;{qF14>#ckLJ8Pd|?X$<< z-uwIe{Hij~swy#qNUsT~?w(ltM5n~ z5kO4PN937Yj8S?F05j3o+dq2HUlvKQz4^(YqFWEIeeo);Z5G zekWV*G)hmq&&I^bKN^7;(_zXAi6)Gq7uw5UrR9+@(fg~PVbv|qYe@d(SUoX09@+Zb zCg|-4o~Dm?M;RIKZQh-XPCY%<#jt+G=E?c!RRk`x-B6FFelmB;=|ISj@1;tgY~x9h z<-Ff%qvAnV?4GxqrEf*BIah1n8OnDfe!4ZmzbZs$%(Y$tG<&!9q;gp1?Pf=&+|T%v zk({95(&?-qR(RmVhbHfZ^rU3c?QCqp#TcuO$6+P$jhz;2G8&a&1qQ(+y(m37Mr!rA z)8i>eYD~wC7mB>_r=14s^E9Exv)v!GoO12x=RwAERZ*~j)5`i2$Cpt-ubj%v>0PK2 zpEWDF)3X4{W&6DML&U=6Wj0a=|IpDj`pyt3E0o~|`xr3#Rs~s+d<$Z- zp1zdkOQf{S?XKNgGRKKRRkV#3tUZDN4v*v7o$Zg^fp79Y+nDd-t-!?m5sQ6SR6EI; z4*-_)+w$M;CFX*hSyHwAlKu-4oGEM@QxPqR#DJj5=KeA!*MRiL0zYX>p+&hf(1bM{N}$2L8o zCuqJ!*~m1rT^n@QZmhQGNw5dl9Z|3tb2!1HTkkZ*8nzYc3etbsuhQx1dv|azjpW-fisq^%W6&3*{ z#D5OOesXRuDJ|PAkwvrc(mO*7kN8I$_Wu9^=C~j1ij(;**#`q-2b-(l>#ulH`3f}! z(2?8-Xs&|;JrO3qb&s>2)D&jv!d$K*ynsd(zN{CX-l?CU$2wYvOADO;dSVckv8P}& z1?YXxAoQ8#=GaaE;7f5o*Vl5L12gZsU^*AD5j#A_4vY1)&eVxVbsoQz9I`ST6Z3V` zCP_!c>=CX5Vi#aoKP;*n6|%RgJI4Q!-NL_RH|hjE>~VjxyJG}S?{_q@Yl73bY`%~6EmxYC?%-`W+cT91I^;7rbRF+DgDA8|h`_GNKQ z<+SkIWWYz-t}qIkosAeIwVF>H^YZ8$eKM4*7*wTIco7Ly zm^TP3icS*Sq(%W0QBxuz1NfUmzzwGIn zx_2BeWMi5-n{;iFwIfh&O8`eZRiX6s?!JP$tX3hmZ)drjh~mW^X>`n;%7ybS zYn_reR(w@!&Xq(%rRHoL8ym zO?PZFq8OGxx~d?=utLwiMAGE9T$T#k%848b*`cm!Y@}@okoq)svgL*q>)Yiy2ADSm#ft zm(v&acjdoG{M2COr|l}cO&SrMGu9O=L;d%Hu`EWo38Mf3LZ%qybh+>c_?qKQzh9@$ zhUB<&9Y5;ZYUbA}6hprJJjSdy@W~Ogg#p!`@v!hjwujw3a{>kO{fRVtcHfPMmow|B-k_Yjl&hVQ zoE{ULPvhXq$2vJ9K#U2(k{$M^;{IdgxpXeijC4F@@;>%CoP_T-JV*x|>WcZ^;~Xm~ z_y}{TOxxH@G39E@rKI%kxb^^?o_=(L)hFLK#XlElUrMcaF-ydrt^E8Uk>`7es*ZCR ziV@9C$v5hIe|*D}!xZBpN}`OWl$`m)v7k2en_HjzA4pyL=egwno$~3tcDmyu&%#}; z(yCA`m%>_90rD8{xoyEf*lCdn-9TifIZphT@2g|d2$w%lbMRc>Edz&Y_c)kAgBE@( zeNMG2yAWPO`CAOhs5YSWY%i>iGDG6DR2X6XUnBsuK1^w@Us~etc#b1kg6;C+VwWw7 zO95Bj{z9q1CS$CEz=j>yJ_*?y2Ps22td=rY=zQ{$GrGiVCNuvA=PY4y ztuWU$^W#ac(bsjWfKBFb6H<%|{1|XB+y?rbcX8t!fWb=}T@KzeMl`K#n+JueF}o1x zUj|6XYjZ3wx>(aW3|QR zlQYHcm^NVwQroJUtFz0W#F{-US~7+QzG2A$EYfk5T*wj%ZAz#f%^%AF{TiT`T<;z% zN7}Q=$K9qmyU2P#G(>F+%j(w{6~LK)#8OYHLCGjHO{NR9NJUxA2?G1O?OVy;3=aal z{OV|aJ=$^30%nUO4NaMeQ!Jwm*Uh3^XNTA0ysUH`@ZsuG#rD&hGyb~iczJ({EUlM} z&Ky*DtQ1vcukuy*{Q&8&Un==s+tk&;`N5di{0s&pbiVs<8XCaf!cJItSiG9L?)Z`m z;Gmry`&g7rPIU@g7Y`0XJ}T+$bc}TH!)O2TOya8t|IJtab+R;M4Dop>mV@@QviG;C z1|0HRq&HN11pnEL5i3)1YghKK_6q1*(+7yQ(F&We*5QKPzZ{g*iN8pQFD%6VUlM^C z@r}gaJCw(XDU#WF^D=B6}o z{qYrJE;(EQYJ3{5e}^>t>)6>7^hw9YmD-g>RLWJVot|T)n^VF~w2_3;jeq>hZ73k9EwZhD;LciLBn@`%Zc8 zT_$Yyw)o!2%1U$J(GE6BPNic7{B7!UUlm*9`4ILAlStQO%cTui`qsX+Sp0j5JT{1W zL^G{`6oc6}HMz(&H?1>?eYWo<>C=KLLb#eXqhqZr;?C=ssAC-()mVkqPe{ChcZGYo zpg>|9LlA(L{?oSY9UTptrDJIZSAn;hj=q70`UGoacdCm@MzhgUY5Gjrl}M z{37vcD;R35t{1Tpt*Q~(XME0OStr{eZk@>S=4KdIJZ9Hfmfh_%zL+)HT2(X}K_H5I zvp2XJ!^VY^tKZM@S^LR7GZWOz;QSXMzD4raV zo3H*#-FU=Mtb%kBm@&?7hnefkY|WKzuqZS<#Ius*t8ln0T&B(2X~)gO!6dumy22vh zu0=U`*CvenFz5KfHE}~RG3y!NsAvgUY5Jw;M7_u&j-UE@D`F@o&nt7OC$D|2T3AQV zwS8IY-TZT)&g4BLBp?`yS zpL$qwRBa+q3IBk8)I+S?wrd~MTvt=H?6c%WYFyE4w!sHN=$5qDhV>O-V}o*O=_7YmF02MdR8uwlb};|Xjg)sFH}j!2KYJvG<{gK) zLf_EQuJ;5az&NLO;TaQmezVjv3A|T4?zx{=l1zEDuMpk47u$z+c}Uu80&M|HmqfGa zMfQD<9xZT2vY(SD_b3VPfK>t$M?K!!}~Hzml{8sf*|)YK9cy&Grn_s;;2mkj0(0PNH3QJvVjKL zZ#dp+jCeRXLPaJQcNU(B)|U#nC&;J?Y3MCeJX1!2{kUBZ(i~Qa=-1eZ95__?A6b_6 z*|j>z+uM7+=Qayp@M)ORlL|*oIuWQYi4GkkcWyn6kVZMXs?)g=@snY&tFhuI%#}!+ za0J$}LY_x<9}J0bR=3mlb;0-v_44~wKRQ#vwd%-HuK7o9H$u1SDxfb?Y0x4D%}*+E&1qLO%i|6c{Eqz zzm%~&@q&Cv{W!M@QYf5*E979*Uf17yAD9oV@h)2o3 znP~SSAGUi0ZQp5;Z-7BPHt$L5TtS&@U8p}pY&*VkZ}V(Wa;EvmpeW(i@S~`v&0!Su zm=-yWD(0znZ)9>Xuq_<+m^CIyBov-)4WNPd&#oa1BVLkl10#=|B4dsRP-gqWbSRle zawjH(mxkK}5WtV*1HlCUj4uAw(anex%O5(4=kH{g_T=A?7(UNy2*LDMZ_QrkWE9d_ zxcFAYDL}LqR5t!kF_;}tEPV z&zrHgTl$5qvjbtSqN=!-xLb$ORds`Ct@4pO*Tr7q8rmcnqooBXK;GkU+*T-AWd+~GqTu+Z`NBAM~l;aLRXI6YRi{-|Yj;*9^)uX4ot?Kcb1;feY5=CP5pV_xJCOv1fY6UWShcN!PK5s}4BNGGM)hZXW z9DV$d&bOyx+4 z@BP&PQfMLFTaFY}mA&smz(e3s#Ne-mNTP#iKlaT9p0rE_)?IdFXkaoFip{THK0kh- zi^B!+0(@C_bUP8*U01wQ?4(BaE+dR{T2Ac&KrLKd57#^Wo{SBfRThAJ ztTGnwZImDNn%|gYHnjXlEgavodFRI-EU{ancIR0-M9=N_Dk}vldC{EPdHu9;+>JSuS)Y)3Wils>JpHYgeY*C`>XcTi|`ebVn#x=Ix$)+(!mv?@U(Dt*#%7 zbl;|U)qHl2B(XeT)KQ-6HpwQabp-d9zn#1NTeHZ&epu2y{QCtEOt;R5FR3#=e~YdA zVPKXsiMnRpH_Oddna#U$G6eMtcC;{dG0=SIF_Ja__+_`WsL7D)d}@t~ zkT%H1EKs-f6!5I!)na>xtD8wv-u)VlV|CJB8C=pGe(?qD8w`@+<_3*FrLdd*V48_T^ozlFp zgI!-F47!WAdu@G#B9^k;XXM+h<;u!F%tYP`NeyQnip*%|%ZnbW%Fx2~zN^el$l<0w zI8<~c>WMr@cFWr?rSqBXP2H0bqLgos!Zw9xfRNN*BsRL%jX_?Mj!l^ia5ffF$0dg@ z)PMir$Y^-zns#x$v2m|1Xhye%HRM7ZHG#uNik?{dtyA(7$|Z867_7{@(_=7*X0<6d!y;g&^GhVdmYN;ES^~sL_^AvZ$e`@9yESG}$%)7f-?I zq7;MtLB7g#6jU&uIayAnzsHzN)|Ar(bJz!Z&CL~&C{!c090SCJ@?RCC*R(cP1%=fb zna{e$TkbpD|I_CYD$X5M0&@mzVuOsZCyJai-@Q)n8a z|Md-}=H7B0sG~^7XWbTv8DFNOJ+e7yR7uhlWJ>%~=@B0M>wfg_Kk;Yfs0)<@*3#Z{ z0y7fvjnD4$Y8Mx$$0qdW$=nxDGi=GHnI{B+UJ8W@!0XSbIkC=F=6s|rw}1kc~MsVxz4lU zsPkG4PN}6nUC6+*jh8~2e|U$nM?@4=XIAK|xV7EuQC<2udyoS$v|FW}m*u~1TDTn% z8J3e^wge|x-OA@U@9^j^Gu=b{YWQSh{jNWW%9a*)2&>x6#)FwMunZ}0439sy|9k1DCWCUth*VS9hU#`yZ^WbK_uNfKN@=4Ds_0j!pnm%6{ zmE8(VBkI~UAv9AtOUp>5OSRPEuEYZL%m~^gmKV|9+kRufHMvW&HmDd`F+T literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f057065bccb88caf86641e26461bb2fdac65e2b GIT binary patch literal 101914 zcmeFZcU)87vM3%zMLAgtr2%+~X{P3Lf{hfPHx%Zv>d++`JIkP|6Yxc}4vuD<2*)KF7UdLjQO#ua+NC0w}$09e~NIcO-#-qY2C-uq4a1B_og z+Wmq5gY>fAgW=z`0{{bj|A7DBk%&#r9A95%+PeHXIb1e=DXi%we%s>DxZ7{s zZ`?skI(qSkNuU#{tW=2@Bsiy zdhCoHjQ=Fe)ywl0b8`S-Cj$T=(*ppgdjS9v*dK!awd`MQ@lWpc-eno4%lovwJS+fj z0A_%D040D8;5C5%5)%SE1PB5|F2(`R0Ccw~Z&Q-f-KM(DKu^cWD$c>m!osQ`1mYIg zcn;B4fBsSxX8zF@X6#|2`qClJ(ZfGDA}T`H`dd!Yr|gem5uv{;A)seqU}a`~#=-F{ z)bOQY=)VjXbpXm6MDMPO5fZQhu22#XQW9J=0T?gMM@Vo9e<vI3Ub{|o$$WVW zaE0K?)vJVr#McS0Un3+S{>`MkN_AiG+EaC7YF2xp_u zvOm-Okg`oHq7_lV@jA6ZPF{P?)aj#7doz;PbIOTd>5?gz~x;|0oJZc!xHd!TZm z(H`2`^2KQym4}H&w`YsX%-I?-OTojBlog0>Ns6hGh@G=3lZlJ9Kq^0-029+?7D`y7 z;`21NlMhVSIgTGnd)x)Nc?pG{z2MWfo>H_8?EI@{{(r)Xc_Pp{H22mYC@D!VXA-Wv zDYi3+jcYVPQ8otbuJ(p3mD}B_rddDr0>giKdLex9+!MnH!s$yKpi%R_Qy)t zY>!?5Py`2?20a};CNkV*5q=O2fyxh$?EqK4{j0iw-a;v5Y6eFow)3o`Bp%Y2zp{_o zei#&$jO4b?M(h&y)t`O+K4;C7|B3moMQ!8$;|Uj*r7vSYoO#cg;vJzQ(y0rZG|k&g z&ff7|Vl8wbCOOd=J@&ctVzv8suDMx|VVky@X&50E#12Q!*0^f7rkrZPmwSgV?UUw; zw4Qbb&k7(w%&4TXQ$Fy)KL~Cf_yLlyRZwa%Wj-S=(7<7z-cMUoK~tmL+)d4-9*4MNA>*uI|zY zt9I_O<-@WVlH`yEUT+emmMM4T@ZIm&9b0N>3=LW#z6xc4rYr0v^HQC8FofOBk%xnC zC+5X1x!U7y<`+f__=BVR4K1H;DBhjP&zdvIqqUYnXE0}k*9$s7j8~1;1Km;PO&tu{ z9kaIvnU~5jXS7RDCb#fp0=YSW?umLY0a0rM`tQc*z4_hy+gPe2=hgi_r=X`4j&9yH z1P0kVv#H+tWYw+qylFjJ#&_!ikXko09~3)P?5VkDbU@f~+>Y!^A4!&3+jlBN3zY47 zZ{JQ|hxyO^q$o(X9js`u+Yr2dsFkH)z~0e7r4=DTg^z?$N-gA3 ziGgP~+W`O~?9NA0MKaABnVK&(lIehso?!bN4km%lvm0jH54YostEV+H7G*Z=j4lAS zw;n$P0HE<)8uq?o!tTz>ngKQi^=o(q2`tI}&h<3rAR2Qz>SBJeF({ z)Uk>ANVK25a%l7Rhda)X6J;9dw3HV4)53AZO_Z_4o>`E@8BO2c!4*N$VH?0qcf0Pq zyQNAda1P47R9vc{`-MSpRBzdn z>+S^rek|zUq&8kGK3xetzi&uEJWF$gR^qXijhD(QE;SoUtf~QP#G5fmOM!D-RRr3W zo$Ok+YT58Q8H@3$;s(x@kkhb)nV}5D;8_dWO`afu3Y(s7!Xz3$j8BuQuiIk$-B_t? zZ>~%YwDN(UgfLLs5b6SD@W}n(Cqt&kXGSW0;5~?+ix<&%$Fbb`h*jygQ%6k~V$UUh z)p=}E&+d!a@bzX77Iobb$O+-;#XSAqlJUS?FZC;QHEZ9kU05uGF$B%Q%TJQ9sut;9 z>2)~*dEMt{`-C#k1}$bVhZFh$wEpZr&;)VqECxGBRKlei^XojmH1ww=^0^g5M+_); zr@0Ew#~ObY%df3k9(K>A)!?dHb6v@N&_4eD3iyPLl*#@*X|6@O z?FqFU@1xXB&5DX47J~0f87z0>_BZ{f)O(hIU!a`HwO<#M)Eg>aH(>_RqmvCz{$~zKB{9 zoeyf}sPWT|XN%5|V7%Jx3CgVN2hkmxok)K&SWm;EK5&XibVr&hIm0?Za3@9QquHF{HRf66^u-g z?D2I_=0MzA(}TjvN9jpdXN7@^l)N5hU;&}v_&2}K8p_VK?Z(`od)vY`DDz#;%_Y3+ zwnf~6@AZ;4idInc^LW65%VZQQzu%a#|%$L6h!MlqiuN#6XZghG!P@ulG6N=?g?1e@$_S;8=Z@X@K@ zlu?3C0M9=%5mD-n_t6sFanekW*nyY~eR5-F*XCs8beSywv1%^a@w32qX1I-) zn}g*v%X@U7k611#Sm$kqinC~=eGrr4tyyKi7H4Q>=Wu#i;v;4n4pkgsLk~8UUEX7p z{<~tpYi+mYmMx`>w$yhg44HY;Vl5?` za{}xVx;yWf$BvbBQagehj4>KNZ$=+6d*6ztoGaYg7weBu|($0K6Y~k zF<{1upjI&RdJrU#JhSE0!_xg#8bw_DY*%wD&0KV>j z@qSIVdjW_$AKF@+HJ>iN0MwL7KMU~q`Loyy8TY+wsrE3R=pi7bH$JONH9p?7SR=Sl zvAjVn>`t=@4G(CyL84pRBsK^?^)u3^k!L3=TT3gmQLk%fEk?x2B3%Epw*fmc zoO#lA{=}W-fmx3GmMu z*Y3Q{V2`dd`eP8?la{aD4o(Wc0PH;Oi9%(K%u^>Ye9j`GKTc*JZg!)f3M2b&j`6;p z(jn=v+=}BhDG{mg$X4E#P7QkNrT9`!VWr>bJ^d%@2EnqJ5Zz@3>bDs*AoJrBCK+zA z;+tAlGh1OG9-Ezr(MmmbA}^YyV``v7hRpek;~M(7xi50H^Ut;w^LJc>W>;pjUkUcB zqa_!kN-mwFkhD=ujjSohG`}z2IEOlRV782Dns@qCfyPliW-cr-l>`NEL9tIP?WC0_ z#M=hoIGQ+gh_mhWUL~of*?D;K-wjM~k22891gT7qzC!j~FVL9Lg$D@;1P5i7E@srK zIe*gKvY`vrw%l6NRx+^yjvT{yh_YE^gci}%q=d*@_ zKZc6QV~UaIPdqRxBC&;XwDIwHuK2fg&(pSoXX~%KKWvY@iG(1`ysCDkQkSU^Dpr)6J3{}fRN~+}D z-Ahjhus1<(UhMRudBV;xuWMwu%0g0I!Gdc`?{@0P17^k6g!Qv$7g3&;$1xL*>ZzKP zI>MRF?GB^-ugu9W06(e}F96B{LBCXKbJpq(&y~(E0MuugZK+R>&e*8W{KIzC4v&%+ zjRM!~lV<6Y7FcVTPQoIRW>zl%S;s8=o{DX1Th14N!Ltt%(i#^4V(%X6`JTLEY^1nvL&e1f;AqS8|R`ECC2g7>SMOxR|6w)te2{uHRe3G}sSXwWD7= zPQ8ICbxskh`@7EO{K`(VMY~|9L3;4rU(f-=!7vNzz|_Wv?FkQZhIblwU;pW(YX-Q9} zzU0WQYP-fyj*iyZVQ89W(sM}=l7?}fi;DU6ZtUEepV;WG@#N~(ue0Eh5mCl;+#q`F zxXW{qlsKC<_~^DiEJ$mP-Y+UPnQp;<=``F(Y3e9=3)80i|O`AB1Nnc=Qztqc$0Cd6}2j z1njy>ANtSgP!NKHpy;KIV;_X9FRv7bYRK(-CC}SyZ#5XBqf1!h%?@l`w;tC<>1()| z=9RrQ%L2V^v!&@hHs9E2s5zzh)G%j|3GrF%lk&PwHLC@oM2DoH#G9*D_&A(KnvTA- zwSd*FLD`7#{VKx14n_qnMCEXL>8WxibN%teuX6Xoy=S}Srw;qZ%!h3<({tV^FRuI+ zZyyuy&)a|Nl<$qm|LS*PF_&A*8AlQq0KC`JyDZ$^KD9pscOLp=tH=_!Yq%&mN>?rl zY{i^y3(hccEp6%M$azI8x6$oG@I;X7v-Yz`$nNf{k%Yaq(6X3Y=*GN_wEejLTc>J! z0-sv?>x>iNxkVfQmk|NE1ito6fTj zsCG%q{ZGC4@5)K9`gjvJdZ&l^{(%LEi}lc98WEbl5_YliwoBzpmwPPnYUhbDQ)=zC z+gdW==Ug9%`ex6yrmRdJuE=jbkgEP(Ht+v^R(lZMmx;r95bP&$ptO`JwRqU&s z_#h{ss!Twt`C7lrZm79;(|{#@mZxw0F%u+f>yb}Z_sdwg`sMEWD=mQfel5q+V#6X` z5sz>U@%igT#jUanz@^P>>+Jd)?JD5#{>+K7{qc=_|Msw1`wM`!*Ug}RH|&(r{iHUID6MirW8rOYTRV4(rrlzAfaI8}zEh({ocL*S!~Y)I4$n$BrxfVGA# zw5=z2j&Tv_LD}Fw{a~vc@P8$E@N*2rhKOGMi@vTyu5#F^;7XY3!wbvmRfE$|OJ=9pW>RE<1eh2=W96-G>;#FcCC^VVa=tO7l{UaXb=U|?{&E-kQs`wwKF0wF|%}qi?^e8@=~s z&c(gn8{Vaebi+r2abWeO3EcVo%9b0{jaT@AMvd++vUG4hrk$JtHRQ_QPW6jI^zKfq zX0RVgobP$n;o&_N9{ce4tl4`TGrK*73$@fu4Rc(+&6>FsaPouIAMF}Z3yYkKoR>Q) zPt{Mz87b9h{C(jXRi-s}!yX0OiM>u=eHoDfOE?JMoe&KinH^%xSjrH9Q&^llTCtn( zCNu;}DJmFn)(QcCF4l1xrSGJ}j6YoABYH1hh$j-P6sZPYqmEFKp83;Jx z-j;1f6&cepF&QZRDhJAYeM6SQ_!YzcnDoTm1n3+4lJ(~E$+Qz7d?u4aF>;E`b6*~t zUlGpRFYMA%9fkJyWE1{WtC(eJu$x{+%5pm7CQPd5}?-_ zQSlaZP9yiESMPpE4Qs3b#W-_R8EG!r%Ww%6rJZpw^eqf1o!wb}<)zUdr6rhe7c(AI z;kBWd!3=yCQPJFg*xm%`p7m0F&C}&}Y}uGFW;+v>(O_&jlee8J4+X|e)?_eqh0Q#W zU(CdJtkruVnL+%byoz+mFd6|;3YC%+Tz_9Kl5mxx`{#PcP?Fgx((iJ9^FDLfqzH73>?`1){#1-01BWfou7f^#9 zQ5OIrqhD&R$Bt9SGEH`0ctN@*@P()hr-D*+C2MN`AB$JQkK0Oi_yg1=aqVMwSH+C) zVmMN|#spreH@lq)1;t0HORX|;KC?Qp@eEPyxY*Iu#iLE4oCvf#!2qwEA9>xu}xiwAQD7LIbtKg0=99!t6PHJ4Zc{Zn4gc4aGW1>|+{6;kD$) zO3@^V5`5$G8j`1dtBt{1$1STgD&CJu=j1&WDI&}8h2Wgm3Xdn!k|x43>t@{Sxuu z-j9D4G6UQ?*~^-Hq-tly8v*eqTxj^)iTYm|D*mtMy_z=FdgJP1jN;ZEv%WLHJ5@a= zZ-Qt8mb(AV#4G>T?~E>lsgl*I;iOQbH99+)rhW0<h_T#kt#M{_Y`BAQ&3m96wJ} z>2l?^8E{n8dM!ZaX`}Iqv86&NeP#=Ae&RSR>IkkS7=_me3dYbb#AtVZYzEx^uVnqr zBlk^F6z|uK0?>R05Lw(%+6EJ2a>iwz4bL%YzuJyWX5tfnfX3`S#!;L>D9)xMr3^VB zzTX)^!O0rVZ*X&yCHow3ryW5z|0a7oc)V3f6cx<&muk`v`W`y2zOj+6uj2!+<3Pmr z&mZ&ZTONhCqbq*w)o4Jn7zQ(2te^3lM@~+#`QK>})RnMF8??Aq_3c3X!ON_G-%s&T z)9gr(>p9!>FSJPt9DOv3_xmzVDC=%p&e-ds7`sJ}IPBBKr`y&{{LFY%e#Q6fiDT@l z6j+FNgUVksj<%eeVM92An^a3fR@IuSHytPEXwU)2k|c!(=;-rO!j@l2umfbv6f;%- z$Ow{N9nG_!45sZ8e}Gv-0xtmE$|Dzm;kWUkN70PGo}Y8jv>5Ze!W?Pq>tnrv5?d1# zbOGt-3=0$Gzm2sVfv=r13~?9XG)kbYQ{!EF^Gn=m`=Dvu}y(W3t)Zi5#!FTO{+ zwa^EB_R9|$GmLozyaylv*VH={OZm}01l+Ow@4C=G;!BDd9c7&5%>N~=k;;fs(+9ZP zQ9KGpYE|D^NwlCn$Z~%qZ2+1b?*T9wyt}M~urIl8dw)4QKP?Jcp%I}Huj_haj=LhU zA=Y89{NyGyN;6mmU{;_?T1*>7S+plu{9Z&L1}{+la+SVb1iT}Tu9_n&jW(Bv!q;bh`k}7 zu4ZTIn||==mo3BlH#wC0b5CRAYC?7ajfRV=G>yAQn7j0S?u#m-%L(0|xFod2uAr{L zAz)yEi}agAV7JVXVZ0;nn3bnz3QrY~&M)hI*1P65S)m#|QM2uR;l`Of`kPunt(Jz= zu7#kIgsF@Vq=C7xV3T=fK{ZPMEaHU_gSn0JWv4mrS8k1=ZYHl~vDgRg)9+^p{HjB= z#9WB3uRQ%u9S}2oD%HOA!kK{t$4J$m0f`$=eX;YT(Qs^bLWWEmk`)@V(meH0$NJZz z*Gm)bL99QDBrh(=W-G$QRWal`!y#Ucs3lX=8OSTmO41{Gm=&LCH+9!PDNxL0RmMzU zC4Y{c~t)GR6Pwx zy=k^M#!p(Cs=-yq9m$I&jzX4&B@NAZtB zR@6OuXwM4{OfLYB>No{>BlQ#NPQWr8$>C@7l)MuKd~{9QWl0oSjrr2I7ZZgbArZxW z`(=jQK25#aH12jTy9y3UO~=zwVkf$tT5M03eA$Q13T=~V762r_rTDLaz*3nPr$sPO zCg`)Xd>}G0Ao369>E9Jxy&U`UsG_wU6DljCqvF46g3AA^djC1^%4;q&Wj ziHG1~g@VzyXxw_j=i`{G4eA+s9Nf!`(Hm-Uo&nOr%+u}qWRF4a&dbdTAlt8exbnpN zPySXw$GnpF7)h_IFAc8ljmU~u3%{28K#gdx+2+#@GO>A2S%9Pl+Ncm9Zbd8|@Ns7? zD)G^xDeYtz(McNH%g1mPO6xZYP1Uy6O_5MZ7w&+Pl*P#6qCwn=E`Uwj#Ww>bTFMGF zvCV{rdrB!G@tU{BU;8M;f73_h+Q}|iS`apN!2j)=W26bD5cb{XCL{?J5tOt|& zPetj5n+#wkApPP6I@-%TAa62R@UhYT%<%3eDZVTULl*{1Pf zPmLE7YVUxe$8|d%xnsr2pM4d%zgfLT8(2AQ@a`&Zj{+%E7Pa3;CJ6X44IFOhi}DM& zTFGU7a;voBF!T!lN7q^now!iI-F1tCW%&cwGQoQv3@ZR-tO5q29Am>*_^}T1Ls-O( z(UmfS_Jud=y$SPu4~^|)l_C;xiv;$Z0Uotf#1r~{Ifrz}qFDU8+qsUHwu#oO7*i0I_NUn$D!Uwzt7N`St@H@kCh8s03dr1HjjO z6Zvot`u?83vw7m&*yQe&QC)j0gVg8aJW7)%R2zeD0~PKS4W<7P&+?zU1EB|vnSV=P z&VkQ>m*2JJe&^KzG;LJ2lDudMuFf;T>+Z9=A&v7M3WHPy&@A92vyI5@qgs|vj7=vz zw}vMs_l>4yqmC%3(Kn;E^L?Z{;YtE^L6vh;zpSX)_WGZK~sjHJ4*OXF4se5Lm;sc5u~w6(=LWTtd|Y&H_^d_UtxQu)qM=m zHhmr^CEF~jLZr_|+t>)?o-g9_VgF(-&d0pam7u%lbMd&`Wc41oj%}7^ICN~6b=ch~ za~ein@?Mj!x~&TxeaI8HSjmfZN_t4%W9VyGfhmC1#0Qp>DM}fpsBm;Ij3?kmsSKXz zIkP>2cP$6VEh$aaQQJuDupXKfT15}rex(jlLATy0Z7eIOm4zXcuOIXh79t?V2n;ry z)a8&%s8IO{g-!&#(aii2aNTaavgVK^G{R#8R2_(%4rh?8c}j#GV<^MwRv7MR{_JE3 zK3HI0nTVc(IkOJ$=lSCeOP2#GYXYsxo{Gc`Kw1f1T=CTI*CRbEBZ>?|ZYY(eH$rly zf;lP;Zn$)nQDT&20(6F)jIEO?yrQqzTGI(xyLLP&z=}r{_1TaKxK7P=0r@_6xQRqJ zr!qF9o%x>?sTWOdmWvj;Tb8m87v^>1HuE8h+2a~*D=C#cr)wV(+=P(+hG89&u^Q9# zl6!h*@*DlVe6&qKg!LPBvQ;y57a#lP)_wMUW6?sY04vUzCksUg<>(Nt#5A*#kykoW zy!=DuKVq^6WJUY#(`lSl0D~p<1Zh62iD}&{u1(1)0U(k}=P@F&pZa=X1=s)mUjj2n@d5^^jou{_8P~D4ku%mDH&a#{GkXFc`Oi-H`|A1+dG+}R*&^GIzVn?- zKcoJ$Ut;-^g{QxsmIwJ%&9aHyvRX@nHmGeqajKgGf2?MQ8--fn<~Qp7tY&;+V_L%wtkZ1AM8LP;tyMW|5YG@y7K z0!%TbD~@c})~o#F3cH4FXOlZDH^Y@ohr{$ZtoJ!jBpq%54P?ra%2}x@t%4D_PM&rZ ztG4hewCy{jo==3k)6f-*q80Yat2ukF3qly^X~g_(+!rnDO83Y+aO}XV#86O&Y(asS zq31L9xbZmhwtF$sPb)V|pX4E7k!+F7afe)SBTwvnC#=kSJ8&UZ=7dPyV7N+2Nxj#V z8^y)$k;vN4;2+UNczrgEzY&t8N5!h0}S4K#fETk%L{O>Xi_rL@n8%;7^aNyD>!(hp0AXMU?XRQESC z_4US;t!%48ZJobCA(dikt!zyE854BfvGq5?Zu$>tK3Dk zg!Ee$+z-C9ytA%k$JidSs5M*iLP&G3VcKG)F`BajR+E;kQoI&dnrF6lu%fDVpN<(T zj#4|NKT_`m(Hxm(9tmw{+>Edpbs0+i*$%i%PojqT(#EWK&iUOlR_4?QFYjow^`)D} z5Cty;r;Xc3xVpkN@%B1cjcP@WqDArQiG=RN`%SCcEEL~g8s1$;!H{15cV7N+|9?pd zD0V0(S2K~xok3sWxWuXr!>HGMlSL0k>SXxG2_(`7jy}g)eNK!yZ7b5LOnx^lobb`m z@WY|25nwoa@*DB4J11@Ql6+i*($uPKH~;X_JB^*wLq10NCGOj}NVAReOv;kwKt3Z_ zEVQ>)GTb7;v5>hHTR1o(rwo;z=+b|T>rghDGN0S2IZa6~D2XZg@C(GL^j*FfC+nV8 zM0)-58=T|od#*o>N=m783f&Lxec>Iq8eU+v88mXB4SzMs*X2N}6}b>lUApctIn)wV zik@mX?6XnDBDTmtg#_qfpN)iQA4$uApPko=T{+UKo8C+wJJ4C5)(6^lRDS?>q*6rW zla7|&gPWH7zdC&L$@K|yoRn-|NgK4fx_+$7kq50ey0`GGXX~8SYOD=9r4V|+1~d?6_~>3DJLFIdSB@ykaRo z=GnGrZyCyG%1~$^zxM;R6k%(e&a^)mT0&gSFK#$BL$SeTAn_^MbQOQw#oGLkDi`%@ zK{ygZYTKI?h?tR&?%3o)0ClsgPkwxG7m{YrlIfIIf(OMSE2$!eHq)EnEj{XEfs<*& zX^W*ze*0=O4DiEyC7;@xK;}aSY|aj%Fe=jJ*n9)SF>?2a;pnl&I4o?>bv8l%B znP=81M!>`SW3V;;0<`rz-=oNa+J}?HV++;1AMU?-{&#OqS(HB>EBd29qQTWXIJ=-= zd!-E9w@ae+`f(*vMiFhvOYfw^2l9V)e0KBi zmJcj?6bRKcsl8<|Qt#wjst$xy(VRKhV6#;$JyP{N?cLt=2J0m85a*^-DI=_A_T^;k z5v_fNQg!P>(GU?wg)1*rkW|hJQ{&($}CWaS#h)$BqZz&_PjO3Z#pVr zw5$;3*Tzo7ihHvcD)HLNPRCbK14u&Hq?^qz5}14ziKyzPP9R*IHP@OXq+j)IVoZM% zm>J=aFH-4Jmv8Jv@TXwd2+z1kwdDu_W2HT?V8$Kar+OV#v!)RA;DAlg;w9TwX4Nn z#42q|r&Pz^$VHbPy>qVyE%1&Y!tV$t*4~CiJdwx60B`Lh6clmw8T=JD_={D?bF0FH zh&%dH-cF8dC>~GmM?2j5$o+8jhPx#-7j>Q6c6tl?}ab#eol}jV)@0uP#@w zeU+!NuJPHcDZS2^VM<+4IJ_XTzRY~^M5R2ua>T?S;)hSp$dk;z$;*8>xJnJdW`-im#XxDy#%z0q1}iwI4z1P@-z zyYV;E)t@dIjUSxN(}6#YE~QLYHH{O)mVQ)dm$rd`$hs38UsGzs1C3OFG#w}Q_Cb*1 zb;3mst2tvenj2y&=vb1jyJrx;@4>xj7=;dx(p%V=Qan9Nq;qnh?+fkc51wX3la;h) zdt@~PiO|^Cvf5A~gdt6X zY`nwvE!~KG7Qd+HhCWqf9|sbyr!+mC_57{Drb(ZH=S&rPv@+MNrtKusRzMg6!5%NO zE9Aqy$>q3Q24Ivl#Ys}Z2o8QILBfcPjsgM$(-0a@_%2!9kQ(zX(!tf+9$|oJ%~s*N zLf$EoRxL`YQXODxQIZzq>&Y^q8sF%OP|;(UC~pt;I_qGME&SoUo_ErCC%b5E4ZP|7 zl#e65@vM_aM#vz^T%lu1**Ec!^TyeSN+i({RoqBL-epLsJ#hx2VA7qYk1y9QFrvVQ ze;GH1ZBv~HR6)K2+FD!ZlYu-tI9$ICk0y5B2u5VUXfq7$agPLT{VkEUUDCdyT0Z=@?!Mhe6 zX2RE_+9sGuN3P^YimPF*U4b$Z=yPl&>r{eKcuF=VUDZ}y%BEQRkkAuG zfe4;_Q~g}6Bd;E)XJ9oLm9y{N>x07`%AVyM4q7^>#jt8lWE%xqxEAl-W{(}mp`8yM zxcCD_zAN1S(O*!wAb=<>r`X~e8~7?GIuR#{Y%Q+6O*>NaP497!0k8P93b>l~J^TLP z7gLqQIUx1Q~2CSD=XX89gG~0?)VamEC)|tM5T=mq~8Gpd= z2CR&Yy`_M$zFzLU^3Am*%s~K&mm-G2l_-BieEUbvhj>N-qt@ggameBiS5O?W`>E)= zML%c3xD*tRt%@7<0(czI1-y21S_DUp6~#I&;Bf9kK#y;^vfC+H&AAvef$E8$Gg>;5 zA=*vt($7UTdLnJrdS=|ka-(iFZVSZm=q2BI(CzxOd&&pW-ld`yk(rj^En>Ynk+sLd zleg^)6$?m13(xZ({5anETluaqRK>^|L{`*R`BzXyTO3nrnpGZAdh$6qj7faX^(>OF zXNpDskWAam0(v@|I(h~W*V>yo=j)oy z_3aVkb5pqR2Y{&RX)H1cT9zv7wZe`A2G+z{5Jw zPzSWJmwx>R$WLR;Kr)|YaUZI0ZJ+;sj{+Z^QokF-uwW>pBI#)IMaud0Oykf2Q``cf9K*mi zo6|?v{VTTK_QY7aDVpK14GygTbAKepfpgv9^R#Lj_GH4{iUqbsR|f8P<#5cCGt(g} zW%Ra;JA015vT;z{!Ty!BR2Ed6)D$Gik;3J9t0Z>)DBSB*3al=UY;&op+`BKcOy#=p z;;EE6V#US`+8b3Kr97eo(ZP0#TISYCL0@03hMl(d!EtSBNtdJIk~kHv^uAt(b0O>c zxT(tew?;DBi4WG5Z@wtodxgEEE3OQ#tO@=qvXjx7J>c~U3|(f_(UHqA9V!JP`NVB* zs%#>@?N5ImKEzX(Q6`JR*cpdcECZ0aPwuh^IS*{IB^+>E#=2euuU#4X$NzQVX+er2 z2iDV4rC}fN7AWDdh0-sIB_h#}2Y)_LattmcT+4ddXvfc@16SF#QPY!tzI8-So^-2a z2ovC7L#EncC32i-pf3+U*v4pOSr@kDs}@7SV3bn5vXWUObrs%eWM2+>Fr*tu|N@qx9!SJ8yN&d zugYpxs+r*7y}hEiYH^whh>LMa&ef?gKDjrMu7!EUxh7cNVNcO3FjWy`RAF@`oxQb4 zx#hFIQ$G}?Udk~gLMhj`L$RwQy0iI58zf$i|5Ll(OX7inS*l=0IG z3I@)caj90)O$H*WtA?rOdoDcbhsc2C6VMNCoJOWb2P@x^)p5rwXHK=IDz6~n7MjSZgI<5G2U7nY{e2qyh!#VR%rRY~I#{WWH23dgkX)Bnmip*C53do@d}GIdO!HX&9w)**Jm z{K)Y6Sc<*tK|~kb)(@*N9=(B~jSrdqKlb2uD=l~C@2Dn?DgCIQjVnd1mc&JKmM5qP z%eh71os@|=_RVZcxOc5YP2)VTGkkxXB&0PaunQlq$dEJ~lmEQ6ud}xh;{F_6+zn10B22Q*Othu#T& zH~edlg9GVkuI?T?b&|&>cM`E4dq}H7x__krp;g4!-Xv+Gngu7QtZ5Pet~zL!Q(EUd zl`t{8f_rfp zt?aqx@>9dKDyt5ehxvT`nV%rb44p+BrZyv|0R`ocOMXal{1E2A`Ha4)Ua*{&wRScI zfwao21DA081LIF3%E+s4tXeFqtc^$puh<4qmg&^Q`Atn!_!V7grMw$>8JP9I3inT+ ze;GTp^snHG91H^P-v17Zyu*G_-A8M}11TuIkFA;OJFw1YfQ6e}ZV!6PYUlR)M2|-+ z^XI<0FFC2}k38g($Ch$-WL-6LEm(k|d}E`l4mkL7zfpQxW1d=eNHH$U7eT{jf{Pka zt+kx2s5LDsy7UF*&W&&ptDIcTRAO*sq;q7|OYZ%$qRXn~08ZDc29|f!Nf^C+s1qEj$l6ni1B4L-qTd zKoK>*!zJbZo~NDy)?gByio%KLoSgmprDZF}k(7p>&A8$|2kN)4z0y@xHe0VwPMZ*` zJGkE!d%=`X-J!~#x|Es+5jI&^r*Uzo_o9HNISxfxJ#`Gn&y<;(6qLjtAHfgSzpQON zP>{CjuW&t4D*rsYs6OjPBaGHS>+!2YAB`r<_xolU&w^Q&P&M=Vj|Y6SezDcy1lwyk zEA47)$ia<#hb&U?W8pTPn#@gp&TEKwaW@fn+5Hdd=oFe2AN`^FtW`yTbVxv9p(wppXw58zXNHctF2 zT3Ja3+4sa3pWRjYb=R%SDI#AjZhjHb{-IR9bOND)VgNlJgf|FSwW#F2eLl;%w5WL3 z8Ly??_g!AnO%pcCc1@XK-pzQW#R}gKk;w3EQS4HtjvM+~_Ike?Z`CbAnCRpdToJ5n zXhpA;@kzsKptGbpIzv@oGqX_f*1WBvgMmbZtz$s(z_dP>|Lpw^ozO&bTADmc4Cb(@)o7kaiJME?ueLPvYfyn-ITbB)kV)kt%9s zym&`y0t69bPo^{b%2DDwSa@6gqtT#*{cxuk=UKrE$(DBTqC69HF`1EZDP*r)>6!KB z;LQ&CswuScGf&+0h{<3p3?m{rK5b#+dc;p-PfB^w&Wb|!hbAESGRn%a7rHQ>ETJX5 zwz&1d)P~+lsw+=_%{yMc)N+3QF=6r1 z(F4kt70M>#^7z&zoJb{-BmlOOFEbg;nNUvCVKGRkvq#cou*+3I2;~V1Nr3PU@1O_U zBv(5V_)0P{<96uW^fa^?GE{RJtd=RSVWn>ry<7-HYCSh8L!F52RTO`Qa{(d%Q z@dq4SJy6_h(_=D+r`a!M#glzEe9d>j8`*{MQRmm`qZT=^?Twn;D8@6`riU13W2B#2 zR$sY%Y~ZuyKe;soRnhl#I(6m)?b)kfTPq<-9?GfD<=Z!7?>Co=94s4tgm1t&9HuvR zq3ii&(FIY?=FsWzJ{e)yX~?=$>@#N*Mh%34&rg0G+7UUq7zAOO^abG7VkJj$M@Lo}9#Xdt|O{GZlM($uBP|`zBaIE!PV#Vr&k>b}i9q`y%xROfS zsCBPZR{Xcg*xGNtqTC8ReC;rK2IFO|EImy$)4kzRB}ib*6$AOQk_5ot*XNa)omfOLnJNN7?*2q7Sl&;yPX z1q2K!Kxj%QH0c83ym{aCetORTtaZ-Ee7aZe4}0JH+WY!lk3Mf`qTL$Dp6AveZWaW6 zoxX^?vv%wAr;cYQYhDi%4-(arJ z?*wJGhx_K9OVH2Bkr$%zBy}UtO_KUB_1v-sU?P!Uqj8sqo}66XzZAV8V};S9T2fju z(-G<|HOiED=)ktE2h51t_Fz2LG~3ar+od^GXa(w{tLxEs2}H-*Y1L2b*-Hc3)}Hu5 zSXQ)_@^7G0gSfQ)#aAe=`_{J^L8yl|yM8Q-N{aob>Q-Gx`r%NzV(44g` z&$ty1vrpOZW}WOQZ;N(3pYO2<>M4r?LX{`!8oKQ&&8kfThY4Tqdu}PP$mZN-2Q_$h z{wx6-(dp3D9d4B$Q+IGHaGywo(uyr%KYtM;PCZ_=;-FUU+PXhnN8i@ESF#%k|FGQ*!U{Lk2( z4SVFpl&scWN&gvxoS{eX<*y>Z1FvLbimw9c5|$N|2Kr-^-tr zLE7)o(T-?Edt9g$ZB;v<5tlb2Y`rXWzz{nTE}LH1;8hq~g~#V~)i!JA=%Vio$)%ZaJ2Xd=P~dX6zG z$$iWmBESB;94;nFjJJ;961Kj7ft385@%c$c2=)%9#&L8<_0uP--A$W5n~io>OM$MM zed)8qpOX)bvk(u)-((l?S5}6ICGsy8x1l1s)ZLx1{DEthqAu+e89mJ>w(&1gewep) z#9?fAb!f1lr>i>!&d1F_ncyGPvsw=5QnDTUIl3JS0QK6iE{{*PHjgDO3`0N%weY-! z;rWegrYB{>yLm)J%|7Xq(OzB6EJ(B|%u#Hw4{aXi?(|z}^YZnY(j4fQGi+B^_H*xD zwFCL&Gb0(c$zMx3hgcJUbhDOcjl@76yx-!{We59uYVH=o;;nc|jdAk$WVKZwJiZcfK}=KG`BAV zV7<@IzB6z#{D_T)b(w4YldnwQZB9hcq=*-#ppGE3nWNCtm1b$iX*v5|TwQo;TwwzqUN6>2iXw)4K`*CMd$Du?3 za{fDKYOT6Vw{WlHp>oM$u?=EhnwVg4buuNSbRxAOmTe%6J1a@= z{c)&&Ua?vkety zdUt^%`sS=RngyJ?(X{<9XHczXmN^6;p%^g=O+8~7n%L^%2aE!|R}cFQc*67lbSOLV zow(y9AvuDVxXA1`N3Kxt8u!iDhd^>r{jG9;p>D}q$ooFWq0lNjOAZP`_FZBIc$l4r zzV~f$&b0Bn<(0z0KMp^-9jSIAwzy!rk;ba z)yBdqNZ^fF3xlu--+QBFWm5#!y9$2Uzb9B{03?tGQ^ctSv+F{S9_%z({pdszmTuW6 zq}vj`CN56@^CgmkHnbv#GK2WKL}Aos>LT%tGpC~vYtgF6SbmcRAc?7U097}%-OAe| zz+1Qh98}wKc+R3HTLMZM9*FT_JT)H^a)%{(?Gp^Q`S*F@c0-93jJcdlBkZP}ZrfE& z7v|Jjh-D_X!D=f_J+L3?&)_#dEj}+dKYwLnq-i^w3}aC4=@i+F8>>Az+?86fvF4#j zy(T{M0rzW?@LBaXRCELy8+X6UDv{hQF1Ui0q>kDS2F`hLTI zv`8IyJFH@A6TZ(;Rr3&%ht)=34E-oLJZgN2w%HHKY#^knOJN?Ggh`hil`TjHO^{s=VvXKop5Wn^s^?1oE@%1pxuJ1XagvW_=&D*QrTzq_k ziSF*p3sEx*vOYQ*^nF~}qjd{Y_H>|m%y{=zj?@hAxT4p$&*tMz`2k~zsL>AIH$(Nl z9H)igI`AR0_C0UU(Yo0F#2P8yiI=jpYkJ671l#D&9O`0wYUkC{mq#1?hFrAfP|%TS zs%XiarW4%GN@_(0T#Rlp^S{TQG_uL>qHdWzF-hG-Q68oM>VsBj=TZsWO8e9I>K|jkr-f6CBZ33LIb~j!mc$2(n?0pKYV!NhyT;!sk`8evJ?!in5Vh* zWYmKIV;K*|a;olyhPIa(8k*7toi5IL)JQF*TcC082Ulo1Z1GPyV6&DA=$K`f3?t}5JjpRu6-7C ztjJ)6J0y`5FBV9F^!~`mbZwP|b#i;I?^0~@R+ccf4F<~v4_s-Q&u=Yz(N_CmpElGB zl}pIy(uBdypI#ZH87|NUHUbb&W;LKyvxOiQuK|@d)T6yZe|+PM?_B3_*uoUiNaHaL zF&xmphe+(y$aA*OE&|X*<@KwjEiL0|p7~rs`8Y=gSyo0?o+D~m^gv5{PZ@+oSF9hz z|7;pGgP9B-yYMAm{$Yc3TC*FtYnnXN5d2wcuF#M1iMNh=bYr7`yK8)jJ>Y%`+1S8$ ziPCtiqQ5X%8aDnYdvwSBOe!g`Cj8KKkRnFSX&TgtCI~JM_C-jH;X@s@#hAWWvHHnn zEd6xf=N<xC<}R7wFSlJ>qO@SZSgLH*~r%8liF&8bJh)8#yrSTC4?G8z}S zvKG$&N3~JJ8r}~>n;3k)L52lu^ohUEn>34%HxEp8*oJgPF};fOYeOBu`5FMR3=B34 zS+j%(hunbU06PegLVYk!DP}`4^$x;jD+WA!t!BSgXTZmbrKh{+N?tyc!wtbwu_}rG z*lO+vBHg)fb!&l5kk{STA$1vLpE;s&Sdv`68FeVJ0KsmEpB(N=t_>7S?O?c^@=OT~lRc@Bbhw&7zsa&=Ckr;+90gju8 zbTs9>`%`)r5^_F_^0Iy*!(t7qdyqk%{F7swD0tny4`OK{U|}{(y-4Q3*?=hEnIFnB zTOFg~JsG?U1(U?m_QbTnmy zTUcP84%+B|HM(5bnRE8tX})km{(maA-@|Zajh-?k!}K5bV7~?<-t?qjy%m;A)>P25 zF>dF!jy5R92}k}qOu@fks*ffPKLdn~RyA)rn4T^xnAy8&5}x92eI>F!G3S4o`*nH+ zlgWZPnmeu~OHj4NV&b;N(Tw3Oy5_x1L_c1N&{jDA^GMhdn#N;N^QQW}Ee}|Ij{}t5 z^^c??LR&w?%@9b5eIrr3o_8&;Z#*>*L&fu^W8Sq>4Qg@l`bhvY*J>@ct=BQ2VXp7C zPmJ9~Xc?8Z7Dc-Vlg<$^-^6-_HT>b2jc_R+UxMA9nn2 zfBnIw=*DXowpFS(0_%A!P+#HxHI0Ux9qy}tRIp#Itq5OVV2Ka;4)Za8#Emz!+>(lb zY@dS$IEJFMfkf8s>RsP5L3@&4@NY}eD;LEAS>>xo`I~O2kP-W(+t81TNPG>$F$X&R zhdQfG@1$x^zWBrBe&xdc)#_tV*UYRcw7`I%HpUz}l6~a+`bmb@K}Pc1)^G>KPYU&V0l#+-nK?Cs^splAtdBTc z!?yEJJZ|m%MBaeM#EepR4u5<(q?U80bo)sq1VVi0BV%+y%UE#k#4eGZA)URm1@&KE*}hRwI%IvBzuAVaF%pIFHY!#r(=D$I49L`dXNUdC;A$mUUy z-KQMSJUReswyXB(Z+(p6WvTU^H>MUG6`w)WP{>Pp!<9KR1ys>h}=%ys*QC=$l z`B-#f=ZyM8QuY;=kOi)hsfQ z&)KH!0^5rOHmC;+GV!g#*~-w!i8h=_wc8K+B|zbU^t+2Chbw>g=uJrFOIwdWHh7CX z@Ct=f5IGjJ+9phLAGQO}RO58pR2YEk7>orQQ}gmR<0*_dL|Z=tvx8ALTCxEPs6fH; z#Ny+!Duo!+%br16{(`qh!pAE1&zJ$^H~rI(iwz&EeF^a_MViGqFG^qqj>YUQ}k10GK@SqAl!HA@z==ag(s zVH7tLceLE{aE#$38rFX4s*LIuQ5WxVW9wxOM(P%)J=3MM1zrr(N(Y)!$3Pp>frEOl zq!<{7#meRDPL*$1rsn-_eOUD6@JeyA$<*fDYRF*PW$@55jKm_;_Onst7e;$}Nt9o| zM1O97u6~0y(V(8=0Fc~$cHK^&)Uar+363s0P7xAX%Hd>eNk9np4{o5$IK0{>W^yhI3y%If2dm@iyH>qevlVo-+`|S zoo`wdZ>a}pVBWPiFxguB3f~i7d-DZ#;ym)YiYK8r2w1K>z!E#aaSM2jOO~0;{Rat{ zalxL=-{YfZT7n&=keZ1f)|ReSj(Fa)akuGB?{yyifz;an&YyJ;IXz?3;%_JK{#l{w zGCZ%n?0D|StWb?1-V&6SE7OWVp7wQzoLTAkg;!XbhxWBU(_U8n{6!sm()Ag0s^C7r z@B7AI{>w-3|JQaP)JSM$hWs^nxF+cdLn&7acM)os2oEteP`gdBiQMe8x|!;Kpmbhv z{+s-l99c(r&_WdnFZ9GEb{QW8Ty73{-01;Rp){>~Y}`){liOUVUuQ&70E ziMm!4y;wTHW$Tg+;4;l+r8h%zJ)3E{upMPHO;fL-{U*i5{Z=w!BA(wEm8C$6{#~`a zKomKn!0>_vlrJ#$-5S&#EF*Xvthb8vcwOCSyNfNH=9PcTMmX|9xwiL3)i9ocNZ?(c zRnB27c(wZPg`LH-2t*F5Z|?oPBufssM3yEkSzI5k8#9aJB0whAwPeFyWVa60f%OfL zO}^Ck(FItlK}U2e?G{oAK?D~UM_%f{fmaJx!$_mG<46vU2FS9~@*H^cyUmvmT&oX& zW53)*$3~|~hJX)azc;|bvEv_|?=Cdnc`eUWhgR_n=>qF980nu+YIbCzUxQ1>y@e)} zD&&$4_&~buc6+>(O`9dk^Z3QMLkG-91J`*b-eG=r1O$a{CLeZi%e5HvO6EK^ba&n5 zB1+90*C5j>pI+Sv{=5vO7#!B8+e)Mt4#p6Y&N6kZI5Rh2wwVG9D{86^lJl(^<7MRjF&MtC zC8sLlXgq?N_NIo1D9o!@YI_0{@K8y)_f+e1n^9GQMT> z)p%EU2LS4)X{(&|iZ9)*4UBnN{VwEH2Eh>=0y`YeX`gXB$B+-vurHsZuenShT#XyK zPYOu_i`mshuDikcf_y6X&zPV7_><%>o8QQJpF010*E-cCvXt~BUx6YcGbwFbNjQG% z`pQl5P>dmT_G9=h(4fIn$c(_%_k0q4a1|Kheq1D_`5|+wcfE)jk<@J^Bby!lGk6H} z?}=eYslS39lc3H^tfG6DEl+IEV#W{6~*M>q#7O>{2S zrs1x)9KJwwT0IPTGCXuHa8W#WXO0GSpp>>m-6kX7*IQ5dE{1z%w#<(X4xYVjyJ2jt zo+z56v*A0Vx^wxNyUIHJJ=S5)X$|r?zI`}KxqWM(3E8)#D)J8fVaY7)&ZD~(T$R9RJByY{Xb<$%fL<>-xQoy z9B66-&i!78(pty{YjNoeUKsYMDyGGdOMncgm>!ADCRD}KMBfi zo&GI{xlI4v%_T@WG}2e34z!b&BpKM6Uy?zrRWNep{R_r%*<{Pbr)`Q-{P|1{^)$f8 zWBDM{Wg-%e5}8mC$7f8gAG|6nsCfx@D{ESAzJ!{n!wFU_sdfkkF9HNX1uRJ*7V-9o zy3vG}qO$!z^n^3^9Z8qldA#H-=~;ltVexCEVZJV{qF1+^K+71~7GpiyywEj+F}dr` zmdhA` zH4A(gc~NE*H>ZYJ-5o<%tMnCNdUwQ#6ch;5$7gTJ@b||vymH%D zZ4xq&ZsXF)EjE5h1Sj2Lu9~w}!I_HTGJDm*Gj;6Gs)5m`#vi($RFAI zHzRHJLG?JtF2en9fyVXWu(1+E(!TP@Vu|X^FuS<2ZG9#i)`IX$@g~jDJvv(QyY`Jz@7!hOnWHiF#I>ng`zWSq!L`ni2D&s&@ zUCwJPc6C$IjW#?$14|k+{Io8@{;Wx^>#q~VtYC}g9MAlTPo^hDcrYK%do)$KZfd`N zW7)KgE!t6JMvfjN?O1|M@{)cBzaCJ)h}m{ap%3P|&ep=_Vty zW*nkBHc>{M5pUx;v`(me(^^dJY|Q1R9TJ{hp!+c;F>lKc z;Z7PGIb*3`4R*1QZfdbvr`v6v@^_aUI){LkOZ@j!hLKJcjR{$){O0TXJD!{xb&Z8D zE&dLNX0wxLZxka9ld)$LpDqtq2C}wA6_@G+JXZ7|oE#xHS!g*oymQlN)jQMUIT+;cmT*%k2Mg{qM$zz!iQJykD6)>yA((aL>iUoEM#|Ex;6 z?;UTHUAA&&WcwmY{&VJMbrbu{E%3Mg)W%-H`5X1;W7aRl_tWd z^K4qNs)!7-?dU1^y2xU4wWdh|ClXRY$mWXPn91FxJgkDbo-CHy0VwajuIZN_Q=6hn!jExo303Of2V797VRrAUdN!6Q9rZx!kyr z>xVjxuq!Y_x`Y@lKT>b5+U%Fy^_nmIIRpSL$%bb)hZ&_0UeldF1>{%F0xd?^rmL)jLWnG-f*0=S+%hGu0SGF$g<`8w%edJicqd$AcRvJBA!VvTCO175k z7A!gZ!$hlOkVfzFyB?ZgVA|V72h=*5tI>y;e}9^1tsdErXQOZDXE?0SYvX~E+sl>7 zzcjug`LT3|5xja`4yl7mHf)BcdW=Is01+MHcKtKE>{4jH0{v10;oVN*~)O3L!QpnAqeN7L#`9;WLc!9W^#X;DuP0TFT(!77; zAu0yKOWk~tU99=)**{wCRs9l)6!W5i&(EJ?AVCkfBXrv{HXq(ZR6+zrcaCy7ot#d9 zqwI!CC1v1{5Qq3a8{@F;i0!>v_Xr&ChqE@)C-U<~t7+L3 z%0Q~k+R0iyZ0Bj{jZT1f_57f zf!;CM4()zk4jThc%AqHlp0sFtV0NE}@>qT6l&epD{L7-$K#h*^BlnZYh&Haz00sN? zjAQ(L^IfIOaH-w)x=VXL99gwT^}e)6KF3G7NQRVd{*_1_(FcEQ{9`#-3O&9s@+tBx zhGj>W&-D5RDa)^iMSt1NcioNf9AS>m$1Pg<-?G7DNyZxX!6PYP=jFx_ zJ5-ZQ!JVSJ+*JHXs{d>sq*7BOEbHoBt4(-Gb*l*a+Mn+Q4n_Cav6t($t?(&ru30H9 z_g5mq(=<%(T~z3JANR3i>j_oANMpxD;CfGtgncWDu7H^y-0f!YNURN!*>vh>?#ohz zA{W9?8FB6Tt9(z^KPI{)o7=IJ7>w@b&4WP&wV?cSKh|g%MTBzxCPHqG{A_Vq=~a3k2)0KbWQqQ6Zg2N;loI7kl5=c8B0q2JnDAimQET@TlQr&Ar^n38B@bzg zZQk6?aP%XgR~TAI=FVn%)AF4Lu1}8=pQk-zPY+1$#k3Ya1s1Tb$VEozQtbbe99YrT3JMiEUW%)Ozna1X zxM2 z572H8J#J{*^U}u2e(kO)o%GXM^Lf>E$p)zR_5L1X`Biid^Zfhj#$VwkH-;zuAln+- zixVoiE3f5SI&AtmdCcbA6=|c%@9JAaA#SAwiLk6cAuj2$v?t0)+O{u>rZ@EW?r9?p zmz?7hL^}N)#@t`qTf1a;;y2wjX0@&2CET6`W2>Q%^%F*U&GXMX+_oiry|DUgFI$DR zU;Cts&UB8*T%V1#&>gS;@^=9vZ0SMLpJB{5hydE@piFiOnX5MRA$#@cLKg0aA~P$C ze^%DCJf|(_FY}4l;f+r`{D%c=;(6c+{(KPfpm46)WYWJo<%EGK>ifUVq@tP*UhhXB z9TtDgF5yIJ_}hp?LnRZpp~sP5D!2s(vaNTgA4+0o)HEye$yd@fhn@28A<|^7?D-W5 zF8+HW;hWN4+|y4TNp{_KHsD>!tZ2amwO!=`ZJvSb5Bgs9zgoukc0g}rj$E_zsFrAs z8}Wdz?ykOzY^5hb25@(i0tPA?HvLyh6kR{q#d1O~zZf>ChkW7!m4bPDzNyvv0lCr) z|AZGNQ|rQwyCi{1!zb^Ytg}YC&96M*6ODDkU$R=UA82h}SYHM(PlJ>Dz`SLzaPF;* z=pr&ER2h%JxySsGOsQ;bF+ZI4wmS5U&l$d!6n1p*VqhU}4jWK5wbT>K+5IIg1yvD7 z)S(5V#&ul(K3Rt2Y-(l2p$Z$CTxBP=E;g87?d5hKTqGqLfJ!Gm4{3xz;EVMIH3 zI zCu;NE2X182w5J^eM|*m*l^$45@zp%L(2hnO2KC8(rr$<$%ydxOnqR`j!8+R@;rR}A9RF{$9SxB(Qu!HOm7U49E~@c(QRPApFKaU^ zy^=zG060C8mnxkWQLuN?KGcyiXBnpmO>q|>4|Im*^J`c3btH-Nx1Z52MJq* z0uO14rP;VL!I{BQI1RYYcusw5$nW9fAtLY^TdDYMPr6r`8Bu>H zv~enEhSqGQ`!Qebt?za$Io_h;5&G>=5i{Wcl@K*z0-&Ws%m$D znr}wf&p?HR6&pO#f+Ob8h2QDA;Gnw`;mRRyMK}SZbb|83Ix`D52b65dPp{c=LNc5(GnZBwY0nFJfmhU z1M*O{;-*n4i2CIUVuZ={~MOML5&jW-n}nicvz~7joXOdY8nWZQ+k;l+H!G@_(j?V^GjtsUy9bP+zH+5B> z(Nt|?Z7Yo>gLF%;YOR@71*_eYd-kyAdRam7?SkBt&LCo%E`5Ua^Mj>c%<2vjy#Y)t zHI}-pEE>+MhkW zRJ*vHJ6BE>KA@M*?W=&aH}Dd5tzV?##tp*0WGLu8NV7+TMkhtmMPKJh8WANsUr%9# z%jox(W8YAqSQo?9*YTB&I*JD&%3wa$`$}!ge3Qga1O#Rw&Dkub2e>-0njg>-^&hEJ z6hp;eEL3SgATe`w2YNJb2S}GMPZp%z3Pp{xQ^}6r6Jss^%TT^iFy6hLh^ejB1rGIEA2zH8b2J z;vH%YyMLZ?s z8Y#Y>nXJy^ABKLvZo|Y$C`@-%Nq{#HSDw2Zj;eW%c;LrSF>^-BJDfUktU74otUSWD zfT0sfiTz{9vQ&EO=ru{_AvK~KbP)!{vocq8=c%4t_*$q~;#>U$DX+-%z5Pqw4E{4S zh8t|& zo;7O=@h3r@9TjBR1~?d-Da1*_+7jAY%VT8pO1E4iM{u^&6)->_1D&ACAJOz zdjhZF)fGq=Qtv_bfbceDG2O>U!q%MXZ|H;s>B9O#(aT!$H*$d5DkM7iPU#jmTC`-O z*2wns|_6#K+`#N^;Xe@br|%Wc_mXhpF|bYg)u_x(%I|E zpT7j4D|cIB9QtN%ULarn&zbq;z4FG4RJ3{WP~vomjsJ0^;yXenHK_+=xlqsy@cfHx z^?ajzQM=w|c~g7mOLExOa7oAf^If&P^C0BSO&>neGAcPK-do@lZ7SJp;_WrB{tDaO zZP>W$u|D!zyU_73<|mtfPxK|57fQ>(X<%Ej9;Hhi1;)`lXxajKo0hbCJ3On9eSmJbdbbxf_^Qj#-5uNJg z-&6%kMqjoq^ND#Zj2O)~U2^EP!?wiOgigD?wKV>le(z1!WX~SVJ`X-bgSFvW6`!($TyC*VF4t&H87PF4p0sqsz@Q_fVDi0k zj?);(?Y#AYf+Pj(Oc-(V-7?L$QAwby;#o6CvRUDgz+O7`j`&&8Ij_UMA+o-HVr^*F zevmk9EkN1zs^kSYgnVw#@8}IdRM!KWbF#wx`48Gq8zLasI>WZP@w(e)qkB`_gx3VI zyml0=x`x(ny9Nl!y(nGdQ|W0rwg~$BQY`7 z8XdoLxf;=+6c9?86e*!R$BE8qP&C%la2tA5aw)9UW+IVBAMo7fW@j>Y8_hGq2#MN& z#@aJF%#Bb;OERahjDmA)meO<9%PTgD$~-_RYnRSHvUKU&8TmEO)<&C~M_bvDaXtK7 zVwlg`QJ>+o0^G~Hl(+rQf=B{ z3+jRW)#hSbX=WulP6in^?PrJ-l#Y4Pjhw4Z#LMMw4%t>E9v2X0lHc{;v(L%Wj%$Q( z>lTVZUPN1%df$1+Q4tpC_;gq!)yTCp7q41gV*|Mn1Dxc zGD@?C4|B5WR!>C)KVXp0^z=i!wMb*d)r3h&7i%@N=ZJy6 z9KN62W{>a3;XH&U{h4gJ?v<#uP)L>o@3qw+ENhf$<~avDczg}+m7zv{VhC3QwM5aP(QX(v;RnLi%Pabbn&`v zI>bm@)hhuT%?~bZVja3i1cmKeH&fnFAV1kUu7R}t+JVvI|FJzUwOCkZY}6z)evxmp zpFNdAdHjK{`cae}^Aj2p0eIheMk>A&BBfj3-~WTilGx;1$@EI9Toa3IJ@!_I%Gjm< zSd;>gNhH=^u@jLlfBcefOJeNCT{?P4A-ejjL|#ymyVQ0x*K$w3@pR2pLM{7mLxQ|bUSV!RI$CuAGLK zeXZ?Kxt?}S6BVupHu~*bpPjpShfYCtB`j;HT({dRj(X)uY?ftgz-|1WyCl7X)T(hB z=yqMJgn*$snKHtSI0Qm}8S zT0*4M*ZpxiOAf{~UeVKAdL~UEXbGqp+*kmv>>M2R(mR*7B zVvCCv1^T|O{`tK#NW(sz&JlNzg8a(Fz`&cz;$$53PHR<5m{HsA^^NeE->ON6E4%t+ zq~Rer-n-N}O1xpNhdFuLJC*7PG3JevgsEgbD4v|SZC;*H$KKt~-@!CGF7Tpre)*P; zx@vo`?gI^s2}>)=jd{kCeUA-!t6~apdLs;8Ty1yTF3(@?OM%5&9U_NnQ`LIaKGhok z({a7!b~&ic%w4QJ&3||@R8J6``anU=kPF>FZ~6A0wF_qlWg!sO9$ogdtLGX?5(1P- zzEg{oDx5LN;olNsf;tV-A2&Pn8{^A3u)2;rcau7;rECU?1bQ1=82BbX8}0|;XsN6FP2V^C`gT#9PHmSe8l{xucJL+8m5Gt!RQV>C)no@Oy}XDLF; zV_D5U8wVI7DKEcZ&AMfk-kEIlg{*db*s7HzgR4YVi~4#K>YH7i-lp<`Bl#J$ChEKr z3+xEm#!{$n`;%8@`@4reaqXcSB@5|!notF5*`g#K-qKn>fP>i44530n@B+lFHGD)T zCEjW_c(x@vbw#fLDsP26ywxEg%YXL#hgm>b#+%idnH|uU-fT#bTD~fOP^&isr?WAk ztt8r$XFV5rDtb>hO+w)BX^5wPpd*OE(ytoUey|`6yNEO54{!c3mme^3_rOcx;CI%{ zbkyHF^~%~Ht?o?d&F|B&ifE0-B}jdcpB-9%R0h`4PzH3g998p95D;CoD%4xHE}2D0 zlyvOlwJQ;_Np*AxHKc*2q_@KveL{7-rM$v$=XCC9l&#qj%IKiS8T+5$q+ zX;eK#z63@aWt7uB=&<=PJFNd8=Q2~RFMGn1X?bo+k(jZ~yKF)GUq+JZEcA~XG?y$H zY;~EpZB&NGvh#L7H?6R7U#iu0GR1c`_y<5paLojxWQOZWkGUT^80Xza7p2po6L9kL zuRK62kNT-kEvj+8f7u>p$WAWxkBvKy24kcL`#x#>Q(kqC@wgSxtIO}SMA7k=7*%LQ zDz!%|9l-Ye&Z&a9i3A6Q@B)zm@0qfmc)L5hF5L0*<2WIQ>-{mR` zRgb&qp6!|>+?Pxe_E(KHE~r(5bbZo=JfEUwgWQfz!UvXmwf(;HMl2A!zPPjAOM+&4B&&;1AV_S~}lQxJSigd*BNlvg6iapbF|6rbBE+`3z6b8x;& zDqS)UI#yWqCf?wA7nJ256HQ2`ydbop18UJaQ=m>7{8J<$mFo5kw5g)TTBw)AYyRe~h^HOl4LJ>ahYo*28)>*+rTi3p2HU4cJ*{)gp(3=^ynm6C!4rsD$D zIIqNRco*dT+7&w&S;2Tg|HWr-%pVqC6@TgvF;7Y4;oFvn^ESkX-VyhjdiQU!U7=!E zTy-7VXX<9^GV41z*itU;P$#DC8>&bLzEL}V1VuFd0iMW7BuZ5AN@cBwl>*pVYdxHW zG+#t-xI-Hi62fT#ZckWls8O{tK_w%dGxh@*y$C%~sp{Z<)3zB*Nkv&vJ0^Lq9qsYu zi+Y+gVE78Gh(}s^EEWPt$QLcjKkj6^&!qXtT&|;-^r`PG?h$PreB`;hm3P5;Vc;FX z(d?ld*G4|J$|*Mz555l$hM6GEZ80Iucl}U2bwV7oAwv z9B>_Hdtv@ry5bn+JP^*i92oFZDlDZf;&!c%jrC>aJGc00AvOEQ>k#>zVQNpAgVsb$ zCB8!|0pE*M&+$R4%oQ27&mWW0a+ z)$-;B+6D7O=Hz%r-RP9uO~U{&Mq9tnpxHV3P5LuxCJnbmR1Rn`o^M-fGp^4nFeap4 zZ+36)&AVP!a^M1uPAAE>rM-!bgdw}Pb~KXT{A0gaVY*YK*Uz;b{-!EyGCyNtgQKr* zbj+chwXWT5s$zZ=^_O%&=#HcJ&h@2U-v7hcd4)BZweOz!zHvr$5EUr`%BK=q2q+Se zrk_YlLV^U6KxiX92}OE`83m*}5E3M`p#%saL`vvIX$lAkp;sxP_g-~p{|{&X5B55H zuWP;QAlH@mUTZz~bN`GC){YxnciuIsnzdDP;*zbXe#14dTdfO{Rv??M`y+cE9w_It zIsO~7`^m0FPH(Zt9P+Z3_oLC0ve`!@F{*Vk+8hV&%XG2N=DU^FNB7jS1lbdF(W8>Z z8yhd@WV$X}clPj)xMxR)XnZePnA7aCrn&U>MkhdIb&st}RpVwvJB?qLqbsMVPB*qT zgnW&ZCG1SX>pw}AVS=veduuENb&sOip7=Tf=R$+Z&N>6^RY##U~1JH64>7j%(6`5qswF+xtUdfm4) zY%8!@^A}B3G7TLP)t4{HB)npMsEM^kWA6%1Zp0R99Q(=v*EXQ&VXFWE$1&YJ2GjPQ z@_OZ2`=%8aS5Oic&J2NK!9F9&jNGsIB;yGPUR&;ug^&L{6#UN@9-u-Yct6GaqF$sC z=o9?fg3hyc;s;2}w9>%LOB9-M`!degNgg0tv^QDTHYq-MAN8Ub?K8rbo24HODm0LC z9su$)D7eG_bp7`qiopw)W_1uOc9t+OIx$VB_y(f)Yh4!s?C8`m+0oy*{CW&E5O87L z3cJQwZ>$yl8iz+4CznZg??`PG4mM`Quoxw9n09WLFFEDT=xF7C(rLP5=ocMJN&CEQ zMi}2j2g$05!aOor2VCZ`yEK?;$`snTnw(xSEt@CX%}yThPFMg{m{&PCu6?FE^q8u97MeW+pot1aoBdmcf3qb$4P;8h;gevE}msiB*)p zQYHK1y;9-Aq~)_|ite3AkL-w#QYB|Qdtlnd+3Iv0bFv@1_jSUf=*8df{V~y5n^Fw; z%}zx4Eg6+JlCqi%axgTAHLnbu_<5w)%)lJ^K1uI*diUY+K+C^UfIEYRM=r(%z>6kXR7082i(Li)# z+2O4+D(|P>Kg(d|CWMWZ-?Jl3Vp|3?qXfBcxb*j+4aj+lu(WvmqmMtyCUNtc=h*47d&eF+HnKQI^85Z1)Q@I z+f3E80$(cHa$BA@Q@VprzoQQ3_%C#_ITN$3FQ#r&lbJ$$!`_np6MEA8@*u;q!4QnA zs3M}Nd&SXhc@)a)+&6lOn*<-BHf0lM8?E7M6r=aoy9;v_?zCfMS4?q0Y7u5quIT4sMpq`0wA0j$3z&Vn5Zs0VVffyv~izC-Pks% z-EaRcv{e*zHbwL%fl@!#z|beR;PPm}KAar3__=p^`zH&=5wewFFOAR*6&%F1OiI~w50b&0yH zG(-WguMS^Buro>8HZz4lmzO>h5wc_&i&04xdLNQH*floJCQwGSaFcGbE9)Z>!Ece- zzyKTD)x#=wsKf2jw;#%02Vkd$kFM(0uRr#?t1#5$xo^*TG*C7mnOuCV6h*+CQB@(L z1t)mNOmmIDtdnpL-5{KrZr*?tS}hT=s;3O|?OTc>8ab76t*b`w2)T+nvAXNtlP&Ip zS~2u#Tld3jCZy%hfZN*Z%mD_4Q2n&BqG8m5d;jJD;c{;PTp~vv{0R`Qb$l_OTgF}*u?^Ny8 z$(raY|1#HZdLFd4kSFese{k;qM@25sMp3WH!G0DM*IJPEFtb znvgt~wxJI)L}9Zm*NU*)Jh<`t-)5KkokV4ujU+B98d>^k-PHW$$M`lYW=I#*h%nXecB18GeTl_& zLf0vGHf|yn_8MnJQXkibkGpy*$^a02S`I#(N9>aE?l(sl_EdbwUYnvueUme0GAz(D^Ijyj^7kg z>+!F8f=8^2P}TS+Pa1BA8fj^0U2iO4ez2$2!+qI7T#ySUS7;7;ezI`wW1Ucy-8U)6U*XwQc8p_@>Re}7r3db<3>9G z@%(Sr)*PdeJu#Jhh8^@E9>|{Z?$5`);(y)m-E7ch-HEVV9H z*A7nSS_e^5$wJtd=opFUlhmI4hgXxJn_V|54aP-?G#D=o z#izU|g(bZ=GrIZxB&R}Hcc7DZCVOrm3<3xwWY&+00`=S5^!bfO3OGhdE3L#f+dFzO ztVhcd2$y1u+{pASmPKdnc$#wTasKt?bC5&9vF+7X7BcVtJFb>gW|{AUqUhqFCuz?^ z-4BVDrdhqdu+x&D!iF>_t)vKQ*^EI;qb~X8C!6_|Zy&PiBqD zc@UVj#K*4C*k%(R6sf)-!6D9vf27-r?4_~=J{gege;HWuiuZl`Hwpjj~k?Oj#r zfxa6v)17%CTi{fj^^jbmaSe?ypFnbM@ooiUZ+hV^vhT5jS+3OV$$%&|SY%WVMR zlxqubWdXECAfJ&K>{Cl!FZVYIOkEtev`+7jH+Nf)$^OA(3PoqSyz7L?GjS!D@A;#P z)~{&7DT2>}Hu{{|5iUKV$X4cgx$cCaXMppp$=i(umeE>yP8vQBpjw|HN(sLCd4LM} zcxqbX`-7)x)?1~>8hE}A<{~M-G_7G1>&ww_)B(|Z1^0u8mF`u))v>P558UG%W_TC* zSIl8-)H_V-Y`)SHEcLlIzIwIBv#bROx*J*E71d(PSTC$vsRFjT!z3~ly2l_nE-Swm zJ*Vu>Ob!<)jV#rCdp}qe;4yJ@)>A1 ztyeC{&|NS2OkR`h{3HnPE6P?*zsII1<#3ZqAkKU6u;7HwtaZ}~6U?i6(aDlG|3U{8 z2n}Et2|svz)u!ycVhV(Ea*a{(Wdj($mA6vJWN(j6=Dn#lUDJ<Rd&WR7ck%ZryvQLrhxpV-eV%^BB`1*L?+|WmMs&nrW zMJ+@nuXKn5+}xBtEIJEKjMTaYei=o3*z!p?%J_F1BWwC zcJ54Lf`r^*JNC|V*&%t_n4$04J_OfiaO+i1Klbmr_4$*K-3ITj2Wi#*`P^@|@F+P~?)kV6;o;kl^dCG|!cNUvOfOJ*pN++0 zR$~76$J;;2R;1|w3;ej@IT-2)v4NYS^OBBT#%q(~0d6=_H-r3{6kz4`uMTsD;tg)Lmc#|6-S0ZYZ}h1fy67H?bIlO4_vJ;lG5n$4&5^hYg=M{X8Y!cPgu}e3d}G2)#b?p0 z(`72jcaXUS!PSAc*_P8QUw|l|MUiGTyIXf|+=11j0X90{uf?cP1>zR`VfsnJk@G4De|UmooSvO(vfPzDZ=TZgLS z=gGtT1tHQgwBodRhwx^YfJqxOjNeasKl&82bMJBlEsi!j;1_Y$-C&;oP)tzxO^f_r zSe2UOc3ZafFA`l)bt^CFpZ@g0(otB-JQsq457h_%2Da2;z@4jzBkOPYvk{9|IMCu$)Twg0C1JS*f+}$!!)j z78Yl>Sf<~ga1q09?Oq=cTniLS(|{X;vGQa;Y`dFF`Uq#Bg*H1~vIOtp^pE-Ru-_Rk-v(K?z*-&vPZ z4z(nvdup*Km+h4L=6{HVr zq6pLA?&HW8* zR-*j+xE_yQ zyan<;zLyd`y?9%y(-`in7UY|uwnYLVACMh6AwlWYX^y!4{_n*rAE>id76iYVu9*Jv zI1=3P(yc$ zIzxBf!=OxZE)G|c6ISnD^AP<`sDYZg4)|Pbw;uS*CSp>=D9bk1?YqRE=88G7cdWZl zoDG}&u3u^!O_TP{NbqvTiD`BHyxe7LQeO3(L^@UyYTT^<)3M`kpA~%CNm`5uAuOHR9~0XsepsX ziV@+=0H-DN8MQ84&7<@W0r{Utq3|-(xTW@`J?tXM;hkMN|8 zt@5SvK^MKT?4UF4rGqsc4mavHq^+^aQ-WmWc?m+_eR_SIH7>N%NVO%F9g@EgiJY%x zf{rZgO}Iv5yk#AUQhC;ia&4Cvr`-ZC#kL<~ih#nL6bs?VzWx7H)Rz}h%1fQ;)#hVe z$fUGT$+S8b4dt=gzPk!4`AIayI!=7d?=hW^|MH(p=QV(pU@Az?d^JdaHY5Qc|IYI6 zNhxN3WcaO1Ko#}EB`*3SZ5yyLyr;D7IYXb7U||st_EcJp0ERk41GGZ@awj2>|I2Ls zwdT#iwDeMcBmNka1J=4*W+9Y%pN*#)>g;=PJyBn}G>|jfHrR@i^Q&9wBymk|l96Ve z_h~%Z&QMZFj9=bC*N>%qvM-xy`f{U~#fTc+(;M8GExion)O&2Br*n0Frw0Z)bR!^-9PPC!64xf6ZY1|QhYQ&F#wc_{jo-s>^ zCi?XD!6c8P4dZSiQ1wINITV12wq^Oo9O+&&j%e<^ zh4hgI0#{DT5z^7f%G<=9XF*}Zf*|I#ZM?IYUqLf~^_@58_wxUH4jV5hx!*WI8+JStd*Cx+lm6_UCyApwRZq?mjqVK z2R-v(K1G)ydD=Xp;7Uw|D4fG9t8I>5hz~YD*1DAZA})@~uOJ2N6~iv72n(9< z8q)(TcArwdGUaxRjMAT(b*&#bo;|xPnjGr$^BhoGCUrHYVORX!nD;oUP%$Sn^KCZc zX6-v46am9mv?=hLV%M4~ zefl%D_9ilk5m|LcUz$-jie9X;^5&8XLiOJH;0354C3xG3R#toS9%Aq{3xCOI{B^FP zZ&vn=(5wp>K9Cc1=TGniRbRbf2Jl30FD&p9{*6G~K?F=o<4MOK0n-29OV#XxPf|q*P3a3CKtnbHk^$`cUta@+Q); zeGNTsa%Dpi2J4STmk6(m*LfjW)vg-FhuCz>fDUypNC8C&H?qHEq|6as;7HY`n{@^} zC`;({C3U|yA%THRAZeIs^rvPGrBTxo?cq@%7hsi3C9+SyM%*-QF~w9A+!(A;8W{;u zucw3$Ze)Ghkp=1{mrW@UztpAE^E`Sb7v_m&5aq;^U_yb7gRYfE@7Nb3jB_!ULI7%0I^3$`s& z^jCqk!r@M3>^k$L^zTh0xlqTdM+`C}OWMxN2w+gTH<}m)u~qEIxcAuds2pp`CL}82 zracFRu;K6!K)2dmShp>E7`XmI%b{{!x$M(_0g8%NI%rCX;k!D$kk3si6DXLQDvUX= zlks=bi0Xp-=?Ep}tCh*!hl=o30^xHu-mlx|GatJ2{8=q`2Q9tOSTuH>8Z;f`jKVnh zFg@%uIm-Sb`m^kB_QIkb(@ zYir^eyZVLP4^^D9(v@rh$LCCq`AVs{9gHWc1rNuRRmZaS#y9Ul2g^yvS}`4?=6Bik z`(+UCdmyIkNm(M?jZ|@EdAu=#4X2+O1ko9{|3>lri-&t4`ses55TsWjHVV1H<2NUZ zK)raB-`_W$C{k-ekA4*s5wFMp5h)&&nF zPgP>g0$fAwZGz~0Iu=e}Vu7PxQpeV5LO4lAb)Qg$0c+?jvJ2(3aZh)-kZlZvOt|Lg zG=R(arbDiQ4QUKtq4>4^rxoLsS*fVo&veHuQoFIgq(EG~)Y=NA%w#Y4x#gEamp#8n zIGdy3YbA!R{v|(n{?bhjX2KteQU!qyQwD8TAKSDzc4n1~)Lj=~?ynNUQ7@MD)S%Gdo+$De=t)+f_#d2JQytv=T0)s%kb?Og% zvR_kogH?zp-EK`Z2tr&v<&9vlPD<)IG4g8W-Lg1$*{(t&%)>?Dwi%`9T3?7$-!1=> zZK_~+%d+6QMV1{tK~wdY>|X=R7mw3N%s%n|8q*4_TGQQ_Hm>Vjcsb375V>@P6(R@I zmH6zBgV=8OSB>VQvoaOM;_D#CckQz+qA?~(U2t5eK@7uuXjX6?p(r=%X;9npt#A^< z%!K(|i)(Gpc#`(Q`_(~SO}ZF`XeY!8B;5QnBH3Am-1E7Z{`-T6Ck9aBDJ=D4l8wXJ z#UziN4lJzjsD)z%e!tW5Xo#x0x9Q*Qxvx&MeFz2Te~)A)*ZNKO*B-T$qU&4cUHK&ycE&1HbtrVw)=AC5Jo9T|UeYpv=At>U^)6_YOn=>^ z*F*z3W}~;!-okAvdg&_?Por~t(#sV;X7Cjt8&Rj7a)iN~$guUl%FuM^wBJhn%Z`qj zyzi|uiaK(-)C+PxN_C6yHiczK$Z{&i&HE)w0F&&wI{46gji&2D(yE&jABjkboS~c= zCgLY_VT*~B>AU1`kDtk4#28ez>4Tl)q^6c`E=j`~@vt|%1@&cPjzkWGt@lOcufAMC zsMPxmwD1e6Ef761EXtbqw{)jBB#oUfO--g=ZT>!;_(^hgeO3GE-^@`E5vOw7>`5teQ=y63Yehd49Cu|^8f-wWOzAbh>f7{uH@_jOn zVER0%;6}O)(k*Y$*#?fZ!KCS#jj$e}jRPEu*I2O+>;hxprrF3i7Y?6Y=wc$;T{FFc zU@%Tw(xy|<>Fc@X4%1c$1putMty>nWH0)lz803bL7JwE+L`SmGDMd=TC{vSMW2~T7 z=9kG3l`AZ<(9Pw0$C-BSa97v5>+qR|9u%Ed&rRuo%%KMqw&Og@!R-Na(Atx}iU#92 z%{`~f>$HB;a<+OC>fm}4i802Hb%q^!tl_wJ1E%)v&Ql=@PX8;Nl~eNb`h|%!3;hvr zaN>AjWop{A&C9DS-_?_tlrN+%-GJQdNx1HjqR1L@etlU;XM@T}gXB(~m%Z-V)L5cD z5hQ3oROr4G-A`;KKz5jD5;8)P1kN}(5NdRl@6senczml)f+UgqYJHtwVv6EZ#< zCy|+$QXQy*O8LfT4^nPOF`iA*_bUa1(b!R8xEH5FAPDxH?fN*f10X^J^6Ek=8TJuy z&X+$G{Z^imc>W(&8V}FE2IeyJ>;^|@eZPVI5lW`}h||9{q><$7msIv(zD~O*VYbhN zwSCHZE}ODqofNx)KX_VB`vM$oM~Za_oK8wtNRQ{fEP_#=V`5i*-SFiwKx^af7Fw;3U{=8)NBpl>W zaw5?5f$kgFuwPw8S@XE&V1MeOjZ^LyMvo&)8%jRZ(>nANAZ;*I2<4t$5(rtb$_}^R z$j-y)7~9CPDx?bgp{t2N+Vw%_S51;X({=an!qr^`Kt2nC44LIh4*O>R$lLmmu_;pS;XHb30Voy6cETNOUKMq0>ZSq!7@=)fj<@1x< z2Ujj>s&hf!NfC^xPthM7Q+mb9LVw20a+zi-%`fbFOnT18C>alebOU5sZXz|u@*96u z`FH0k>h#8BgE@Yu@ux1+6|_s9#G4kmiiVoPH11TC^zGY>1}ynV4AoiM@x+dwzab2b zz26XgOQKx7+izl#0sM6Bu@{XL=zj8(xvKa*_b~==y6k%aTojsNzvv`-V;B705t(D7 z5iU`xO>v)K9+8qczx|w^)*F>Eo%5eX^X*5Z5C^2b`I*0JDgi_2Gg=;Va4tNy!~-N!*#7kMVhMo0a%p8V^0TJZE=l@D+93h zq%xbtPkI@KApy|5v6vxb5a6qISoqut<$k8>)m5}F^_KlH;On%!2kEv{UB{cqM59z? z2XWL=^W)n>nPp+lE!U7{Uv!+mo{#m*x~^ztChdBNBf}L%jnP(j6VgNcXI^f%^!39n z5C%OA|KDZ(MS`Hrp^Tc;Z(Et_p%`$mTmwuH^Pm=@zBSJ)VBX>kDAYg+f8#J;Yg<&gO$ya$UO*BTU8 z!{sxvNyrs$jv@GEDe9hlhZnS4;JYgI2T$^P0+3%G?DR`Lb2P*_@CjVo+q&#+rUXTu zHh7*LK@ufz|IHL0_?G?TQoZC}7bxtZ*Sogat5Ep>b{MYgkPg6{HGpBXZrS_-gy<|a&`MwPQG6#U-GM>_U;LSr%2 zK6jT+510Xj1_?uG=#;^LweJ!G-ENvkkWbel2uZL_^{tckBy_*e-5yn{rTS>$r)~8@ zNZWK$D{DE3T(042WM(pK$qkNsNWA)k=fw5K)F9wEZQ(Pm@&NJ#^)S=g<@Vi-A3Q!L zN_&A9S&t$MTHfy(jn<2PKfheP_-z@q+&x{{G|>6B|K-V6RVhGeLM0%>P_u!O=)13& zmr?Nn6Q`*%t@>+8#|p5`q#X=&aO>1Uh#ob(zx zyu%6$$fMDoGjuhk)aDo)LyMW*s@|UC0Kwlge=}7t%&U*s)w;d&a?q3D=Q>m;I%mK7 z!g=;?$sFfhTbl_JdAk$o`}IZefQM-&twqUjkuy~5f3A53Hek2uHWY9|cYB#e%?x$- zl{&GW<$^x)Y;^E?H%MAg(y3@!Ee_e+viKb$Y3b^)oN@s6J@v0y!Vb+vKVH z#<4lHG#j0aXackE$?sQ$W!{F)I9_^JLWZ1EflRS)0{ZudQf;joeo&8^W}0 zi9Clstf$yeYpG^c*E?ZGT){+kA%{6qj z_GEv>jj)PS7*SF~-R|1#Bo9($jfH$~eu@;jbB9^{;owMIv>=WKGKsq$vJoO_PttsN zs_Y=WrQfqP(9OT6hAAONj%#)qoP+jgFlj(rP3}(sbo{xz!fml74=wmRpNsGJoaE4IQ`AAT}=*nMy|$GJJAF zt^^KJ3gkASti89#wp#N>7A7$isE8)89-UM*oKJl5j{w7jrHbdCD1mdIWc)6zjo6nh{>nAnC(&QE4A`Kz zY<;T=;AS@BlNFh_PA3x#p}qQ-AFcX39OnD9sajl`T$cldv@72&dhtGyaK3sDc?7Ji zfBg2EEN~$ix%ZXaPc|zkD%=m=FuBS>ih@%GO-DjB0eO1x)% zOrdh+uMa#f8O~=>9tCJoy0)D3?kdG=TGpu36gQ{5OFT;MF!RH$-+L0KaiLV1G5^}X zPO4-4PD=>V;ydX{0oe%a`m9+m*`tSl?*&NBPUoKAyoVCk8mnJ2!Y6u!=3ny6jY6`h zye@>;lPh;rZ-D@SqqtyG4>w4FV{%IUfbCx9oeSa!|5Nbwq|ySubo<3Og=Z|GOsdCY zH;Kr?!=cA>>x~E`*aoR72%UZ7dv@K zf|LxS9X4*E-xax$rM!=A^hXwntTn$m3PU^c4o<49YfxOETxSEcULatzF1!CK%)|1+ z)SWt}vM9d2`q2L?^Sz|;$=VJO2!-XA28U(wMbf%I z0i|yWiw+8)@kZN%qm*WymsCm60}`dbK=0MTs36mF#jn!~!BnJ~)Cc7n-sx~s2qy|ltr?>U^Dk4a1!x!}Q#e=Ppf15A(# zYLziXC0CV~--Rg*1@F!4D%FpVn%Q*aSAA7sm!m;tu4Zxy#T7?_Ff=)iHIA_P)9O6& z=K{w=7l?evj=fcZ)1fCQKqZ&Z_y_7qE3P+Dh@j8vz;+q=?{V9nlDezz_KbQ~uN;#` z>&TXr@oJqQrLsvr)&hKku^%(J=ewe8=og{@uEq3u0jh$O!13(qt&2TVA<6@38mlGQ znuCHYsm`6I!$Q-g{mHy&-_OSZ?`jcejANpPDsZJr@b=V%fLCg8YE0 z4b1tKP>BnQ7oISTJEx+u2zz5n=A|qFYlC@Mj=t)ZE?yJ^MEiKoSuQ>@bQv3LIA8D{ ztVTIj`CJdB@HBTx3FVd1)QNG|PkTDL(X#_{gd$_VeWjMEq>mpZC*~K1i|!^fG(+4{ zAZHM?_X}Bh>&H~bv-f0o>#RQ*+`rd@m2~X$g1VKOv>BSFDj!X?K8I6~Z7r<*prw|5 zGW|;G^kM&*wwv|s>qJQR>ZrK6UCgJ^(3Q)W@22L1-Oxrk_ip2(muoSrku#@QpXp`* z@%qj?o2WU@Dl!Gp;i<2u?uLxK%wI58rTsPTzR0i2-;)TTi}DV;hSD*Ut3#uWu)_5~ z>+@2^=>5Z7T_icUnOxyilL)Nzh`Nv9?5(b^yi#Kn1CbeK96=F_AYa!l%!FQaGou(e|;pSW` z@@6&_Yc4xWBg|8hmQoJ7JfI4hchGOjwcIC$7zJp*u*U4LK!wwXeMUccM!5af<4LDc zAKJH@EePFZFBymgfpW@e^aqXp79Rv*;~`o(9wjd+xt6?&|G~2Wjx{dKX3VcV9#8-4 zyGYUrspcdjuqe^f!W4fv-$%~#=BV?6l-`gLtav*-FNFMkxPD znyIUCvTc1yxWvZ{@i81af)A6KM%}as{RK50t&OxCki!iP*@iP;$1Xz42vaz;TCi!Q zG3`c!XjrNi)59IR+;0Ycq5nNK%dUtndgBaxAX-PZ~ZkKj#@{B>dOm`*Hyj} zWNSRWUT5m`TSm{x6yhdA7EHkRU7l4&=Y7G}s065y#(Wv7Pkf&2ew#d!>kB8?W2xjrzmX^^u{&r-q!4+cOc9e}gt&#Trvh?e&j-oj z4+zxTYtJwQ1&-rvQp_|>PBwpn(Z@?g`!*bwE6kUT0yUC}M&t}A!+H+v0h;`a=fD43 z&;Y+K7oISt!8zl9wA4HsEKJ6JJZ}bgrR4sq-e}TZ0}|=VOpSpHw5$2o-S>i1f*|H&!#eI??0x;npQ}yMniL|)V8-qG%XkE>!dygXSELGLY6Fq7dg}s!gQwGXnS;U1t znFIfOC&5q)b=j(=-aIPfw;K&~IQ?YeIFwgPxN7i~fPPcszN8R^m{8dnKXU&QHat6-ITd~;y zy`jmx{Gwaw37f0Im%W@ZwF8;vO;IyXY~ZXj zJ4l9lnBhOJHdFX1oqc#`FQnSTxB)L>uzn+@VZ%A8bz2usXBXsHC5qtuC%8CySFx@g zP;)=m%4Y#+n!@L;wLQt$7Wvwgq^=P%Kl5UD!h!+7n^we}{U+1V!fRd6%yhpST9+Z% zH0p2odj{2H7jPmyCa31{nSL{&U>o`Ao&bC(6@pJ4^QY_;3SA@;UVWk%DLiYl!U(4P`yVm^%3wG@^pIX8d&%Tk5L<# zO4rg_S}NqIBQSyO8SoGvwcLQMGn>>WdEGv}cG(WcIovcnc1-Cf6GQX^1rOpWTbb(q zOV;rc;_*H$eSg*jhMP1$j1HEnD1^d~@sEOy^POC_x?vZh^O?a#HUV{HdypyH_HuJJ^;w?jM)Uxd7W9o#8cd)|t)c_0}ozyO%TvO!gj? zjYrrpY(D$%adR~z^)|1bm^ja9UAak>Hzcn-p)E4vdsc-D*W%}zi~Ne3{!P~0*i*Of zpLvO$LRp+9I0HL74+EX=gs7L6j2Oz>@8deALlD3Cd8p#I3OcVs#N~<9hN`xJmm&_V zU4w70x~(sheU36l&hH>dqTegv20}cawN%j-MMgOJUFgwt)fOX$=s^h!8NY9 z2<<^VEtD^{Y(V%aWCbW$PDKPPZwin)lcz$23th3Nu`cUwd7Sd9`}r0O@1^UFRZ^Sx zu_Jex-XoQi_lHxh;}1n{qEb>VW5-dfgFEtttUs48!}p~_A}Tg?8NPo+vuj=5V%n@_ z8QoG@kz;)~pE+&cLHmB5JQ(T2P9|5$&He`0k3q&&COg~+5#+UrfIp!b zhw6XX>d?!&*3#W1SJb%g{^i6)-r{&lqSykn=KhKMHFr&@G++_*DjUxY64I@UR=7Jl z2JVGZ{?`JN=~9XB$05T%c=85p4=S(OT+rpxnQr=nCj!OB$IK5R&r|eOMkgCCMmqe_+KhoC)ctA#20dqvf;*QH zQ}bx68*8g}pw3Gwha%{*58v29bs27*C4e@ngD}tw?R5K&^sA3mm4#o{>HUw=!XCfX z&^23YQ#|Mta2tIgH4VSwCN$x4W{xjssF%_cXfd?YTA0yCfk+mX*gl()EzB`Wdq@+6MKnLb z7MDMH2CWzh^tNEhUF|ig1Ip0VN0!x~)KUHGh5~^rJ-(>U%R^FiaAm=cFdvf zFYjGBaYf8s4U2Dmmz?V{ax{cTfvf1m0E5&JeC z&OYo-pp|srOA1BzQ89t+5c^Jd?>WEEK37)Gw7=iJsU@11U@7&k)8>o!w$=l4bj&r_ zhT8q^Vh6kI)q4?6>jg)V8ErZ*ti%wP5<1vu>;PuX~4W*f}*+n++%((Y^ z$<&jz-SJ6t%Q4T!O9~xSP@EhN8TO@nf&Jm578l590@KRn7fN;yQl(+5JiZ*OR?(E% z2-(TeeL*d9+CtZ5wrnv&V;a0C!{U5RS(grxNAsgLR5%b-`H2+8sG)U*!t^nQ@>lDf zkgLr6+LXDle5%(Q)EFevf6&KZy%&y$u;F@eDVD55^>k>sr`0IZ;IsD^n@zLZw-bHG#79c zaOKm`vxc8tU=4>hAG(knONf_?Dl&)`Uec~6gV*O7OL`Wg)Bh!s(%^m%JC7ggB%uk3 z)*=5Qmm69Ye%CoQhOHh`VV%lY;{k9aQD7lYdJqH7SFmsi|gU^YqbHlN&+~9qX zFA=cZV#QSH?Lo)wsN}sGlY1wzxoTwm9I54%n)S<^Q?~w( zGMo;0HgCW9cRBrxIqI{GVt!hQdpyMbxhi1jpkvE)!IGm{D6Eya^X2=or%{@r#&32Y zzNx8_2kOe{uQH}ah=#=VlJCbZddw6cI8(yXcf3hv2Sz)WtzJblVp>bObPpQM*q6^m z)juV{^Mb`$-Eh%o8M}!Ku<)gzHmkq|WLT@v^i}n(t`{A#&2|%gDMv~H_=${P88|*y zfiIhs)?qmJIlzk@3&l=&Jx?c{UKbSqIXMBicIxHSMW<~2%h6ZNmBR7USAp3ri1dBX znz1itAR~SI&AQRIoWN(Fh*jgH)dzj&C0|3aC^~q5X!Bmb*`Uc+d{urELXf{NduG#T zP3`R1+aRU%u%<4b)t9`0qah!du?m-v7|t zbeJkATc5fdnHWRBo`K{($?E6^Z08Kia)0FKS!MX7S+tKW?G?zW!E+13B{qQhrJ)@$ zz5$pLXrnb5ms_%2mCrO9m{#Pqd3(o*Y&iJINq^$1B>T!n-0GVVId?0%0jFVUjyuBw zo0|D-G7n%%ggNT%+`I;@Yaa^XpVTUCqkZXGpub0F!DHRhddw%7{WIyGhE9*f$PIem z{(fwv8RdvSxgN0W%*Tpwj1#;=&L7~~OY)>L(dy|;;JLdm1l>fbzjY_VqE=6r z1rk>ggIX2_5~17P*XnBEin*k&#XuOfh49}dHhVa&>7b0yT@nSWl?dNnrN3DVylFoz zoJsHDDHr|gBD*$)^Cl_kMMp_QxZhKHz8nggn?*fokn)mLA#e?vyglkxFS*SoKE>$w z-SNwxyVH{{Ykq6z*$~oW7(o5paY0N~R4ftwkvmHa6&~X*7SPwKtfA9;MKXX4&61?T+ z<4+=7%%iF^tJ$PSv1V8H6u$UT+O4!TN^mL^-m`MKjZjLXZcmr3;8F>d6U(Y>$o&8t zwf5;G5QlfMy=hs3l5wd;RY=v|7~B6u)x_v)3H5J;|7o_b8CHy2$yBnZ&U5guYP4Km z^ju7?TI}T0M!LAQGANjSq(HL|Q9EO-4@3#~JT1b7ni!LYU=1Ht8YI>T)Q&Tf@xfYW zd8I>3=(4;51&l0g`On$lel~s%VuM|>?>YYF#Q*=R9)JywG?vZac^QnwzaI73P<}+R z*Q(0@x1`0ohkl=+A6F7+S2cQ-B0dGZTvENCsJH66 zcJ2Y@XsWjsY!?2zd;oD@nxqxjP*P@Ki7N`A{(dpT=Zb6`0+k-r>+PfFUU-XH7xBk{ zN`}C3U`u&v0~-N;z7E=RjLU{$vBN(O^6_XZ$3jumTx514?exRjefm$mw)?-e>w-&` zx%o4ZnP;hCAq0N?CQT!(uz5Y8#+?lz)S>94O_H5_@!RC7@q+lcy!9T~6Hi`tOl4U| z_5s9sGa1Nkl%fl}?TI(T9@+^M5Zerh{iI}6UI4EDlz4$$%eHBXs*`ySZsh|l!*zqc zO>XG50D!l0ucndNKMzatDT*Fm6ZOQnENhw$2`|0-<<)t%Md7-A?Lkk;P>LsVi79qSZpP4hV=dM5X?12G0Zt}AHXQ0y$`n;b0glQd4y`=heqIDHGzao9^bP z^Bf;C!30D8kl!A2MUVdDw>YKjAmp#htCgUbS4sbEwyn;-~q~aBMHJ--y zh60EWf#H4dznQ>0ug>AZABE!fJ%d@$mKNKj^?|sMT!BYO;Np`_{$Pj`>uBV50Ul1h z+K^)Bojd8?i7*mSf1*9!4^VSos5K@I4}{W6r=CW&--n+%m6YM`^Mmxx#plr5Kb&7m z7aBGE$Ngpg3xk)uS;G9J&OFI<@lz3kJ#HYAIRxt@X{a)%FCWAN9QHC{B9mUXUIaV5(2B9%dqLzATh3g5Uc3Y<&$VRI|%)Fp-1M9zv3F zU%z=w4!nlD+9>WlDk5!(_Wpp?h>9)~|11)Z9-dOu=w%`%JRh#V7iFCdb=9yQ#_;Y} z@aoSjyZ>B-;AyDlt0dZIP%j*J-QtxaHv{JT5+y851gU?d-W6W<6LmeM>^ZyH|BkXH z$gjG&kCVBNq6!{k8%j&GfsW3Jo1+t;FR526sjSB-cg%b8tw(Y#u`Q8A-jSMVzUWEz zU~fX>`Mq(LM44n8d;cgH4hr~FxNXIFI5FZZNWJc#LOO_E^0DrUEx0_gDR%04S6A=* ziZlRSGrnvOYXj4r`Yl)ML^~7h9?oWuyptjL-^Df|w&%N{t6V zUpmkPv_F$IITcm3vegP>U)!%=--a24(nA}6H)T#=^|B=29C7SzJd2`%v6kmv?mU$@ zK-nf@K^|oRt>@{_xjA4sT4zTwV)g9Am3mAypI%lrFVK4SII#-MFM5KKCu&`O1>!Yl z+THp2;$UX>LGqA|+>c6Q1DTQV4h&6ir@RX`+}bwDds^b9{vNAI=Z1Wgb}furKCRp8 zCkasMY8)qQ*~Vy7COB_6bL3zfQbv;Z&U`|8ZB&e9xWi0mC<=uczf7NiucSwHQJG#gXl?m$gF(I}wT(<c&(P}*pi4l5zS6nPFDX-`S0A4 z)IXZt|FJpvcR*#|OiM>zb5maSdCJOaxqd1CsT`<=m{iLeOl7lgHj)o^GcmJ?b1=AU zXC>N$`=K}|qp_XZ!UY5h;!`B{$QC5X3AUrAH62XnThc_8!B4=$jJNtYj8d0sUzops z&^X9aNrs^Q_HHPk<~j=xQ=`8Qh95q_DVGCHNDWPQP1ID|Tku`uYTu|GbNv-0{g{0t z%YC0685o__H#@g{4Ok=V4N9}rDywU7vBz7HdlgziN;U!a$>Z~RF%o0v3m?631+}2; z`K;`98~no&sAg547C7uid?KW{sLh1bn~!dCpZfZ3cDw(nt#&9ic{lkr(ZLJ8D>oA< z_e1p3>r!fYdhPdPGmX0MHn-IDZ7##PLobn-iN+CCd&+@ExGw(k(qMV?55WG)Ck#t- z{hzbVrn(jeyWuIYTQ(m?X91N*dpZ8UWhT93Kd@KAT$?9n2C{B;axuXw@ z5?3@zq@B!P?3$)nwtcIQ!&Vya>ARAqz@~Su?>~yVVy78^zkHR|iEl|GevZmz1(aG>+^(okwh5cyUa%~MMgXRw*kXSXB$B8MHz zytjC-8@8imQ4vD{qaX1C4TTv=eL*7mBT+0PvGAa0VB2WHKE=olIuGJhIJsuOJ200g z!#9DR!r`- zhiVK&N0n>=)tlbEw}hM{CU|^5W(Ch)?$VJvBV!{6Mip0)2V4DLo$JolWqSKUSBwv& zHv2-1+vx^dZY!x_ubJ|u-!2*X6SrL{Ir87~RB(!CBJvC+bbJax)wX z$KwB*QmwEWuICS_mw66=?E*>nJ{8v+M+qUclH3T-KyVArsFY{fIF_<@#(rwkS@5Ck zXgwqlAV&&66}=%buqmmlcgV%JRL{ot-CE{B?4oooG{&Frq7iwC)CD{vbo_roEl5O<0Y}>0yjc}}gNDYH?@+Z>H6B#n7(Prr1s9Iux z#)hp8oIA$%+J_W#U4Pa<2Wh%(Cz2avxm(^1N7IGW)a0kNO>GD8uq2%`v6I{(lZrv`m2bE&WU$kE+i=k<>!q6eCa>sK&$T8Loa+W-m|Gx=khBX-SD zU?}c)beMY}&~st=UL$tsJyWxh#0+YgcvOfm;Hg8UF(0=sx2F$l zncoay_;x_35!ETHCQfCIJBoRQ;?|~)-l))kxAltyNa-O@J=W0Fm6bLIGj3PC} z8F&k_Zb}zWEQ&HI#OW?&M=z!*1}jWYhw_}7i`Ay=8E_C9zCJ_-HLEg`$PJ!v2GrbY zawF;j*A`mTTj_?S?BeaDf!s2QsGbcj7W+@$s||<{>u3|W3fR5e2v}+BMdyPzVbxt( znVFu`j*|Iruv(vX>y}RTO+jB`P42V@i{RrjQzOSYqOR2i&v@ou$RtB`l#gqu7I~Q$ z1WnSaBene1*=T~30W#^KK~*i3oiqm->f&8i5*xGq7Ueg%`gWv+BASm6vxEO9v+h^XKNhEdTs%WC zv3d#`x>XS_6T`u4FOTE2;#tg~YNfSw_yT5BT6K`xOHD?R#1Cg}5evBLtcr5@_FPRi zw6kpML06F1?QQ2Ahwxbv>OPg})1T$jf&8kZJ=Eg|aU+aO(7iXz-`>H9H+#^kE8FUE zn+x+YeLev?g(%@>&)~&EYD4iDG_ssrZ@!6#hFMgIG=+I*uw$?xz-+CE_DkbC7+T^)>W^HLs>|?ZB z_#MO-Iq?(3^P+f)#)4H@gzC0VM?0uoO05>6F;6(J^vMaFG`g0uMmbaer{n#ma z5i`%P2n%l1ESw-mhTp>Q#fBo9jw!Q*a#S(DUwGR0;uF9n(Y9JJj1d^+!PhvLJ}w!M z!|vJq{$LhdT2+b+GdNngYabG}!a-$rpiG64^0otU`N>~SF2ec#mOEc|5(6vX`fBd- zhga}@*jw^g?{OB`;HhU71)z}r?a1)`kESY>8h^9dYJwxSw%84oF};zfE5SQ*p`Rk5zlp85 z8o!krgFTWF+$q=53)aJpL%37$8&g-qyzH7SNoW65mE6M1GNF$$D*?5dtf9Z|S`{Nb zO}1U|sY;jL*5B5>U7GjGXE}pyBmH}yIqdFAG0!;)d6I7~hAgGfPJ26~ zUyu)|HN zHjJH`+)@!^zr7u?e`9FXm|6OHf%PeVSZ5q@@ZOqWOHn{`rctb~3-^`^1=nQ^5pn!^ zpCdwpg$%K){(fd(|2pCo{0r*bxl64&x*5pvy$%w246T=oKlg)5PN2(<<4ot<7mp(p z)$J0|I}iF~qWqh=*YttVs96=NTB773u)a$YgC{}JaVV6FN-muqZp#Fd0=L z=iyS$?6v)iYd9xa`hi5W47-y%?1{6HI^U*Rbo}$(;JJ3A>*jLtwfQKm_QN!c!B>z? zD5M8}_#yG@n~I!1q-pu)+((X?(;zP=!EF( zfa(2Jfs{s=S?4^vhl#=y>_g?EJQFL|C80jV%8s7+!>gyHHB3f;Ck?87>L=v6^JOOu5%){+aUq=sLAf#yFK2mrBJ;- zDuLV-TtNk%nt}T`;!p=y*zH zMj7p>s%q(J#2eDGzmDxU@_wfGY($lh_`M|9UI)k-pCR{pIUA6JN1Z~YeNaQ&AF68o zLD_rtT{Ng17I^;+w#}tA8}wOEulp!DupA-(hd8$4z-i| z;P-H@amuQTV%btUP{=-PX)SCI3UV2RRgJM5BX^UxecnPcNrhNQ+e-UFcK3=rkA`-;{A078={iTd?3!Skpsooe@`I^xW{1rp^AHv}u z+lOiKpkMz?B6|tEo0|t8JE<@?7GVub?B8UWqbk&1YYPaf6#t2IQUI4iCx|7 zF*w+N%6(WX=X#q7I;^mYbbocITu#t;VJSsru*r(6qS4nmN~P-eEvOG;{p_79HRfMz zbLDEncWWk@mMZBL8(zND?A+cLV60PfR@a88r$jtBly-JC{mtVngTRtl1QgjuedIkR znz5+F{7Y+m{Csxb*v=U|a4bF%C9*m`KusG1IwWS~C5+5i2h>o*G+C>-=bF^2+5Ruh zD!B?1twYq>;2WG-K4-V&*NWhjzVY#}4Qs2jPEatIU#VHK5ZSPi7gwHf4O`YJ1SV?D z_iNMY{4K9NjVT+~o1}W9-D)LUo#wyVECNI+k8$kC`Kdqq&~!Bb#mZ;dIwP}S{*ia+ z{KsJKDTwZ@_N&$MhMK2q=>g*g80b8!4w<-DA;v@O=$iV$fii(+<2B~@On~|TEMVS# zecfYMSkY7KWITt>Oc|DgulF-vQ;@s~8 z=UmO4IL9cE9Qp*aWj;@7G@2p=`rj(l%u|S7fUxY4nw|hq~l-ic2a!ntPi? z+785W#I|`4n3g=#I~`xVJKqV-Pg)4%4Jc}IgXTTy^NmCc(W@@;|NV_yA&t3D#(}T2 z-QADCN6B+s8RIAwy}jNc*RJra;n?~G=!J{Lb6ms~%v`LR$gq}$zVQ7Rp`c^=eSu-S zxlz-5nY;R0GnqRzd=(b5ZE5hi(D>D&QmWvgDeb}g_WVA?z7A{2vQ;YDj6udbBF){f zZo0XyIADe-C4^weo%Cm4fLv;KGJMxqoVwlHDE8Mlm}S1hUj^P-l4ym?f%XL{i78eE z2^bAC`tXjHwY<|$gzWC2F8KKpA+E}Tr&*70TW05fs@`3ZeL;-7x|)%doy_WA zTgz;pq$s_|FL!u?^^x?l$6iBo zi@{d95%BAqwh6A2KH6#6k|_!apIWmqBZS|u3RE_i`=2Dhd8D7b$1bq-=ue@?CnGa^ zdtT1@4<>P)nh<-&&@OGw zvO6ruqtz+|`PrtS7H}wQ_t#pbva|f6n5IURD_`#Ln4#**?-{}^0^pbOZ56J=>mBS8I_nK%04 zjuD=Ta!Iz0G$aOBe`x{}J~`u{qHL@;yYzYC3vDm$WcwxXfR`0r(p2@el5Bs;V8i`m zdB$0G-;e2Rr$z)ieq!i=k|W9;=7U56V{dPucCwK8GgGZ#t} zAbHoMajThH`6xfzq%}=$4rN$`9{oYFygJFYeViKKeahyxb|$5+ea8lNO3ZjWDI?<` z1CIeH@{20N8<%Am;P(2<72xp}PwpY)?q~usUD!X`2qF?tQD>zBWv0Z9z=-st72oy1 zwS9?hKkv4xe^-&Wh7YWIb1cJ-g5bx+Ny1YpM3z`Gr0m8P!Q}v>-|) zh{Vy*J+IT+INBFVZ>Qp584b&_hPSP%N1Z?T~gmciH|GB3h>!%S7vc(U^bHSoAVSoGFsta2!D!z=^HJ)~P4h8gr8{-;gd0lSwh1VlASYv8pev8R~?rfev-b{;eA zIr$%F*`#ROV2<5b%)nuDivdq-{IA6Qm7j0eAN$uo7O#I;l*M-@)Kv^Q)Y$VPbw2go z*uambA#Jf$Z9!oCwp*ecYG61W=(Rus^xq!@;lo$Z08Z%YvjxbA_TKAhm2@u;%rh~a zqS-JM1cdZfI9UCX2h(4=f`-69cBg5`P_}|UB@d&hwPOOF?4E8F#DVm7AmdeN@L9+N z+KY)2^;h9GJZsOM>jgtQCl;M+TX9(~g05cadb1f^OJ44h<(A0X0xSp?RGmZ{NE4aDOZd5$=CoKkwkb4Uu~A8Hmxsow`_1NrqoFYvrM1y%}QEFPQ+cLT#tt zU)Ia6c%4D^-mZMeH8N6zu@^!bVy?m7jTOQ5qAJkL>a9$}JmJNR>uzJr-J-VH`4GiB zKGM&h<1rb79{SxZGmaJ#^-C$OvIDv8zIQ7sjXxSwj|nPWCZ<(aUoAFl4H(cj_`4fp z=VZI7J*z%Ta81rP-|<@=&e|n(F=h*pvl%{153Go9(ka#;!>Q}^2RdbS!8$12(jr7U zoFg;!{n*rft_K9EIQU26ZD9jHEE|98IoksL#2_+?(^%G7IukRfz`uEs_jiAv?Y>Sy z1%-_)IAvnGDH<;GfLX}+ebhoU69C(82z#J}=Cb+C-Dl46xyGf^I?Gvx?LZG^)MRHEIi+%|eZ zPGQY2ppSh~l-wwMWgIj8GM(1H;cxVhB%sh8N`V3r^AGin^HrP6pSt0zh+!>McSoJ&5{*}lAcdbZ)3 zyp8U@lVnm@{;ofT@q4pd(vbF30+Nmlc`PQM1j)(EImifLS$|iaka6AmxC%M2{2W8+D_ud~ zGy>X<_vtv!6-wF2K+g~#KLAoLSB5X{zRvF|{(`{Y)+Y8Q4yn(4=3>YNq4t7@mayxW z4(;-!zw)ef>n8-PNJ`)AXQ>QV&*3#YOxrR{am$URAKPTw>%Eb)*Uc+%#&C#LV&}Z9 z2>y_S$6Tl?74Rq14mJhSavHv`nNEGYXpvYKEfMwEg&_eJ$!me<1BoVf4+Vc@XTB4q zo`0DwwDE?frG(oSzsZOYd2cDq?OnEI7@Ab)$Y6Q>xclSAMnx9AG0~w8IgxUH+Pc0S zFk3n&KOOF~Xl_|fmwHBXI*)nOG|$`0KWtaCRd2D@!c5pVG{bXxlh32Rs(T;xClQn= z%0RMx9tG5)_x)Ih%!l_^&``Nctp>4L=fzzadeutE=cO?e)2gR;4qM((i=+ftxE>|larCG+#RvkCew0ib;BogOPOZs*3mCjA zM+jxNu3iE!@qC%HQQjw7;Rdrsj1?! z#@pH8jL}Kh!%!!$Z{7E&7*4=c2XhiG(|ommx_J=kE9X_J<}n)FvA=1&2!B*yT-VRx zH>{fV?Xn~jd*!2%fzNFL&>*;1K|-<9hZ|d*?b<2N z$YI#%P3B<$qC%CFa90$XPQKaer`ufV(-2|2`2f*F624d^CX9uKhRYW-Ohz7Q+PVxW7 z(pL!vZjYrGd5^e}d{@42RhP$pe4E8kYD&bg|uJw(C&3NraMW z>=n3N9Ch?*HUYoAh5L&~itU0R6206v?(*2?;&6N5YzE2IH`YcAx$WA&n|c9rqop;M zR%AQcn{R#6l}+U7=6qe$J}7pQ;aThV(;dhiNGX66zlAm|HFpl z%2OU#Y3s&5tUm1D)$h$Ip&7vWrd%Ao?XYxPubpxoU@Kx@nhR$XGAGO~F))vP3R&Y1 zP1ePNS4_wN(4w~)BakP_>$GKC-JnUxX%L%-izBZ#bUL430Vw#UV6sXl=NGNT4awO9 z?w5duE!pRWxmUc#zH~VJtSL~=PUaK$z?Vhqed&b*5qH+HLw*IsxYmxvaththyIGfAy zAM*MaDnvzzOf`j1f7rcxu=4ceZ(o;zwp1nd@XEzv1`0a&N1&DYnu?&DZlFLUo%zD# zFLt}QVgg;~T9IF;+cON@&NJ;~hyjJnzUK|tVeRG23%*3khRzSCveA>-KB0|0RcYgo_O#1&&autgWPNaceTUOF|TVIh1POB-rID2;XedzUWkSUDr`4 z_LWgC4E5++91{Wq7zaS(mq8P(gzqCn_ zqzw-h1L!|*<)buOrE-{Pfu&i^KqRy^hpj%;44Uhs$aL??6)%@4+yW1luEw+K6V`DM zmz1#A1+c^8a$#g~m%F@su7*GpW;sV9`Wmg>ic?5>*RugWT6cP#n;FZ6tV z`b{qIP0=YA`W0TCK2zt9M|HtGeGl$>k)rBVJ8$h^o9M2wd~R^lLp{{hWOhG>UE1Ow z>A>uINjF7Z|5(P{&9U(cQofw9#%k50eEykw()xeo!10C$=IJb~ zAuzKpaGTPIYl-uOA@iIdizPM9kxEVMyYLCr%xvvkwHyj z=2lhoA%=S8ax-$kf=erV8CcU%p(HZC*tyrRSb}PLuD-JCv8~#^azLBpS)@~Vk&*}l zLQ!7g!bR`d5#lK)k7DGAwZ@^4^zJ3d-bZ9!9}tWWmD@uB5Dy1`ho$kxGW`y_p&IQM}=IuTZQ zdC2O@3_mg?bN|A&x@6wE4Ew_@ z16F((N-o}QxQ|&!G}OJOvc~>P9pCD|ogGeX3%$K1C7a1s@(sHTzq4NDTbERAF$6_2 zEC8xY0-j@vq!Zn6FGY#QQ6`O?3x%Z6=`SaIDl>KSPEe95i#- z`iZM-^I@Uir@h`dVRNtIEDiJ4G3g=v%5b1Zws*h+)4Z6b1@Phhgy&#v*;YQyG5%KH zk73N@^>5~b`gVxL5kfqcxRu^SQ@iADcN~*Z?`hnjvXvP9(s|=m z(zWfR4($OYuKHdf4)Q4s4Cj8X2flamS6hoNvynSv0EjP8hpnnd#r1zd&`ch++GP)0 zVWLzk;dCS8-c;OZ*!!`;(l6Ard18HujYS!ubCS}l@F`2}8tuty*M?Of%RadKRg7I< zkG1KW{-+V^+_PECEaMxn34uu6B(x>mQOvn6L(7xanef|wi z3fci4%tU)d-?QAPEeBǩ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 G6aNiF=R*@I- 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 literal 59203 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

b4XoIIL4nxE}+uH#wB{?yYp1 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

K7UpUK$>l@ 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 E2O(~oYXATM diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fada095..a80b22c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Wed Jul 06 23:33:16 CEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0..1aa94a4 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,99 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 107acd3..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt deleted file mode 100644 index a29574e..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt +++ /dev/null @@ -1,53 +0,0 @@ -package it.hamy.innertube.models - -import kotlinx.serialization.Serializable - -@Serializable -data class Context( - val client: Client, - val thirdParty: ThirdParty? = null, -) { - @Serializable - data class Client( - val clientName: String, - val clientVersion: String, - val platform: String, - val hl: String = "en", - val visitorData: String = "CgtEUlRINDFjdm1YayjX1pSaBg%3D%3D", - val androidSdkVersion: Int? = null, - val userAgent: String? = null - ) - - @Serializable - data class ThirdParty( - val embedUrl: String, - ) - - companion object { - val DefaultWeb = Context( - client = Client( - clientName = "WEB_REMIX", - clientVersion = "1.20220918", - platform = "DESKTOP", - ) - ) - - val DefaultAndroid = Context( - client = Client( - clientName = "ANDROID_MUSIC", - clientVersion = "5.28.1", - platform = "MOBILE", - androidSdkVersion = 30, - userAgent = "com.google.android.apps.youtube.music/5.28.1 (Linux; U; Android 11) gzip" - ) - ) - - val DefaultAgeRestrictionBypass = Context( - client = Client( - clientName = "TVHTML5_SIMPLY_EMBEDDED_PLAYER", - clientVersion = "2.0", - platform = "TV" - ) - ) - } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt deleted file mode 100644 index 4bd0f7a..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt +++ /dev/null @@ -1,11 +0,0 @@ -package it.hamy.innertube.models - -import kotlinx.serialization.Serializable - -@Serializable -data class MusicTwoRowItemRenderer( - val navigationEndpoint: NavigationEndpoint?, - val thumbnailRenderer: ThumbnailRenderer?, - val title: Runs?, - val subtitle: Runs?, -) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt deleted file mode 100644 index bd651f6..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt +++ /dev/null @@ -1,203 +0,0 @@ -package it.hamy.innertube.models - -import kotlinx.serialization.Serializable - -/** - * watchPlaylistEndpoint: params, playlistId - * watchEndpoint: params, playlistId, videoId, index - * browseEndpoint: params, browseId - * searchEndpoint: params, query - */ -//@Serializable -//data class NavigationEndpoint( -// @JsonNames("watchEndpoint", "watchPlaylistEndpoint", "navigationEndpoint", "browseEndpoint", "searchEndpoint") -// val endpoint: Endpoint -//) { -// @Serializable -// data class Endpoint( -// val params: String?, -// val playlistId: String?, -// val videoId: String?, -// val index: Int?, -// val browseId: String?, -// val query: String?, -// val watchEndpointMusicSupportedConfigs: WatchEndpointMusicSupportedConfigs?, -// val browseEndpointContextSupportedConfigs: BrowseEndpointContextSupportedConfigs?, -// ) { -// @Serializable -// data class WatchEndpointMusicSupportedConfigs( -// val watchEndpointMusicConfig: WatchEndpointMusicConfig -// ) { -// @Serializable -// data class WatchEndpointMusicConfig( -// val musicVideoType: String -// ) -// } -// -// @Serializable -// data class BrowseEndpointContextSupportedConfigs( -// val browseEndpointContextMusicConfig: BrowseEndpointContextMusicConfig -// ) { -// @Serializable -// data class BrowseEndpointContextMusicConfig( -// val pageType: String -// ) -// } -// } -//} - -@Serializable -data class NavigationEndpoint( - val watchEndpoint: Endpoint.Watch?, - val watchPlaylistEndpoint: Endpoint.WatchPlaylist?, - val browseEndpoint: Endpoint.Browse?, - val searchEndpoint: Endpoint.Search?, -) { - val endpoint: Endpoint? - get() = watchEndpoint ?: browseEndpoint ?: watchPlaylistEndpoint ?: searchEndpoint - - @Serializable - sealed class Endpoint { - @Serializable - data class Watch( - val params: String? = null, - val playlistId: String? = null, - val videoId: String? = null, - val index: Int? = null, - val playlistSetVideoId: String? = null, - val watchEndpointMusicSupportedConfigs: WatchEndpointMusicSupportedConfigs? = null, - ) : Endpoint() { - val type: String? - get() = watchEndpointMusicSupportedConfigs - ?.watchEndpointMusicConfig - ?.musicVideoType - - @Serializable - data class WatchEndpointMusicSupportedConfigs( - val watchEndpointMusicConfig: WatchEndpointMusicConfig? - ) { - - @Serializable - data class WatchEndpointMusicConfig( - val musicVideoType: String? - ) - } - } - - @Serializable - data class WatchPlaylist( - val params: String?, - val playlistId: String?, - ) : Endpoint() - - @Serializable - data class Browse( - val params: String? = null, - val browseId: String? = null, - val browseEndpointContextSupportedConfigs: BrowseEndpointContextSupportedConfigs? = null, - ) : Endpoint() { - val type: String? - get() = browseEndpointContextSupportedConfigs - ?.browseEndpointContextMusicConfig - ?.pageType - - @Serializable - data class BrowseEndpointContextSupportedConfigs( - val browseEndpointContextMusicConfig: BrowseEndpointContextMusicConfig - ) { - - @Serializable - data class BrowseEndpointContextMusicConfig( - val pageType: String - ) - } - } - - @Serializable - data class Search( - val params: String?, - val query: String, - ) : Endpoint() - } -} - -//@Serializable(with = NavigationEndpoint.Serializer::class) -//sealed class NavigationEndpoint { -// @Serializable -// data class Watch( -// val watchEndpoint: Data -// ) : NavigationEndpoint() { -// @Serializable -// data class Data( -// val params: String?, -// val playlistId: String, -// val videoId: String, -//// val index: Int? -// val watchEndpointMusicSupportedConfigs: WatchEndpointMusicSupportedConfigs, -// ) -// -// @Serializable -// data class WatchEndpointMusicSupportedConfigs( -// val watchEndpointMusicConfig: WatchEndpointMusicConfig -// ) { -// @Serializable -// data class WatchEndpointMusicConfig( -// val musicVideoType: String -// ) -// } -// } -// -// @Serializable -// data class WatchPlaylist( -// val watchPlaylistEndpoint: Data -// ) : NavigationEndpoint() { -// @Serializable -// data class Data( -// val params: String?, -// val playlistId: String, -// ) -// } -// -// @Serializable -// data class Browse( -// val browseEndpoint: Data -// ) : NavigationEndpoint() { -// @Serializable -// data class Data( -// val params: String?, -// val browseId: String, -// val browseEndpointContextSupportedConfigs: BrowseEndpointContextSupportedConfigs, -// ) -// -// @Serializable -// data class BrowseEndpointContextSupportedConfigs( -// val browseEndpointContextMusicConfig: BrowseEndpointContextMusicConfig -// ) { -// @Serializable -// data class BrowseEndpointContextMusicConfig( -// val pageType: String -// ) -// } -// } -// -// @Serializable -// data class Search( -// val searchEndpoint: Data -// ) : NavigationEndpoint() { -// @Serializable -// data class Data( -// val params: String?, -// val query: String, -// ) -// } -// -// object Serializer : JsonContentPolymorphicSerializer(NavigationEndpoint::class) { -// override fun selectDeserializer(element: JsonElement) = when { -// "watchEndpoint" in element.jsonObject -> Watch.serializer() -// "watchPlaylistEndpoint" in element.jsonObject -> WatchPlaylist.serializer() -// "browseEndpoint" in element.jsonObject -> Browse.serializer() -// "searchEndpoint" in element.jsonObject -> Search.serializer() -// else -> TODO() -// } -// } -//} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt deleted file mode 100644 index c560180..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt +++ /dev/null @@ -1,31 +0,0 @@ -package it.hamy.innertube.models - -import kotlinx.serialization.Serializable - -@Serializable -data class Runs( - val runs: List = listOf() -) { - val text: String - get() = runs.joinToString("") { it.text ?: "" } - - fun splitBySeparator(): List> { - return runs.flatMapIndexed { index, run -> - when { - index == 0 || index == runs.lastIndex -> listOf(index) - run.text == " • " -> listOf(index - 1, index + 1) - else -> emptyList() - } - }.windowed(size = 2, step = 2) { (from, to) -> runs.slice(from..to) }.let { - it.ifEmpty { - listOf(runs) - } - } - } - - @Serializable - data class Run( - val text: String?, - val navigationEndpoint: NavigationEndpoint?, - ) -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt b/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt deleted file mode 100644 index d64619f..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt +++ /dev/null @@ -1,21 +0,0 @@ -package it.hamy.innertube.models - -import kotlinx.serialization.Serializable - -@Serializable -data class Thumbnail( - val url: String, - val height: Int?, - val width: Int? -) { - val isResizable: Boolean - get() = !url.startsWith("https://i.ytimg.com") - - fun size(size: Int): String { - return when { - url.startsWith("https://lh3.googleusercontent.com") -> "$url-w$size-h$size" - url.startsWith("https://yt3.ggpht.com") -> "$url-s$size" - else -> url - } - } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt deleted file mode 100644 index 0bf18b5..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt +++ /dev/null @@ -1,36 +0,0 @@ -package it.hamy.innertube.requests - -import io.ktor.http.Url -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.NavigationEndpoint -import it.hamy.innertube.models.bodies.BrowseBody - -suspend fun Innertube.albumPage(body: BrowseBody): Result? { - return playlistPage(body)?.map { album -> - album.url?.let { Url(it).parameters["list"] }?.let { playlistId -> - playlistPage(BrowseBody(browseId = "VL$playlistId"))?.getOrNull()?.let { playlist -> - album.copy(songsPage = playlist.songsPage) - } - } ?: album - }?.map { album -> - val albumInfo = Innertube.Info( - name = album.title, - endpoint = NavigationEndpoint.Endpoint.Browse( - browseId = body.browseId, - params = body.params - ) - ) - - album.copy( - songsPage = album.songsPage?.copy( - items = album.songsPage.items?.map { song -> - song.copy( - authors = song.authors ?: album.authors, - album = albumInfo, - thumbnail = album.thumbnail - ) - } - ) - ) - } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt b/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt deleted file mode 100644 index ebc50df..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt +++ /dev/null @@ -1,106 +0,0 @@ -package it.hamy.innertube.requests - -import io.ktor.client.call.body -import io.ktor.client.request.post -import io.ktor.client.request.setBody -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.BrowseResponse -import it.hamy.innertube.models.MusicCarouselShelfRenderer -import it.hamy.innertube.models.MusicShelfRenderer -import it.hamy.innertube.models.SectionListRenderer -import it.hamy.innertube.models.bodies.BrowseBody -import it.hamy.innertube.utils.findSectionByTitle -import it.hamy.innertube.utils.from -import it.hamy.innertube.utils.runCatchingNonCancellable - -suspend fun Innertube.artistPage(body: BrowseBody): Result? = - runCatchingNonCancellable { - val response = client.post(browse) { - setBody(body) - mask("contents,header") - }.body() - - fun findSectionByTitle(text: String): SectionListRenderer.Content? { - return response - .contents - ?.singleColumnBrowseResultsRenderer - ?.tabs - ?.get(0) - ?.tabRenderer - ?.content - ?.sectionListRenderer - ?.findSectionByTitle(text) - } - - val songsSection = findSectionByTitle("Songs")?.musicShelfRenderer - val albumsSection = findSectionByTitle("Albums")?.musicCarouselShelfRenderer - val singlesSection = findSectionByTitle("Singles")?.musicCarouselShelfRenderer - - Innertube.ArtistPage( - name = response - .header - ?.musicImmersiveHeaderRenderer - ?.title - ?.text, - description = response - .header - ?.musicImmersiveHeaderRenderer - ?.description - ?.text, - thumbnail = (response - .header - ?.musicImmersiveHeaderRenderer - ?.foregroundThumbnail - ?: response - .header - ?.musicImmersiveHeaderRenderer - ?.thumbnail) - ?.musicThumbnailRenderer - ?.thumbnail - ?.thumbnails - ?.getOrNull(0), - shuffleEndpoint = response - .header - ?.musicImmersiveHeaderRenderer - ?.playButton - ?.buttonRenderer - ?.navigationEndpoint - ?.watchEndpoint, - radioEndpoint = response - .header - ?.musicImmersiveHeaderRenderer - ?.startRadioButton - ?.buttonRenderer - ?.navigationEndpoint - ?.watchEndpoint, - songs = songsSection - ?.contents - ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) - ?.mapNotNull(Innertube.SongItem::from), - songsEndpoint = songsSection - ?.bottomEndpoint - ?.browseEndpoint, - albums = albumsSection - ?.contents - ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) - ?.mapNotNull(Innertube.AlbumItem::from), - albumsEndpoint = albumsSection - ?.header - ?.musicCarouselShelfBasicHeaderRenderer - ?.moreContentButton - ?.buttonRenderer - ?.navigationEndpoint - ?.browseEndpoint, - singles = singlesSection - ?.contents - ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) - ?.mapNotNull(Innertube.AlbumItem::from), - singlesEndpoint = singlesSection - ?.header - ?.musicCarouselShelfBasicHeaderRenderer - ?.moreContentButton - ?.buttonRenderer - ?.navigationEndpoint - ?.browseEndpoint, - ) - } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt deleted file mode 100644 index 3fb8a1c..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt +++ /dev/null @@ -1,76 +0,0 @@ -package it.hamy.innertube.utils - -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.MusicTwoRowItemRenderer - -fun Innertube.AlbumItem.Companion.from(renderer: MusicTwoRowItemRenderer): Innertube.AlbumItem? { - return Innertube.AlbumItem( - info = renderer - .title - ?.runs - ?.firstOrNull() - ?.let(Innertube::Info), - authors = null, - year = renderer - .subtitle - ?.runs - ?.lastOrNull() - ?.text, - thumbnail = renderer - .thumbnailRenderer - ?.musicThumbnailRenderer - ?.thumbnail - ?.thumbnails - ?.firstOrNull() - ).takeIf { it.info?.endpoint?.browseId != null } -} - -fun Innertube.ArtistItem.Companion.from(renderer: MusicTwoRowItemRenderer): Innertube.ArtistItem? { - return Innertube.ArtistItem( - info = renderer - .title - ?.runs - ?.firstOrNull() - ?.let(Innertube::Info), - subscribersCountText = renderer - .subtitle - ?.runs - ?.firstOrNull() - ?.text, - thumbnail = renderer - .thumbnailRenderer - ?.musicThumbnailRenderer - ?.thumbnail - ?.thumbnails - ?.firstOrNull() - ).takeIf { it.info?.endpoint?.browseId != null } -} - -fun Innertube.PlaylistItem.Companion.from(renderer: MusicTwoRowItemRenderer): Innertube.PlaylistItem? { - return Innertube.PlaylistItem( - info = renderer - .title - ?.runs - ?.firstOrNull() - ?.let(Innertube::Info), - channel = renderer - .subtitle - ?.runs - ?.getOrNull(2) - ?.let(Innertube::Info), - songCount = renderer - .subtitle - ?.runs - ?.getOrNull(4) - ?.text - ?.split(' ') - ?.firstOrNull() - ?.toIntOrNull(), - thumbnail = renderer - .thumbnailRenderer - ?.musicThumbnailRenderer - ?.thumbnail - ?.thumbnails - ?.firstOrNull() - ).takeIf { it.info?.endpoint?.browseId != null } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt deleted file mode 100644 index 3d97f88..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt +++ /dev/null @@ -1,35 +0,0 @@ -package it.hamy.innertube.utils - -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.PlaylistPanelVideoRenderer - -fun Innertube.SongItem.Companion.from(renderer: PlaylistPanelVideoRenderer): Innertube.SongItem? { - return Innertube.SongItem( - info = Innertube.Info( - name = renderer - .title - ?.text, - endpoint = renderer - .navigationEndpoint - ?.watchEndpoint - ), - authors = renderer - .longBylineText - ?.splitBySeparator() - ?.getOrNull(0) - ?.map(Innertube::Info), - album = renderer - .longBylineText - ?.splitBySeparator() - ?.getOrNull(1) - ?.getOrNull(0) - ?.let(Innertube::Info), - thumbnail = renderer - .thumbnail - ?.thumbnails - ?.getOrNull(0), - durationText = renderer - .lengthText - ?.text - ).takeIf { it.info?.endpoint?.videoId != null } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt b/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt deleted file mode 100644 index 5fcf861..0000000 --- a/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt +++ /dev/null @@ -1,50 +0,0 @@ -package it.hamy.innertube.utils - -import io.ktor.utils.io.CancellationException -import it.hamy.innertube.Innertube -import it.hamy.innertube.models.SectionListRenderer - -internal fun SectionListRenderer.findSectionByTitle(text: String): SectionListRenderer.Content? { - return contents?.find { content -> - val title = content - .musicCarouselShelfRenderer - ?.header - ?.musicCarouselShelfBasicHeaderRenderer - ?.title - ?: content - .musicShelfRenderer - ?.title - - title - ?.runs - ?.firstOrNull() - ?.text == text - } -} - -internal fun SectionListRenderer.findSectionByStrapline(text: String): SectionListRenderer.Content? { - return contents?.find { content -> - content - .musicCarouselShelfRenderer - ?.header - ?.musicCarouselShelfBasicHeaderRenderer - ?.strapline - ?.runs - ?.firstOrNull() - ?.text == text - } -} - -internal inline fun runCatchingNonCancellable(block: () -> R): Result? { - val result = runCatching(block) - return when (result.exceptionOrNull()) { - is CancellationException -> null - else -> result - } -} - -infix operator fun Innertube.ItemsPage?.plus(other: Innertube.ItemsPage) = - other.copy( - items = (this?.items?.plus(other.items ?: emptyList()) - ?: other.items)?.distinctBy(Innertube.Item::key) - ) diff --git a/innertube/src/test/kotlin/Test.kt b/innertube/src/test/kotlin/Test.kt deleted file mode 100644 index 124168c..0000000 --- a/innertube/src/test/kotlin/Test.kt +++ /dev/null @@ -1,10 +0,0 @@ -import kotlinx.coroutines.runBlocking -import org.junit.Test - -class Test { - @Test - @Throws(Exception::class) - fun test() = runBlocking { - - } -} diff --git a/ktor-client-brotli/build.gradle.kts b/ktor-client-brotli/build.gradle.kts index 564d1d3..0c9b8b9 100644 --- a/ktor-client-brotli/build.gradle.kts +++ b/ktor-client-brotli/build.gradle.kts @@ -1,12 +1,16 @@ plugins { - kotlin("jvm") -} - -sourceSets.all { - java.srcDir("src/$name/kotlin") + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.android.lint) } dependencies { implementation(libs.ktor.client.encoding) implementation(libs.brotli) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) } \ No newline at end of file diff --git a/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt b/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt deleted file mode 100644 index 60716ce..0000000 --- a/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt +++ /dev/null @@ -1,213 +0,0 @@ -package it.hamy.kugou - -import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.engine.okhttp.OkHttp -import io.ktor.client.plugins.BrowserUserAgent -import io.ktor.client.plugins.compression.ContentEncoding -import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.plugins.defaultRequest -import io.ktor.client.request.get -import io.ktor.client.request.parameter -import io.ktor.http.ContentType -import io.ktor.http.encodeURLParameter -import io.ktor.serialization.kotlinx.json.json -import io.ktor.util.decodeBase64String -import it.hamy.kugou.models.DownloadLyricsResponse -import it.hamy.kugou.models.SearchLyricsResponse -import it.hamy.kugou.models.SearchSongResponse -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.json.Json - -object KuGou { - @OptIn(ExperimentalSerializationApi::class) - private val client by lazy { - HttpClient(OkHttp) { - BrowserUserAgent() - - expectSuccess = true - - install(ContentNegotiation) { - val feature = Json { - ignoreUnknownKeys = true - explicitNulls = false - encodeDefaults = true - } - - json(feature) - json(feature, ContentType.Text.Html) - json(feature, ContentType.Text.Plain) - } - - install(ContentEncoding) { - gzip() - deflate() - } - - defaultRequest { - url("https://krcs.kugou.com") - } - } - } - - suspend fun lyrics(artist: String, title: String, duration: Long): Result? { - return runCatching { - val keyword = keyword(artist, title) - val infoByKeyword = searchSong(keyword) - - if (infoByKeyword.isNotEmpty()) { - var tolerance = 0 - - while (tolerance <= 5) { - for (info in infoByKeyword) { - if (info.duration >= duration - tolerance && info.duration <= duration + tolerance) { - searchLyricsByHash(info.hash).firstOrNull()?.let { candidate -> - return@runCatching downloadLyrics(candidate.id, candidate.accessKey).normalize() - } - } - } - - tolerance++ - } - } - - searchLyricsByKeyword(keyword).firstOrNull()?.let { candidate -> - return@runCatching downloadLyrics(candidate.id, candidate.accessKey).normalize() - } - - null - }.recoverIfCancelled() - } - - private suspend fun downloadLyrics(id: Long, accessKey: String): Lyrics { - return client.get("/download") { - parameter("ver", 1) - parameter("man", "yes") - parameter("client", "pc") - parameter("fmt", "lrc") - parameter("id", id) - parameter("accesskey", accessKey) - }.body().content.decodeBase64String().let(::Lyrics) - } - - private suspend fun searchLyricsByHash(hash: String): List { - return client.get("/search") { - parameter("ver", 1) - parameter("man", "yes") - parameter("client", "mobi") - parameter("hash", hash) - }.body().candidates - } - - private suspend fun searchLyricsByKeyword(keyword: String): List { - return client.get("/search") { - parameter("ver", 1) - parameter("man", "yes") - parameter("client", "mobi") - url.encodedParameters.append("keyword", keyword.encodeURLParameter(spaceToPlus = false)) - }.body().candidates - } - - private suspend fun searchSong(keyword: String): List { - return client.get("https://mobileservice.kugou.com/api/v3/search/song") { - parameter("version", 9108) - parameter("plat", 0) - parameter("pagesize", 8) - parameter("showtype", 0) - url.encodedParameters.append("keyword", keyword.encodeURLParameter(spaceToPlus = false)) - }.body().data.info - } - - private fun keyword(artist: String, title: String): String { - val (newTitle, featuring) = title.extract(" (feat. ", ')') - - val newArtist = (if (featuring.isEmpty()) artist else "$artist, $featuring") - .replace(", ", "、") - .replace(" & ", "、") - .replace(".", "") - - return "$newArtist - $newTitle" - } - - private fun String.extract(startDelimiter: String, endDelimiter: Char): Pair { - val startIndex = indexOf(startDelimiter) - - if (startIndex == -1) return this to "" - - val endIndex = indexOf(endDelimiter, startIndex) - - if (endIndex == -1) return this to "" - - return removeRange( - startIndex, - endIndex + 1 - ) to substring(startIndex + startDelimiter.length, endIndex) - } - - @JvmInline - value class Lyrics(val value: String) : CharSequence by value { - val sentences: List> - get() = mutableListOf(0L to "").apply { - for (line in value.trim().lines()) { - try { - val position = line.take(10).run { - get(8).digitToInt() * 10L + - get(7).digitToInt() * 100 + - get(5).digitToInt() * 1000 + - get(4).digitToInt() * 10000 + - get(2).digitToInt() * 60 * 1000 + - get(1).digitToInt() * 600 * 1000 - } - - add(position to line.substring(10)) - } catch (_: Throwable) { - } - } - } - - fun normalize(): Lyrics { - var toDrop = 0 - var maybeToDrop = 0 - - val text = value.replace("\r\n", "\n").trim() - - for (line in text.lineSequence()) { - if (line.startsWith("[ti:") || - line.startsWith("[ar:") || - line.startsWith("[al:") || - line.startsWith("[by:") || - line.startsWith("[hash:") || - line.startsWith("[sign:") || - line.startsWith("[qq:") || - line.startsWith("[total:") || - line.startsWith("[offset:") || - line.startsWith("[id:") || - line.containsAt("]Written by:", 9) || - line.containsAt("]Lyrics by:", 9) || - line.containsAt("]Composed by:", 9) || - line.containsAt("]Producer:", 9) || - line.containsAt("]作曲 : ", 9) || - line.containsAt("]作词 : ", 9) - ) { - toDrop += line.length + 1 + maybeToDrop - maybeToDrop = 0 - } else { - if (maybeToDrop == 0) { - maybeToDrop = line.length + 1 - } else { - maybeToDrop = 0 - break - } - } - } - - return Lyrics(text.drop(toDrop + maybeToDrop).removeHtmlEntities()) - } - - private fun String.containsAt(charSequence: CharSequence, startIndex: Int): Boolean = - regionMatches(startIndex, charSequence, 0, charSequence.length) - - private fun String.removeHtmlEntities(): String = - replace("'", "'") - } -} diff --git a/kugou/src/main/kotlin/it/hamy/kugou/Result.kt b/kugou/src/main/kotlin/it/hamy/kugou/Result.kt deleted file mode 100644 index 65297cb..0000000 --- a/kugou/src/main/kotlin/it/hamy/kugou/Result.kt +++ /dev/null @@ -1,10 +0,0 @@ -package it.hamy.kugou - -import kotlin.coroutines.cancellation.CancellationException - -internal fun Result.recoverIfCancelled(): Result? { - return when (exceptionOrNull()) { - is CancellationException -> null - else -> this - } -} diff --git a/kugou/src/test/kotlin/Test.kt b/kugou/src/test/kotlin/Test.kt deleted file mode 100644 index 47c0114..0000000 --- a/kugou/src/test/kotlin/Test.kt +++ /dev/null @@ -1,11 +0,0 @@ -import kotlinx.coroutines.runBlocking -import org.junit.Test - -class Test { - @Test - @Throws(Exception::class) - fun test() { - runBlocking { - } - } -} diff --git a/providers/common/.gitignore b/providers/common/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/providers/common/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/providers/common/build.gradle.kts b/providers/common/build.gradle.kts new file mode 100644 index 0000000..5572874 --- /dev/null +++ b/providers/common/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.android.lint) +} + +dependencies { + implementation(libs.kotlin.coroutines) + implementation(libs.kotlin.datetime) + + implementation(libs.ktor.http) + implementation(libs.ktor.serialization.json) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} diff --git a/providers/common/src/main/kotlin/it/hamy/extensions/Coroutines.kt b/providers/common/src/main/kotlin/it/hamy/extensions/Coroutines.kt new file mode 100644 index 0000000..9749fce --- /dev/null +++ b/providers/common/src/main/kotlin/it/hamy/extensions/Coroutines.kt @@ -0,0 +1,6 @@ +package it.hamy.extensions + +import kotlinx.coroutines.CancellationException + +inline fun runCatchingCancellable(block: () -> T) = + runCatching(block).takeIf { it.exceptionOrNull() !is CancellationException } diff --git a/providers/common/src/main/kotlin/it/hamy/extensions/Serializers.kt b/providers/common/src/main/kotlin/it/hamy/extensions/Serializers.kt new file mode 100644 index 0000000..8a7e6bd --- /dev/null +++ b/providers/common/src/main/kotlin/it/hamy/extensions/Serializers.kt @@ -0,0 +1,26 @@ +package it.hamy.extensions + +import io.ktor.http.Url +import kotlinx.datetime.LocalDateTime +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +object UrlSerializer : KSerializer { + override val descriptor = PrimitiveSerialDescriptor("Url", PrimitiveKind.STRING) + override fun deserialize(decoder: Decoder) = Url(decoder.decodeString()) + override fun serialize(encoder: Encoder, value: Url) = encoder.encodeString(value.toString()) +} + +typealias SerializableUrl = @Serializable(with = UrlSerializer::class) Url + +object Iso8601DateSerializer : KSerializer { + override val descriptor = PrimitiveSerialDescriptor("Iso8601LocalDateTime", PrimitiveKind.STRING) + override fun deserialize(decoder: Decoder) = LocalDateTime.parse(decoder.decodeString().removeSuffix("Z")) + override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString()) +} + +typealias SerializableIso8601Date = @Serializable(with = Iso8601DateSerializer::class) LocalDateTime diff --git a/providers/github/.gitignore b/providers/github/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/providers/github/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/kugou/build.gradle.kts b/providers/github/build.gradle.kts similarity index 58% rename from kugou/build.gradle.kts rename to providers/github/build.gradle.kts index 709f0a3..5eb4332 100644 --- a/kugou/build.gradle.kts +++ b/providers/github/build.gradle.kts @@ -1,22 +1,24 @@ plugins { - kotlin("jvm") - @Suppress("DSL_SCOPE_VIOLATION") + alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.serialization) -} - -sourceSets.all { - java.srcDir("src/$name/kotlin") + alias(libs.plugins.android.lint) } dependencies { + implementation(projects.providers.common) + implementation(libs.kotlin.coroutines) implementation(libs.ktor.client.core) implementation(libs.ktor.client.cio) implementation(libs.ktor.client.content.negotiation) - implementation(libs.ktor.client.encoding) implementation(libs.ktor.client.serialization) implementation(libs.ktor.serialization.json) - testImplementation(testLibs.junit) + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) } diff --git a/providers/github/src/main/kotlin/it/hamy/github/GitHub.kt b/providers/github/src/main/kotlin/it/hamy/github/GitHub.kt new file mode 100644 index 0000000..c4a28f0 --- /dev/null +++ b/providers/github/src/main/kotlin/it/hamy/github/GitHub.kt @@ -0,0 +1,55 @@ +package it.hamy.github + +import io.ktor.client.HttpClient +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.accept +import io.ktor.client.request.parameter +import io.ktor.http.ContentType +import io.ktor.http.contentType +import io.ktor.serialization.kotlinx.json.json +import kotlinx.serialization.json.Json + +private const val API_VERSION = "2022-11-28" +private const val CONTENT_TYPE = "application" +private const val CONTENT_SUBTYPE = "vnd.github+json" + +object GitHub { + internal val httpClient by lazy { + HttpClient(CIO) { + val contentType = ContentType(CONTENT_TYPE, CONTENT_SUBTYPE) + + install(ContentNegotiation) { + val json = Json { + ignoreUnknownKeys = true + } + + json(json) + json( + json = json, + contentType = contentType + ) + } + + defaultRequest { + url("https://api.github.com") + headers["X-GitHub-Api-Version"] = API_VERSION + + accept(contentType) + contentType(ContentType.Application.Json) + } + + expectSuccess = true + } + } + + fun HttpRequestBuilder.withPagination(size: Int, page: Int) { + require(page > 0) { "GitHub error: invalid page ($page), pagination starts at page 1" } + require(size > 0) { "GitHub error: invalid page size ($size), a page has to have at least a single item" } + + parameter("per_page", size) + parameter("page", page) + } +} diff --git a/providers/github/src/main/kotlin/it/hamy/github/models/Reactions.kt b/providers/github/src/main/kotlin/it/hamy/github/models/Reactions.kt new file mode 100644 index 0000000..384dd4d --- /dev/null +++ b/providers/github/src/main/kotlin/it/hamy/github/models/Reactions.kt @@ -0,0 +1,26 @@ +package it.hamy.github.models + +import it.hamy.extensions.SerializableUrl +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class Reactions( + val url: SerializableUrl, + @SerialName("total_count") + val count: Int, + @SerialName("+1") + val likes: Int, + @SerialName("-1") + val dislikes: Int, + @SerialName("laugh") + val laughs: Int, + val confused: Int, + @SerialName("heart") + val hearts: Int, + @SerialName("hooray") + val hoorays: Int, + val eyes: Int, + @SerialName("rocket") + val rockets: Int +) diff --git a/providers/github/src/main/kotlin/it/hamy/github/models/Release.kt b/providers/github/src/main/kotlin/it/hamy/github/models/Release.kt new file mode 100644 index 0000000..2d941cc --- /dev/null +++ b/providers/github/src/main/kotlin/it/hamy/github/models/Release.kt @@ -0,0 +1,71 @@ +package it.hamy.github.models + +import it.hamy.extensions.SerializableIso8601Date +import it.hamy.extensions.SerializableUrl +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class Release( + val id: Int, + @SerialName("node_id") + val nodeId: String, + val url: SerializableUrl, + @SerialName("html_url") + val frontendUrl: SerializableUrl, + @SerialName("assets_url") + val assetsUrl: SerializableUrl, + @SerialName("tag_name") + val tag: String, + val name: String? = null, + @SerialName("body") + val markdown: String? = null, + val draft: Boolean, + @SerialName("prerelease") + val preRelease: Boolean, + @SerialName("created_at") + val createdAt: SerializableIso8601Date, + @SerialName("published_at") + val publishedAt: SerializableIso8601Date? = null, + val author: SimpleUser, + val assets: List = emptyList(), + @SerialName("body_html") + val html: String? = null, + @SerialName("body_text") + val text: String? = null, + @SerialName("discussion_url") + val discussionUrl: SerializableUrl? = null, + val reactions: Reactions? = null +) { + @Serializable + data class Asset( + val url: SerializableUrl, + @SerialName("browser_download_url") + val downloadUrl: SerializableUrl, + val id: Int, + @SerialName("node_id") + val nodeId: String, + val name: String, + val label: String? = null, + val state: State, + @SerialName("content_type") + val contentType: String, + val size: Long, + @SerialName("download_count") + val downloads: Int, + @SerialName("created_at") + val createdAt: SerializableIso8601Date, + @SerialName("updated_at") + val updatedAt: SerializableIso8601Date, + val uploader: SimpleUser? = null + ) { + @Serializable + enum class State { + @SerialName("uploaded") + Uploaded, + + @SerialName("open") + Open + } + } +} diff --git a/providers/github/src/main/kotlin/it/hamy/github/models/SimpleUser.kt b/providers/github/src/main/kotlin/it/hamy/github/models/SimpleUser.kt new file mode 100644 index 0000000..f3e2851 --- /dev/null +++ b/providers/github/src/main/kotlin/it/hamy/github/models/SimpleUser.kt @@ -0,0 +1,43 @@ +package it.hamy.github.models + +import it.hamy.extensions.SerializableUrl +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SimpleUser( + val name: String? = null, + val email: String? = null, + val login: String, + val id: Int, + @SerialName("node_id") + val nodeId: String, + @SerialName("avatar_url") + val avatarUrl: SerializableUrl, + @SerialName("gravatar_id") + val gravatarId: String? = null, + val url: SerializableUrl, + @SerialName("html_url") + val frontendUrl: SerializableUrl, + @SerialName("followers_url") + val followersUrl: SerializableUrl, + @SerialName("following_url") + val followingUrl: SerializableUrl, + @SerialName("gists_url") + val gistsUrl: SerializableUrl, + @SerialName("starred_url") + val starredUrl: SerializableUrl, + @SerialName("subscriptions_url") + val subscriptionsUrl: SerializableUrl, + @SerialName("organizations_url") + val organizationsUrl: SerializableUrl, + @SerialName("repos_url") + val reposUrl: SerializableUrl, + @SerialName("events_url") + val eventsUrl: SerializableUrl, + @SerialName("received_events_url") + val receivedEventsUrl: SerializableUrl, + val type: String, + @SerialName("site_admin") + val admin: Boolean +) diff --git a/providers/github/src/main/kotlin/it/hamy/github/requests/Releases.kt b/providers/github/src/main/kotlin/it/hamy/github/requests/Releases.kt new file mode 100644 index 0000000..32b0752 --- /dev/null +++ b/providers/github/src/main/kotlin/it/hamy/github/requests/Releases.kt @@ -0,0 +1,18 @@ +package it.hamy.github.requests + +import io.ktor.client.call.body +import io.ktor.client.request.get +import it.hamy.extensions.runCatchingCancellable +import it.hamy.github.GitHub +import it.hamy.github.models.Release + +suspend fun GitHub.releases( + owner: String, + repo: String, + page: Int = 1, + pageSize: Int = 30 +) = runCatchingCancellable { + httpClient.get("repos/$owner/$repo/releases") { + withPagination(page = page, size = pageSize) + }.body>() +} diff --git a/kugou/.gitignore b/providers/innertube/.gitignore similarity index 100% rename from kugou/.gitignore rename to providers/innertube/.gitignore diff --git a/providers/innertube/build.gradle.kts b/providers/innertube/build.gradle.kts new file mode 100644 index 0000000..291d3a8 --- /dev/null +++ b/providers/innertube/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.android.lint) +} + +dependencies { + implementation(projects.ktorClientBrotli) + implementation(projects.providers.common) + + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.okhttp) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.client.encoding) + implementation(libs.ktor.client.serialization) + implementation(libs.ktor.serialization.json) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) + + compilerOptions { + freeCompilerArgs.addAll("-Xcontext-receivers") + } +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt similarity index 64% rename from innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt index 4390723..96e08b5 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/Innertube.kt @@ -2,16 +2,18 @@ package it.hamy.innertube import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp -import io.ktor.client.plugins.BrowserUserAgent import io.ktor.client.plugins.compression.ContentEncoding import io.ktor.client.plugins.compression.brotli import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.defaultRequest import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.header +import io.ktor.client.request.headers import io.ktor.http.ContentType -import io.ktor.http.HttpHeaders +import io.ktor.http.contentType +import io.ktor.http.parameters import io.ktor.serialization.kotlinx.json.json +import it.hamy.innertube.models.MusicNavigationButtonRenderer import it.hamy.innertube.models.NavigationEndpoint import it.hamy.innertube.models.Runs import it.hamy.innertube.models.Thumbnail @@ -21,34 +23,40 @@ import kotlinx.serialization.json.Json import java.net.InetSocketAddress import java.net.Proxy - object Innertube { val client = HttpClient(OkHttp) { - BrowserUserAgent() - expectSuccess = true install(ContentNegotiation) { @OptIn(ExperimentalSerializationApi::class) - json(Json { - ignoreUnknownKeys = true - explicitNulls = false - encodeDefaults = true - }) + json( + Json { + ignoreUnknownKeys = true + explicitNulls = false + encodeDefaults = true + } + ) } install(ContentEncoding) { - brotli() + brotli(1.0f) + gzip(0.9f) + deflate(0.8f) } defaultRequest { - url(scheme = "https", host ="music.youtube.com") { - headers.append(HttpHeaders.ContentType, ContentType.Application.Json.toString()) - headers.append("X-Goog-Api-Key", "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8") - parameters.append("prettyPrint", "false") + url(scheme = "https", host = "music.youtube.com") { + contentType(ContentType.Application.Json) + headers { + append("X-Goog-Api-Key", API_KEY) + append("x-origin", ORIGIN) + } + parameters { + append("prettyPrint", "false") + append("key", API_KEY) + } } } - ProxyPreferences.preference?.let { engine { proxy = Proxy( @@ -60,19 +68,23 @@ object Innertube { ) } } - } - internal const val browse = "/youtubei/v1/browse" - internal const val next = "/youtubei/v1/next" - internal const val player = "/youtubei/v1/player" - internal const val queue = "/youtubei/v1/music/get_queue" - internal const val search = "/youtubei/v1/search" - internal const val searchSuggestions = "/youtubei/v1/music/get_search_suggestions" + private const val API_KEY = "AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30" + private const val ORIGIN = "https://music.youtube.com" - internal const val musicResponsiveListItemRendererMask = "musicResponsiveListItemRenderer(flexColumns,fixedColumns,thumbnail,navigationEndpoint)" - internal const val musicTwoRowItemRendererMask = "musicTwoRowItemRenderer(thumbnailRenderer,title,subtitle,navigationEndpoint)" - const val playlistPanelVideoRendererMask = "playlistPanelVideoRenderer(title,navigationEndpoint,longBylineText,shortBylineText,thumbnail,lengthText)" + internal const val BROWSE = "/youtubei/v1/browse" + internal const val NEXT = "/youtubei/v1/next" + internal const val PLAYER = "/youtubei/v1/player" + internal const val QUEUE = "/youtubei/v1/music/get_queue" + internal const val SEARCH = "/youtubei/v1/search" + internal const val SEARCH_SUGGESTIONS = "/youtubei/v1/music/get_search_suggestions" + internal const val MUSIC_RESPONSIVE_LIST_ITEM_RENDERER_MASK = + "musicResponsiveListItemRenderer(flexColumns,fixedColumns,thumbnail,navigationEndpoint)" + internal const val MUSIC_TWO_ROW_ITEM_RENDERER_MASK = + "musicTwoRowItemRenderer(thumbnailRenderer,title,subtitle,navigationEndpoint)" + internal const val PLAYLIST_PANEL_VIDEO_RENDERER_MASK = + "playlistPanelVideoRenderer(title,navigationEndpoint,longBylineText,shortBylineText,thumbnail,lengthText)" internal fun HttpRequestBuilder.mask(value: String = "*") = header("X-Goog-FieldMask", value) @@ -91,12 +103,11 @@ object Innertube { @JvmInline value class SearchFilter(val value: String) { companion object { - val Song = SearchFilter("EgWKAQIIAWoKEAkQBRAKEAMQBA%3D%3D") - val Video = SearchFilter("EgWKAQIQAWoKEAkQChAFEAMQBA%3D%3D") - val Album = SearchFilter("EgWKAQIYAWoKEAkQChAFEAMQBA%3D%3D") - val Artist = SearchFilter("EgWKAQIgAWoKEAkQChAFEAMQBA%3D%3D") - val CommunityPlaylist = SearchFilter("EgeKAQQoAEABagoQAxAEEAoQCRAF") - val FeaturedPlaylist = SearchFilter("EgeKAQQoADgBagwQDhAKEAMQBRAJEAQ%3D") + val Song = SearchFilter("EgWKAQIIAWoOEAMQBBAJEAoQBRAQEBU%3D") + val Video = SearchFilter("EgWKAQIQAWoOEAMQBBAJEAoQBRAQEBU%3D") + val Album = SearchFilter("EgWKAQIYAWoOEAMQBBAJEAoQBRAQEBU%3D") + val Artist = SearchFilter("EgWKAQIgAWoOEAMQBBAJEAoQBRAQEBU%3D") + val CommunityPlaylist = SearchFilter("EgeKAQQoAEABag4QAxAEEAkQChAFEBAQFQ%3D%3D") } } @@ -133,13 +144,6 @@ object Innertube { ?.watchEndpointMusicConfig ?.musicVideoType == "MUSIC_VIDEO_TYPE_OMV" - val isUserGeneratedContent: Boolean - get() = info - ?.endpoint - ?.watchEndpointMusicSupportedConfigs - ?.watchEndpointMusicConfig - ?.musicVideoType == "MUSIC_VIDEO_TYPE_UGC" - companion object } @@ -186,17 +190,19 @@ object Innertube { val albums: List?, val albumsEndpoint: NavigationEndpoint.Endpoint.Browse?, val singles: List?, - val singlesEndpoint: NavigationEndpoint.Endpoint.Browse?, + val singlesEndpoint: NavigationEndpoint.Endpoint.Browse? ) data class PlaylistOrAlbumPage( val title: String?, + val description: String?, val authors: List>?, val year: String?, val thumbnail: Thumbnail?, val url: String?, val songsPage: ItemsPage?, - val otherVersions: List? + val otherVersions: List?, + val otherInfo: String? ) data class NextPage( @@ -210,9 +216,34 @@ object Innertube { val songs: List? = null, val playlists: List? = null, val albums: List? = null, - val artists: List? = null, + val artists: List? = null ) + data class DiscoverPage( + val newReleaseAlbums: List, + val moods: List + ) + + data class Mood( + val title: String, + val items: List + ) { + data class Item( + val title: String, + val stripeColor: Long, + val endpoint: NavigationEndpoint.Endpoint.Browse + ) + } + + @Suppress("ReturnCount") + fun MusicNavigationButtonRenderer.toMood(): Mood.Item? { + return Mood.Item( + title = buttonText.runs.firstOrNull()?.text ?: return null, + stripeColor = solid?.leftStripeColor ?: return null, + endpoint = clickCommand.browseEndpoint ?: return null + ) + } + data class ItemsPage( val items: List?, val continuation: String? diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt similarity index 88% rename from innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt index 12253d8..4f0fa3a 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/BrowseResponse.kt @@ -13,21 +13,23 @@ data class BrowseResponse( @Serializable data class Contents( val singleColumnBrowseResultsRenderer: Tabs?, - val sectionListRenderer: SectionListRenderer?, + val sectionListRenderer: SectionListRenderer? ) @Serializable - data class Header @OptIn(ExperimentalSerializationApi::class) constructor( + @OptIn(ExperimentalSerializationApi::class) + data class Header( @JsonNames("musicVisualHeaderRenderer") val musicImmersiveHeaderRenderer: MusicImmersiveHeaderRenderer?, - val musicDetailHeaderRenderer: MusicDetailHeaderRenderer?, + val musicDetailHeaderRenderer: MusicDetailHeaderRenderer? ) { @Serializable data class MusicDetailHeaderRenderer( val title: Runs?, + val description: Runs?, val subtitle: Runs?, val secondSubtitle: Runs?, - val thumbnail: ThumbnailRenderer?, + val thumbnail: ThumbnailRenderer? ) @Serializable diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/ButtonRenderer.kt diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt new file mode 100644 index 0000000..48f9b2a --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Context.kt @@ -0,0 +1,85 @@ +package it.hamy.innertube.models + +import io.ktor.client.request.headers +import io.ktor.http.HttpMessageBuilder +import io.ktor.http.userAgent +import kotlinx.serialization.Serializable +import java.util.Locale + +@Serializable +data class Context( + val client: Client, + val thirdParty: ThirdParty? = null +) { + @Serializable + data class Client( + val clientName: String, + val clientVersion: String, + val platform: String, + val hl: String = "en", + val gl: String = "US", + val visitorData: String = DEFAULT_VISITOR_DATA, + val androidSdkVersion: Int? = null, + val userAgent: String? = null, + val referer: String? = null + ) + + @Serializable + data class ThirdParty( + val embedUrl: String + ) + + context(HttpMessageBuilder) + fun apply() { + client.userAgent?.let { userAgent(it) } + + headers { + client.referer?.let { append("Referer", it) } + append("X-Youtube-Bootstrap-Logged-In", "false") + append("X-YouTube-Client-Name", client.clientName) + append("X-YouTube-Client-Version", client.clientVersion) + } + } + + companion object { + const val DEFAULT_VISITOR_DATA = "CgtsZG1ySnZiQWtSbyiMjuGSBg%3D%3D" + + val DefaultWeb get() = DefaultWebNoLang.let { + it.copy( + client = it.client.copy( + hl = Locale.getDefault().toLanguageTag(), + gl = Locale.getDefault().country + ) + ) + } + + val DefaultWebNoLang = Context( + client = Client( + clientName = "WEB_REMIX", + clientVersion = "1.20220606.03.00", + platform = "DESKTOP", + userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36", + referer = "https://music.youtube.com/" + ) + ) + + val DefaultAndroid = Context( + client = Client( + clientName = "ANDROID_MUSIC", + clientVersion = "5.28.1", + platform = "MOBILE", + androidSdkVersion = 30, + userAgent = "com.google.android.apps.youtube.music/5.28.1 (Linux; U; Android 11) gzip" + ) + ) + + val DefaultAgeRestrictionBypass = Context( + client = Client( + clientName = "TVHTML5_SIMPLY_EMBEDDED_PLAYER", + clientVersion = "2.0", + platform = "TV", + userAgent = "Mozilla/5.0 (PlayStation 4 5.55) AppleWebKit/601.2 (KHTML, like Gecko)" + ) + ) + } +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/Continuation.kt diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt similarity index 84% rename from innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt index 44987ca..9b12725 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/ContinuationResponse.kt @@ -7,12 +7,12 @@ import kotlinx.serialization.json.JsonNames @OptIn(ExperimentalSerializationApi::class) @Serializable data class ContinuationResponse( - val continuationContents: ContinuationContents?, + val continuationContents: ContinuationContents? ) { @Serializable data class ContinuationContents( @JsonNames("musicPlaylistShelfContinuation") val musicShelfContinuation: MusicShelfRenderer?, - val playlistPanelContinuation: NextResponse.MusicQueueRenderer.Content.PlaylistPanelRenderer?, + val playlistPanelContinuation: NextResponse.MusicQueueRenderer.Content.PlaylistPanelRenderer? ) } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt similarity index 71% rename from innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt index 73f2c57..00f4aa1 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/GetQueueResponse.kt @@ -1,10 +1,12 @@ package it.hamy.innertube.models +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class GetQueueResponse( - val queueDatas: List?, + @SerialName("queueDatas") + val queueData: List? ) { @Serializable data class QueueData( diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt similarity index 55% rename from innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt index 6535435..770f6db 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/GridRenderer.kt @@ -5,9 +5,20 @@ import kotlinx.serialization.Serializable @Serializable data class GridRenderer( val items: List?, + val header: Header? ) { @Serializable data class Item( val musicTwoRowItemRenderer: MusicTwoRowItemRenderer? ) + + @Serializable + data class Header( + val gridHeaderRenderer: GridHeaderRenderer? + ) + + @Serializable + data class GridHeaderRenderer( + val title: Runs? + ) } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt similarity index 86% rename from innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt index 9bdf8a2..e6093a5 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicCarouselShelfRenderer.kt @@ -5,12 +5,13 @@ import kotlinx.serialization.Serializable @Serializable data class MusicCarouselShelfRenderer( val header: Header?, - val contents: List?, + val contents: List? ) { @Serializable data class Content( val musicTwoRowItemRenderer: MusicTwoRowItemRenderer?, val musicResponsiveListItemRenderer: MusicResponsiveListItemRenderer?, + val musicNavigationButtonRenderer: MusicNavigationButtonRenderer? = null ) @Serializable @@ -23,7 +24,7 @@ data class MusicCarouselShelfRenderer( data class MusicCarouselShelfBasicHeaderRenderer( val moreContentButton: MoreContentButton?, val title: Runs?, - val strapline: Runs?, + val strapline: Runs? ) { @Serializable data class MoreContentButton( diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicNavigationButtonRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicNavigationButtonRenderer.kt new file mode 100644 index 0000000..464d59c --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicNavigationButtonRenderer.kt @@ -0,0 +1,26 @@ +package it.hamy.innertube.models + +import kotlinx.serialization.Serializable + +@Serializable +data class MusicNavigationButtonRenderer( + val buttonText: Runs, + val solid: Solid?, + val iconStyle: IconStyle?, + val clickCommand: NavigationEndpoint +) { + @Serializable + data class Solid( + val leftStripeColor: Long + ) + + @Serializable + data class IconStyle( + val icon: Icon + ) + + @Serializable + data class Icon( + val iconType: String + ) +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt similarity index 93% rename from innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt index 9c83330..c1ed026 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicResponsiveListItemRenderer.kt @@ -10,7 +10,7 @@ data class MusicResponsiveListItemRenderer( val fixedColumns: List?, val flexColumns: List, val thumbnail: ThumbnailRenderer?, - val navigationEndpoint: NavigationEndpoint?, + val navigationEndpoint: NavigationEndpoint? ) { @Serializable data class FlexColumn( diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt similarity index 79% rename from innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt index 1b60e81..7917999 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicShelfRenderer.kt @@ -11,24 +11,23 @@ data class MusicShelfRenderer( ) { @Serializable data class Content( - val musicResponsiveListItemRenderer: MusicResponsiveListItemRenderer?, + val musicResponsiveListItemRenderer: MusicResponsiveListItemRenderer? ) { val runs: Pair, List>> - get() = (musicResponsiveListItemRenderer + get() = musicResponsiveListItemRenderer ?.flexColumns ?.firstOrNull() ?.musicResponsiveListItemFlexColumnRenderer ?.text ?.runs - ?: emptyList()) to - (musicResponsiveListItemRenderer + .orEmpty() to + musicResponsiveListItemRenderer ?.flexColumns - ?.getOrNull(1) + ?.let { it.getOrNull(1) ?: it.lastOrNull() } ?.musicResponsiveListItemFlexColumnRenderer ?.text ?.splitBySeparator() - ?: emptyList() - ) + .orEmpty() val thumbnail: Thumbnail? get() = musicResponsiveListItemRenderer diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt new file mode 100644 index 0000000..b5d8c67 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/MusicTwoRowItemRenderer.kt @@ -0,0 +1,26 @@ +package it.hamy.innertube.models + +import kotlinx.serialization.Serializable + +@Serializable +data class MusicTwoRowItemRenderer( + val navigationEndpoint: NavigationEndpoint?, + val thumbnailRenderer: ThumbnailRenderer?, + val title: Runs?, + val subtitle: Runs?, + val thumbnailOverlay: ThumbnailOverlay? +) { + val isPlaylist: Boolean + get() = navigationEndpoint?.browseEndpoint?.browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig?.pageType == "MUSIC_PAGE_TYPE_PLAYLIST" + + val isAlbum: Boolean + get() = navigationEndpoint?.browseEndpoint?.browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig?.pageType == "MUSIC_PAGE_TYPE_ALBUM" || + navigationEndpoint?.browseEndpoint?.browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig?.pageType == "MUSIC_PAGE_TYPE_AUDIOBOOK" + + val isArtist: Boolean + get() = navigationEndpoint?.browseEndpoint?.browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig?.pageType == "MUSIC_PAGE_TYPE_ARTIST" +} diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt new file mode 100644 index 0000000..9dcf69e --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/NavigationEndpoint.kt @@ -0,0 +1,77 @@ +package it.hamy.innertube.models + +import kotlinx.serialization.Serializable + +/** + * watchPlaylistEndpoint: params, playlistId + * watchEndpoint: params, playlistId, videoId, index + * browseEndpoint: params, browseId + * searchEndpoint: params, query + */ + +@Serializable +data class NavigationEndpoint( + val watchEndpoint: Endpoint.Watch?, + val watchPlaylistEndpoint: Endpoint.WatchPlaylist?, + val browseEndpoint: Endpoint.Browse?, + val searchEndpoint: Endpoint.Search? +) { + val endpoint get() = watchEndpoint ?: browseEndpoint ?: watchPlaylistEndpoint ?: searchEndpoint + + @Serializable + sealed class Endpoint { + @Serializable + data class Watch( + val params: String? = null, + val playlistId: String? = null, + val videoId: String? = null, + val index: Int? = null, + val playlistSetVideoId: String? = null, + val watchEndpointMusicSupportedConfigs: WatchEndpointMusicSupportedConfigs? = null + ) : Endpoint() { + @Serializable + data class WatchEndpointMusicSupportedConfigs( + val watchEndpointMusicConfig: WatchEndpointMusicConfig? + ) { + @Serializable + data class WatchEndpointMusicConfig( + val musicVideoType: String? + ) + } + } + + @Serializable + data class WatchPlaylist( + val params: String?, + val playlistId: String? + ) : Endpoint() + + @Serializable + data class Browse( + val params: String? = null, + val browseId: String? = null, + val browseEndpointContextSupportedConfigs: BrowseEndpointContextSupportedConfigs? = null + ) : Endpoint() { + val type: String? + get() = browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig + ?.pageType + + @Serializable + data class BrowseEndpointContextSupportedConfigs( + val browseEndpointContextMusicConfig: BrowseEndpointContextMusicConfig + ) { + @Serializable + data class BrowseEndpointContextMusicConfig( + val pageType: String + ) + } + } + + @Serializable + data class Search( + val params: String?, + val query: String + ) : Endpoint() + } +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt similarity index 97% rename from innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt index 42a1176..40e94cc 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/NextResponse.kt @@ -21,12 +21,12 @@ data class NextResponse( @Serializable data class PlaylistPanelRenderer( val contents: List?, - val continuations: List?, + val continuations: List? ) { @Serializable data class Content( val playlistPanelVideoRenderer: PlaylistPanelVideoRenderer?, - val automixPreviewVideoRenderer: AutomixPreviewVideoRenderer?, + val automixPreviewVideoRenderer: AutomixPreviewVideoRenderer? ) { @Serializable diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt similarity index 95% rename from innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt index d63046c..c4302b3 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlayerResponse.kt @@ -7,7 +7,7 @@ data class PlayerResponse( val playabilityStatus: PlayabilityStatus?, val playerConfig: PlayerConfig?, val streamingData: StreamingData?, - val videoDetails: VideoDetails?, + val videoDetails: VideoDetails? ) { @Serializable data class PlayabilityStatus( @@ -47,7 +47,7 @@ data class PlayerResponse( val lastModified: Long?, val loudnessDb: Double?, val audioSampleRate: Int?, - val url: String?, + val url: String? ) } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt similarity index 97% rename from innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt index 1cffa18..a90654b 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/PlaylistPanelVideoRenderer.kt @@ -9,5 +9,5 @@ data class PlaylistPanelVideoRenderer( val shortBylineText: Runs?, val lengthText: Runs?, val navigationEndpoint: NavigationEndpoint?, - val thumbnail: ThumbnailRenderer.MusicThumbnailRenderer.Thumbnail?, + val thumbnail: ThumbnailRenderer.MusicThumbnailRenderer.Thumbnail? ) diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt new file mode 100644 index 0000000..27abfb2 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Runs.kt @@ -0,0 +1,52 @@ +package it.hamy.innertube.models + +import kotlinx.serialization.Serializable + +@Serializable +data class Runs( + val runs: List = listOf() +) { + companion object { + const val SEPARATOR = " • " + } + + val text: String + get() = runs.joinToString("") { it.text.orEmpty() } + + fun splitBySeparator(): List> { + return runs.flatMapIndexed { index, run -> + when { + index == 0 || index == runs.lastIndex -> listOf(index) + run.text == SEPARATOR -> listOf(index - 1, index + 1) + else -> emptyList() + } + }.windowed(size = 2, step = 2) { (from, to) -> runs.slice(from..to) }.let { + it.ifEmpty { + listOf(runs) + } + } + } + + @Serializable + data class Run( + val text: String?, + val navigationEndpoint: NavigationEndpoint? + ) +} + +fun List.splitBySeparator(): List> { + val res = mutableListOf>() + var tmp = mutableListOf() + forEach { run -> + if (run.text == " • ") { + res.add(tmp) + tmp = mutableListOf() + } else { + tmp.add(run) + } + } + res.add(tmp) + return res +} + +fun List.oddElements() = filterIndexed { index, _ -> index % 2 == 0 } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt similarity index 88% rename from innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt index 87f50ed..4778904 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchResponse.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.Serializable @Serializable data class SearchResponse( - val contents: Contents?, + val contents: Contents? ) { @Serializable data class Contents( diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt similarity index 91% rename from innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt index d8f978d..10c0916 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SearchSuggestionsResponse.kt @@ -20,7 +20,7 @@ data class SearchSuggestionsResponse( ) { @Serializable data class SearchSuggestionRenderer( - val navigationEndpoint: NavigationEndpoint?, + val navigationEndpoint: NavigationEndpoint? ) } } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt similarity index 94% rename from innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt index 62fb3f3..f34cc4a 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/SectionListRenderer.kt @@ -17,13 +17,12 @@ data class SectionListRenderer( @JsonNames("musicPlaylistShelfRenderer") val musicShelfRenderer: MusicShelfRenderer?, val gridRenderer: GridRenderer?, - val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer?, + val musicDescriptionShelfRenderer: MusicDescriptionShelfRenderer? ) { @Serializable data class MusicDescriptionShelfRenderer( - val description: Runs?, + val description: Runs? ) } - } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt similarity index 81% rename from innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt index c8e504b..2f724c4 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Tabs.kt @@ -14,11 +14,11 @@ data class Tabs( data class TabRenderer( val content: Content?, val title: String?, - val tabIdentifier: String?, + val tabIdentifier: String? ) { @Serializable data class Content( - val sectionListRenderer: SectionListRenderer?, + val sectionListRenderer: SectionListRenderer? ) } } diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt new file mode 100644 index 0000000..6681c06 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/Thumbnail.kt @@ -0,0 +1,16 @@ +package it.hamy.innertube.models + +import kotlinx.serialization.Serializable + +@Serializable +data class Thumbnail( + val url: String, + val height: Int?, + val width: Int? +) { + fun size(size: Int) = when { + url.startsWith("https://lh3.googleusercontent.com") -> "$url-w$size-h$size" + url.startsWith("https://yt3.ggpht.com") -> "$url-s$size" + else -> url + } +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt similarity index 53% rename from innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt index 6730118..2148e09 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/ThumbnailRenderer.kt @@ -20,3 +20,23 @@ data class ThumbnailRenderer( ) } } + +@Serializable +data class ThumbnailOverlay( + val musicItemThumbnailOverlayRenderer: MusicItemThumbnailOverlayRenderer +) { + @Serializable + data class MusicItemThumbnailOverlayRenderer( + val content: Content + ) { + @Serializable + data class Content( + val musicPlayButtonRenderer: MusicPlayButtonRenderer + ) { + @Serializable + data class MusicPlayButtonRenderer( + val playNavigationEndpoint: NavigationEndpoint? + ) + } + } +} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/BrowseBody.kt diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt similarity index 87% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt index 4786cff..38b8ad4 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/ContinuationBody.kt @@ -6,5 +6,5 @@ import kotlinx.serialization.Serializable @Serializable data class ContinuationBody( val context: Context = Context.DefaultWeb, - val continuation: String, + val continuation: String ) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/NextBody.kt diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/PlayerBody.kt diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt similarity index 87% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt index 86de51f..ed97817 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/QueueBody.kt @@ -7,5 +7,5 @@ import kotlinx.serialization.Serializable data class QueueBody( val context: Context = Context.DefaultWeb, val videoIds: List? = null, - val playlistId: String? = null, + val playlistId: String? = null ) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchBody.kt diff --git a/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/models/bodies/SearchSuggestionsBody.kt diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt new file mode 100644 index 0000000..8c97ea8 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/AlbumPage.kt @@ -0,0 +1,34 @@ +package it.hamy.innertube.requests + +import io.ktor.http.Url +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.NavigationEndpoint +import it.hamy.innertube.models.bodies.BrowseBody + +suspend fun Innertube.albumPage(body: BrowseBody) = playlistPage(body)?.map { album -> + album.url?.let { Url(it).parameters["list"] }?.let { playlistId -> + playlistPage(BrowseBody(browseId = "VL$playlistId"))?.getOrNull()?.let { playlist -> + album.copy(songsPage = playlist.songsPage) + } + } ?: album +}?.map { album -> + val albumInfo = Innertube.Info( + name = album.title, + endpoint = NavigationEndpoint.Endpoint.Browse( + browseId = body.browseId, + params = body.params + ) + ) + + album.copy( + songsPage = album.songsPage?.copy( + items = album.songsPage.items?.map { song -> + song.copy( + authors = song.authors ?: album.authors, + album = albumInfo, + thumbnail = album.thumbnail + ) + } + ) + ) +} diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt new file mode 100644 index 0000000..153aa9b --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ArtistPage.kt @@ -0,0 +1,127 @@ +package it.hamy.innertube.requests + +import io.ktor.client.call.body +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.Context +import it.hamy.innertube.models.MusicCarouselShelfRenderer +import it.hamy.innertube.models.MusicShelfRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.utils.findSectionByTitle +import it.hamy.innertube.utils.from +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.async +import kotlinx.coroutines.currentCoroutineContext + +suspend fun Innertube.artistPage(body: BrowseBody) = runCatchingCancellable { + val ctx = currentCoroutineContext() + val response = client.post(BROWSE) { + setBody(body) + mask("contents,header") + }.body() + + val responseNoLang by lazy { + CoroutineScope(ctx).async(start = CoroutineStart.LAZY) { + client.post(BROWSE) { + setBody(body.copy(context = Context.DefaultWebNoLang)) + mask("contents,header") + }.body() + } + } + + suspend fun findSectionByTitle(text: String) = response + .contents + ?.singleColumnBrowseResultsRenderer + ?.tabs + ?.get(0) + ?.tabRenderer + ?.content + ?.sectionListRenderer + ?.findSectionByTitle(text) ?: responseNoLang.await() + .contents + ?.singleColumnBrowseResultsRenderer + ?.tabs + ?.get(0) + ?.tabRenderer + ?.content + ?.sectionListRenderer + ?.findSectionByTitle(text) + + val songsSection = findSectionByTitle("Songs")?.musicShelfRenderer + val albumsSection = findSectionByTitle("Albums")?.musicCarouselShelfRenderer + val singlesSection = findSectionByTitle("Singles")?.musicCarouselShelfRenderer + + Innertube.ArtistPage( + name = response + .header + ?.musicImmersiveHeaderRenderer + ?.title + ?.text, + description = response + .header + ?.musicImmersiveHeaderRenderer + ?.description + ?.text, + thumbnail = ( + response + .header + ?.musicImmersiveHeaderRenderer + ?.foregroundThumbnail + ?: response + .header + ?.musicImmersiveHeaderRenderer + ?.thumbnail + ) + ?.musicThumbnailRenderer + ?.thumbnail + ?.thumbnails + ?.getOrNull(0), + shuffleEndpoint = response + .header + ?.musicImmersiveHeaderRenderer + ?.playButton + ?.buttonRenderer + ?.navigationEndpoint + ?.watchEndpoint, + radioEndpoint = response + .header + ?.musicImmersiveHeaderRenderer + ?.startRadioButton + ?.buttonRenderer + ?.navigationEndpoint + ?.watchEndpoint, + songs = songsSection + ?.contents + ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) + ?.mapNotNull(Innertube.SongItem::from), + songsEndpoint = songsSection + ?.bottomEndpoint + ?.browseEndpoint, + albums = albumsSection + ?.contents + ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) + ?.mapNotNull(Innertube.AlbumItem::from), + albumsEndpoint = albumsSection + ?.header + ?.musicCarouselShelfBasicHeaderRenderer + ?.moreContentButton + ?.buttonRenderer + ?.navigationEndpoint + ?.browseEndpoint, + singles = singlesSection + ?.contents + ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) + ?.mapNotNull(Innertube.AlbumItem::from), + singlesEndpoint = singlesSection + ?.header + ?.musicCarouselShelfBasicHeaderRenderer + ?.moreContentButton + ?.buttonRenderer + ?.navigationEndpoint + ?.browseEndpoint + ) +} diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Browse.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Browse.kt new file mode 100644 index 0000000..37d4ca7 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Browse.kt @@ -0,0 +1,68 @@ +package it.hamy.innertube.requests + +import io.ktor.client.call.body +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.MusicTwoRowItemRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.utils.from + +suspend fun Innertube.browse(body: BrowseBody) = runCatchingCancellable { + val response = client.post(BROWSE) { + setBody(body) + }.body() + + BrowseResult( + title = response.header?.musicImmersiveHeaderRenderer?.title?.text ?: response.header + ?.musicDetailHeaderRenderer?.title?.text, + items = response.contents?.singleColumnBrowseResultsRenderer?.tabs?.firstOrNull() + ?.tabRenderer?.content?.sectionListRenderer?.contents?.mapNotNull { content -> + when { + content.gridRenderer != null -> BrowseResult.Item( + title = content.gridRenderer.header?.gridHeaderRenderer?.title?.runs + ?.firstOrNull()?.text ?: return@mapNotNull null, + items = content.gridRenderer.items?.mapNotNull { it.musicTwoRowItemRenderer?.toItem() } + .orEmpty() + ) + + content.musicCarouselShelfRenderer != null -> BrowseResult.Item( + title = content + .musicCarouselShelfRenderer + .header + ?.musicCarouselShelfBasicHeaderRenderer + ?.title + ?.runs + ?.firstOrNull() + ?.text ?: return@mapNotNull null, + items = content + .musicCarouselShelfRenderer + .contents + ?.mapNotNull { it.musicTwoRowItemRenderer?.toItem() } + .orEmpty() + ) + + else -> null + } + }.orEmpty() + ) +} + +data class BrowseResult( + val title: String?, + val items: List +) { + data class Item( + val title: String, + val items: List + ) +} + +fun MusicTwoRowItemRenderer.toItem() = when { + isAlbum -> Innertube.AlbumItem.from(this) + isPlaylist -> Innertube.PlaylistItem.from(this) + isArtist -> Innertube.ArtistItem.from(this) + else -> null +} diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/DiscoverPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/DiscoverPage.kt new file mode 100644 index 0000000..7407d5a --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/DiscoverPage.kt @@ -0,0 +1,51 @@ +package it.hamy.innertube.requests + +import io.ktor.client.call.body +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.MusicTwoRowItemRenderer +import it.hamy.innertube.models.bodies.BrowseBody +import it.hamy.innertube.models.oddElements +import it.hamy.innertube.models.splitBySeparator + +suspend fun Innertube.discoverPage() = runCatchingCancellable { + val response = client.post(BROWSE) { + setBody(BrowseBody(browseId = "FEmusic_explore")) + mask("contents") + }.body() + + Innertube.DiscoverPage( + newReleaseAlbums = response.contents?.singleColumnBrowseResultsRenderer?.tabs + ?.firstOrNull()?.tabRenderer?.content?.sectionListRenderer?.contents?.find { + it.musicCarouselShelfRenderer?.header?.musicCarouselShelfBasicHeaderRenderer + ?.moreContentButton?.buttonRenderer?.navigationEndpoint?.browseEndpoint + ?.browseId == "FEmusic_new_releases_albums" + }?.musicCarouselShelfRenderer?.contents?.mapNotNull { it.musicTwoRowItemRenderer?.toNewReleaseAlbumPage() } + .orEmpty(), + moods = response.contents?.singleColumnBrowseResultsRenderer?.tabs?.firstOrNull() + ?.tabRenderer?.content?.sectionListRenderer?.contents?.find { + it.musicCarouselShelfRenderer?.header?.musicCarouselShelfBasicHeaderRenderer + ?.moreContentButton?.buttonRenderer?.navigationEndpoint?.browseEndpoint + ?.browseId == "FEmusic_moods_and_genres" + }?.musicCarouselShelfRenderer?.contents?.mapNotNull { it.musicNavigationButtonRenderer?.toMood() } + .orEmpty() + ) +} + +fun MusicTwoRowItemRenderer.toNewReleaseAlbumPage() = Innertube.AlbumItem( + info = Innertube.Info( + name = title?.text, + endpoint = navigationEndpoint?.browseEndpoint + ), + authors = subtitle?.runs?.splitBySeparator()?.getOrNull(1)?.oddElements()?.map { + Innertube.Info( + name = it.text, + endpoint = it.navigationEndpoint?.browseEndpoint + ) + }, + year = subtitle?.runs?.lastOrNull()?.text, + thumbnail = thumbnailRenderer?.musicThumbnailRenderer?.thumbnail?.thumbnails?.firstOrNull() +) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt similarity index 60% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt index 1eebafd..c8276ce 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/ItemsPage.kt @@ -3,6 +3,7 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.BrowseResponse import it.hamy.innertube.models.ContinuationResponse @@ -12,16 +13,14 @@ import it.hamy.innertube.models.MusicShelfRenderer import it.hamy.innertube.models.MusicTwoRowItemRenderer import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.models.bodies.ContinuationBody -import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.itemsPage( body: BrowseBody, fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T? = { null }, - fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null }, -) = runCatchingNonCancellable { - val response = client.post(browse) { + fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null } +) = runCatchingCancellable { + val response = client.post(BROWSE) { setBody(body) -// mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),gridRenderer(continuations,items.$musicTwoRowItemRendererMask))") }.body() val sectionListRendererContent = response @@ -41,18 +40,17 @@ suspend fun Innertube.itemsPage( gridRenderer = sectionListRendererContent ?.gridRenderer, fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer, - fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer, + fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer ) } suspend fun Innertube.itemsPage( body: ContinuationBody, fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T? = { null }, - fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null }, -) = runCatchingNonCancellable { - val response = client.post(browse) { + fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? = { null } +) = runCatchingCancellable { + val response = client.post(BROWSE) { setBody(body) -// mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),gridRenderer(continuations,items.$musicTwoRowItemRendererMask))") }.body() itemsPageFromMusicShelRendererOrGridRenderer( @@ -61,7 +59,7 @@ suspend fun Innertube.itemsPage( ?.musicShelfContinuation, gridRenderer = null, fromMusicResponsiveListItemRenderer = fromMusicResponsiveListItemRenderer, - fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer, + fromMusicTwoRowItemRenderer = fromMusicTwoRowItemRenderer ) } @@ -69,29 +67,27 @@ private fun itemsPageFromMusicShelRendererOrGridRenderer( musicShelfRenderer: MusicShelfRenderer?, gridRenderer: GridRenderer?, fromMusicResponsiveListItemRenderer: (MusicResponsiveListItemRenderer) -> T?, - fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T?, -): Innertube.ItemsPage? { - return if (musicShelfRenderer != null) { - Innertube.ItemsPage( - continuation = musicShelfRenderer - .continuations - ?.firstOrNull() - ?.nextContinuationData - ?.continuation, - items = musicShelfRenderer - .contents - ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) - ?.mapNotNull(fromMusicResponsiveListItemRenderer) - ) - } else if (gridRenderer != null) { - Innertube.ItemsPage( - continuation = null, - items = gridRenderer - .items - ?.mapNotNull(GridRenderer.Item::musicTwoRowItemRenderer) - ?.mapNotNull(fromMusicTwoRowItemRenderer) - ) - } else { - null - } + fromMusicTwoRowItemRenderer: (MusicTwoRowItemRenderer) -> T? +) = when { + musicShelfRenderer != null -> Innertube.ItemsPage( + continuation = musicShelfRenderer + .continuations + ?.firstOrNull() + ?.nextContinuationData + ?.continuation, + items = musicShelfRenderer + .contents + ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) + ?.mapNotNull(fromMusicResponsiveListItemRenderer) + ) + + gridRenderer != null -> Innertube.ItemsPage( + continuation = null, + items = gridRenderer + .items + ?.mapNotNull(GridRenderer.Item::musicTwoRowItemRenderer) + ?.mapNotNull(fromMusicTwoRowItemRenderer) + ) + + else -> null } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt similarity index 80% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt index 6b23f96..760e141 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Lyrics.kt @@ -3,16 +3,17 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.BrowseResponse import it.hamy.innertube.models.NextResponse import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.models.bodies.NextBody -import it.hamy.innertube.utils.runCatchingNonCancellable -suspend fun Innertube.lyrics(body: NextBody): Result? = runCatchingNonCancellable { - val nextResponse = client.post(next) { +suspend fun Innertube.lyrics(body: NextBody) = runCatchingCancellable { + val nextResponse = client.post(NEXT) { setBody(body) + @Suppress("all") mask("contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer(endpoint,title)") }.body() @@ -27,9 +28,9 @@ suspend fun Innertube.lyrics(body: NextBody): Result? = runCatchingNonC ?.endpoint ?.browseEndpoint ?.browseId - ?: return@runCatchingNonCancellable null + ?: return@runCatchingCancellable null - val response = client.post(browse) { + val response = client.post(BROWSE) { setBody(BrowseBody(browseId = browseId)) mask("contents.sectionListRenderer.contents.musicDescriptionShelfRenderer.description") }.body() diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt similarity index 75% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt index 8da1525..443831c 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/NextPage.kt @@ -3,21 +3,20 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.ContinuationResponse import it.hamy.innertube.models.NextResponse import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.models.bodies.NextBody import it.hamy.innertube.utils.from -import it.hamy.innertube.utils.runCatchingNonCancellable - - suspend fun Innertube.nextPage(body: NextBody): Result? = - runCatchingNonCancellable { - val response = client.post(next) { + runCatchingCancellable { + val response = client.post(NEXT) { setBody(body) - mask("contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer.content.musicQueueRenderer.content.playlistPanelRenderer(continuations,contents(automixPreviewVideoRenderer,$playlistPanelVideoRendererMask))") + @Suppress("all") + mask("contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer.content.musicQueueRenderer.content.playlistPanelRenderer(continuations,contents(automixPreviewVideoRenderer,$PLAYLIST_PANEL_VIDEO_RENDERER_MASK))") }.body() val tabs = response @@ -45,14 +44,12 @@ suspend fun Innertube.nextPage(body: NextBody): Result? = ?.navigationEndpoint ?.watchPlaylistEndpoint - if (endpoint != null) { - return nextPage( - body.copy( - playlistId = endpoint.playlistId, - params = endpoint.params - ) + if (endpoint != null) return nextPage( + body.copy( + playlistId = endpoint.playlistId, + params = endpoint.params ) - } + ) } Innertube.NextPage( @@ -64,10 +61,11 @@ suspend fun Innertube.nextPage(body: NextBody): Result? = ) } -suspend fun Innertube.nextPage(body: ContinuationBody) = runCatchingNonCancellable { - val response = client.post(next) { +suspend fun Innertube.nextPage(body: ContinuationBody) = runCatchingCancellable { + val response = client.post(NEXT) { setBody(body) - mask("continuationContents.playlistPanelContinuation(continuations,contents.$playlistPanelVideoRendererMask)") + @Suppress("all") + mask("continuationContents.playlistPanelContinuation(continuations,contents.$PLAYLIST_PANEL_VIDEO_RENDERER_MASK)") }.body() response @@ -80,8 +78,10 @@ private fun NextResponse.MusicQueueRenderer.Content.PlaylistPanelRenderer?.toSon Innertube.ItemsPage( items = this ?.contents - ?.mapNotNull(NextResponse.MusicQueueRenderer.Content.PlaylistPanelRenderer.Content::playlistPanelVideoRenderer) - ?.mapNotNull(Innertube.SongItem::from), + ?.mapNotNull( + NextResponse.MusicQueueRenderer.Content.PlaylistPanelRenderer.Content + ::playlistPanelVideoRenderer + )?.mapNotNull(Innertube.SongItem::from), continuation = this ?.continuations ?.firstOrNull() diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt similarity index 83% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt index 23155ff..cd6c272 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Player.kt @@ -6,15 +6,15 @@ import io.ktor.client.request.post import io.ktor.client.request.setBody import io.ktor.http.ContentType import io.ktor.http.contentType +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.Context import it.hamy.innertube.models.PlayerResponse import it.hamy.innertube.models.bodies.PlayerBody -import it.hamy.innertube.utils.runCatchingNonCancellable import kotlinx.serialization.Serializable -suspend fun Innertube.player(body: PlayerBody) = runCatchingNonCancellable { - val response = client.post(player) { +suspend fun Innertube.player(body: PlayerBody) = runCatchingCancellable { + val response = client.post(PLAYER) { setBody(body) mask("playabilityStatus.status,playerConfig.audioConfig,streamingData.adaptiveFormats,videoDetails.videoId") }.body() @@ -33,24 +33,24 @@ suspend fun Innertube.player(body: PlayerBody) = runCatchingNonCancellable { val audioStreams: List ) - val safePlayerResponse = client.post(player) { + val safePlayerResponse = client.post(PLAYER) { setBody( body.copy( context = Context.DefaultAgeRestrictionBypass.copy( thirdParty = Context.ThirdParty( embedUrl = "https://www.youtube.com/watch?v=${body.videoId}" ) - ), + ) ) ) mask("playabilityStatus.status,playerConfig.audioConfig,streamingData.adaptiveFormats,videoDetails.videoId") }.body() if (safePlayerResponse.playabilityStatus?.status != "OK") { - return@runCatchingNonCancellable response + return@runCatchingCancellable response } - val audioStreams = client.get("https://watchapi.whatever.social/streams/${body.videoId}") { + val audioStreams = client.get("https://pipedapi.adminforge.de/streams/${body.videoId}") { contentType(ContentType.Application.Json) }.body().audioStreams diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt similarity index 68% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt index 43e25d5..cdee773 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/PlaylistPage.kt @@ -1,8 +1,10 @@ package it.hamy.innertube.requests import io.ktor.client.call.body +import io.ktor.client.request.parameter import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.BrowseResponse import it.hamy.innertube.models.ContinuationResponse @@ -11,12 +13,11 @@ import it.hamy.innertube.models.MusicShelfRenderer import it.hamy.innertube.models.bodies.BrowseBody import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.utils.from -import it.hamy.innertube.utils.runCatchingNonCancellable -suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable { - val response = client.post(browse) { +suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingCancellable { + val response = client.post(BROWSE) { setBody(body) - mask("contents.singleColumnBrowseResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents(musicPlaylistShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask),musicCarouselShelfRenderer.contents.$musicTwoRowItemRendererMask),header.musicDetailHeaderRenderer(title,subtitle,thumbnail),microformat") + body.context.apply() }.body() val musicDetailHeaderRenderer = response @@ -45,6 +46,9 @@ suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable title = musicDetailHeaderRenderer ?.title ?.text, + description = musicDetailHeaderRenderer + ?.description + ?.text, thumbnail = musicDetailHeaderRenderer ?.thumbnail ?.musicThumbnailRenderer @@ -71,14 +75,20 @@ suspend fun Innertube.playlistPage(body: BrowseBody) = runCatchingNonCancellable otherVersions = musicCarouselShelfRenderer ?.contents ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) - ?.mapNotNull(Innertube.AlbumItem::from) + ?.mapNotNull(Innertube.AlbumItem::from), + otherInfo = musicDetailHeaderRenderer + ?.secondSubtitle + ?.text ) } -suspend fun Innertube.playlistPage(body: ContinuationBody) = runCatchingNonCancellable { - val response = client.post(browse) { +suspend fun Innertube.playlistPage(body: ContinuationBody) = runCatchingCancellable { + val response = client.post(BROWSE) { setBody(body) - mask("continuationContents.musicPlaylistShelfContinuation(continuations,contents.$musicResponsiveListItemRendererMask)") + parameter("continuation", body.continuation) + parameter("ctoken", body.continuation) + parameter("type", "next") + body.context.apply() }.body() response @@ -87,15 +97,14 @@ suspend fun Innertube.playlistPage(body: ContinuationBody) = runCatchingNonCance ?.toSongsPage() } -private fun MusicShelfRenderer?.toSongsPage() = - Innertube.ItemsPage( - items = this - ?.contents - ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) - ?.mapNotNull(Innertube.SongItem::from), - continuation = this - ?.continuations - ?.firstOrNull() - ?.nextContinuationData - ?.continuation - ) +private fun MusicShelfRenderer?.toSongsPage() = Innertube.ItemsPage( + items = this + ?.contents + ?.mapNotNull(MusicShelfRenderer.Content::musicResponsiveListItemRenderer) + ?.mapNotNull(Innertube.SongItem::from), + continuation = this + ?.continuations + ?.firstOrNull() + ?.nextContinuationData + ?.continuation +) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt similarity index 73% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt index d35365a..98e8352 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/Queue.kt @@ -3,20 +3,20 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.GetQueueResponse import it.hamy.innertube.models.bodies.QueueBody import it.hamy.innertube.utils.from -import it.hamy.innertube.utils.runCatchingNonCancellable -suspend fun Innertube.queue(body: QueueBody) = runCatchingNonCancellable { - val response = client.post(queue) { +suspend fun Innertube.queue(body: QueueBody) = runCatchingCancellable { + val response = client.post(QUEUE) { setBody(body) - mask("queueDatas.content.$playlistPanelVideoRendererMask") + mask("queueDatas.content.$PLAYLIST_PANEL_VIDEO_RENDERER_MASK") }.body() response - .queueDatas + .queueData ?.mapNotNull { queueData -> queueData .content diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt similarity index 68% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt index 14c6fda..80222dc 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/RelatedPage.kt @@ -3,8 +3,10 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.BrowseResponse +import it.hamy.innertube.models.Context import it.hamy.innertube.models.MusicCarouselShelfRenderer import it.hamy.innertube.models.NextResponse import it.hamy.innertube.models.bodies.BrowseBody @@ -12,12 +14,14 @@ import it.hamy.innertube.models.bodies.NextBody import it.hamy.innertube.utils.findSectionByStrapline import it.hamy.innertube.utils.findSectionByTitle import it.hamy.innertube.utils.from -import it.hamy.innertube.utils.runCatchingNonCancellable -suspend fun Innertube.relatedPage(body: NextBody) = runCatchingNonCancellable { - val nextResponse = client.post(next) { - setBody(body) - mask("contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer(endpoint,title)") +suspend fun Innertube.relatedPage(body: NextBody) = runCatchingCancellable { + val nextResponse = client.post(NEXT) { + setBody(body.copy(context = Context.DefaultWebNoLang)) + @Suppress("all") + mask( + "contents.singleColumnMusicWatchNextResultsRenderer.tabbedRenderer.watchNextTabbedResultsRenderer.tabs.tabRenderer(endpoint,title)" + ) }.body() val browseId = nextResponse @@ -31,11 +35,19 @@ suspend fun Innertube.relatedPage(body: NextBody) = runCatchingNonCancellable { ?.endpoint ?.browseEndpoint ?.browseId - ?: return@runCatchingNonCancellable null + ?: return@runCatchingCancellable null - val response = client.post(browse) { - setBody(BrowseBody(browseId = browseId)) - mask("contents.sectionListRenderer.contents.musicCarouselShelfRenderer(header.musicCarouselShelfBasicHeaderRenderer(title,strapline),contents($musicResponsiveListItemRendererMask,$musicTwoRowItemRendererMask))") + val response = client.post(BROWSE) { + setBody( + BrowseBody( + browseId = browseId, + context = Context.DefaultWebNoLang + ) + ) + @Suppress("all") + mask( + "contents.sectionListRenderer.contents.musicCarouselShelfRenderer(header.musicCarouselShelfBasicHeaderRenderer(title,strapline),contents($MUSIC_RESPONSIVE_LIST_ITEM_RENDERER_MASK,$MUSIC_TWO_ROW_ITEM_RENDERER_MASK))" + ) }.body() val sectionListRenderer = response @@ -67,6 +79,6 @@ suspend fun Innertube.relatedPage(body: NextBody) = runCatchingNonCancellable { ?.musicCarouselShelfRenderer ?.contents ?.mapNotNull(MusicCarouselShelfRenderer.Content::musicTwoRowItemRenderer) - ?.mapNotNull(Innertube.ArtistItem::from), + ?.mapNotNull(Innertube.ArtistItem::from) ) } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt similarity index 70% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt index f9db35b..750a3f4 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchPage.kt @@ -3,21 +3,22 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.ContinuationResponse import it.hamy.innertube.models.MusicShelfRenderer import it.hamy.innertube.models.SearchResponse import it.hamy.innertube.models.bodies.ContinuationBody import it.hamy.innertube.models.bodies.SearchBody -import it.hamy.innertube.utils.runCatchingNonCancellable suspend fun Innertube.searchPage( body: SearchBody, fromMusicShelfRendererContent: (MusicShelfRenderer.Content) -> T? -) = runCatchingNonCancellable { - val response = client.post(search) { +) = runCatchingCancellable { + val response = client.post(SEARCH) { setBody(body) - mask("contents.tabbedSearchResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents.musicShelfRenderer(continuations,contents.$musicResponsiveListItemRendererMask)") + @Suppress("all") + mask("contents.tabbedSearchResultsRenderer.tabs.tabRenderer.content.sectionListRenderer.contents.musicShelfRenderer(continuations,contents.$MUSIC_RESPONSIVE_LIST_ITEM_RENDERER_MASK)") }.body() response @@ -37,10 +38,11 @@ suspend fun Innertube.searchPage( suspend fun Innertube.searchPage( body: ContinuationBody, fromMusicShelfRendererContent: (MusicShelfRenderer.Content) -> T? -) = runCatchingNonCancellable { - val response = client.post(search) { +) = runCatchingCancellable { + val response = client.post(SEARCH) { setBody(body) - mask("continuationContents.musicShelfContinuation(continuations,contents.$musicResponsiveListItemRendererMask)") + @Suppress("all") + mask("continuationContents.musicShelfContinuation(continuations,contents.$MUSIC_RESPONSIVE_LIST_ITEM_RENDERER_MASK)") }.body() response @@ -49,14 +51,15 @@ suspend fun Innertube.searchPage( ?.toItemsPage(fromMusicShelfRendererContent) } -private fun MusicShelfRenderer?.toItemsPage(mapper: (MusicShelfRenderer.Content) -> T?) = - Innertube.ItemsPage( - items = this - ?.contents - ?.mapNotNull(mapper), - continuation = this - ?.continuations - ?.firstOrNull() - ?.nextContinuationData - ?.continuation - ) +private fun MusicShelfRenderer?.toItemsPage( + mapper: (MusicShelfRenderer.Content) -> T? +) = Innertube.ItemsPage( + items = this + ?.contents + ?.mapNotNull(mapper), + continuation = this + ?.continuations + ?.firstOrNull() + ?.nextContinuationData + ?.continuation +) diff --git a/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt similarity index 84% rename from innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt index 6cd1610..a24d671 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/requests/SearchSuggestions.kt @@ -3,14 +3,15 @@ package it.hamy.innertube.requests import io.ktor.client.call.body import io.ktor.client.request.post import io.ktor.client.request.setBody +import it.hamy.extensions.runCatchingCancellable import it.hamy.innertube.Innertube import it.hamy.innertube.models.SearchSuggestionsResponse import it.hamy.innertube.models.bodies.SearchSuggestionsBody -import it.hamy.innertube.utils.runCatchingNonCancellable -suspend fun Innertube.searchSuggestions(body: SearchSuggestionsBody) = runCatchingNonCancellable { - val response = client.post(searchSuggestions) { +suspend fun Innertube.searchSuggestions(body: SearchSuggestionsBody) = runCatchingCancellable { + val response = client.post(SEARCH_SUGGESTIONS) { setBody(body) + @Suppress("all") mask("contents.searchSuggestionsSectionRenderer.contents.searchSuggestionRenderer.navigationEndpoint.searchEndpoint.query") }.body() diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt similarity index 71% rename from innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt index 8eebdeb..4414da2 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicResponsiveListItemRenderer.kt @@ -3,10 +3,9 @@ package it.hamy.innertube.utils import it.hamy.innertube.Innertube import it.hamy.innertube.models.MusicResponsiveListItemRenderer import it.hamy.innertube.models.NavigationEndpoint -import it.hamy.innertube.models.Runs -fun Innertube.SongItem.Companion.from(renderer: MusicResponsiveListItemRenderer): Innertube.SongItem? { - return Innertube.SongItem( +fun Innertube.SongItem.Companion.from(renderer: MusicResponsiveListItemRenderer) = + Innertube.SongItem( info = renderer .flexColumns .getOrNull(0) @@ -14,14 +13,20 @@ fun Innertube.SongItem.Companion.from(renderer: MusicResponsiveListItemRenderer) ?.text ?.runs ?.getOrNull(0) - ?.let(Innertube::Info), + ?.let { + if (it.navigationEndpoint?.endpoint is NavigationEndpoint.Endpoint.Watch) Innertube.Info( + name = it.text, + endpoint = it.navigationEndpoint.endpoint as NavigationEndpoint.Endpoint.Watch + ) else null + }, authors = renderer .flexColumns .getOrNull(1) ?.musicResponsiveListItemFlexColumnRenderer ?.text ?.runs - ?.map>(Innertube::Info) + ?.map { Innertube.Info(name = it.text, endpoint = it.navigationEndpoint?.endpoint) } + ?.filterIsInstance>() ?.takeIf(List::isNotEmpty), durationText = renderer .fixedColumns @@ -46,4 +51,3 @@ fun Innertube.SongItem.Companion.from(renderer: MusicResponsiveListItemRenderer) ?.thumbnails ?.firstOrNull() ).takeIf { it.info?.endpoint?.videoId != null } -} diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt similarity index 78% rename from innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt index fe507b8..5a934d6 100644 --- a/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicShelfRendererContent.kt @@ -34,33 +34,39 @@ fun Innertube.SongItem.Companion.from(content: MusicShelfRenderer.Content): Inne album = album, durationText = otherRuns .lastOrNull() - ?.firstOrNull()?.text, - thumbnail = content - .thumbnail + ?.firstOrNull() + ?.text + ?.takeIf { ':' in it } + ?: otherRuns + .getOrNull(otherRuns.size - 2) + ?.firstOrNull() + ?.text, + thumbnail = content.thumbnail ).takeIf { it.info?.endpoint?.videoId != null } } fun Innertube.VideoItem.Companion.from(content: MusicShelfRenderer.Content): Innertube.VideoItem? { val (mainRuns, otherRuns) = content.runs - return Innertube.VideoItem( - info = mainRuns - .firstOrNull() - ?.let(Innertube::Info), - authors = otherRuns - .getOrNull(otherRuns.lastIndex - 2) - ?.map(Innertube::Info), - viewsText = otherRuns - .getOrNull(otherRuns.lastIndex - 1) - ?.firstOrNull() - ?.text, - durationText = otherRuns - .getOrNull(otherRuns.lastIndex) - ?.firstOrNull() - ?.text, - thumbnail = content - .thumbnail - ).takeIf { it.info?.endpoint?.videoId != null } + return runCatching { + Innertube.VideoItem( + info = mainRuns + .firstOrNull() + ?.let(Innertube::Info), + authors = otherRuns + .getOrNull(otherRuns.lastIndex - 2) + ?.map(Innertube::Info), + viewsText = otherRuns + .getOrNull(otherRuns.lastIndex - 1) + ?.firstOrNull() + ?.text, + durationText = otherRuns + .getOrNull(otherRuns.lastIndex) + ?.firstOrNull() + ?.text, + thumbnail = content.thumbnail + ).takeIf { it.info?.endpoint?.videoId != null } + }.getOrNull() } fun Innertube.AlbumItem.Companion.from(content: MusicShelfRenderer.Content): Innertube.AlbumItem? { @@ -83,8 +89,7 @@ fun Innertube.AlbumItem.Companion.from(content: MusicShelfRenderer.Content): Inn .getOrNull(otherRuns.lastIndex) ?.firstOrNull() ?.text, - thumbnail = content - .thumbnail + thumbnail = content.thumbnail ).takeIf { it.info?.endpoint?.browseId != null } } @@ -105,8 +110,7 @@ fun Innertube.ArtistItem.Companion.from(content: MusicShelfRenderer.Content): In .lastOrNull() ?.last() ?.text, - thumbnail = content - .thumbnail + thumbnail = content.thumbnail ).takeIf { it.info?.endpoint?.browseId != null } } @@ -134,7 +138,6 @@ fun Innertube.PlaylistItem.Companion.from(content: MusicShelfRenderer.Content): ?.split(' ') ?.firstOrNull() ?.toIntOrNull(), - thumbnail = content - .thumbnail + thumbnail = content.thumbnail ).takeIf { it.info?.endpoint?.browseId != null } } diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt new file mode 100644 index 0000000..6779aa9 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromMusicTwoRowItemRenderer.kt @@ -0,0 +1,71 @@ +package it.hamy.innertube.utils + +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.MusicTwoRowItemRenderer + +fun Innertube.AlbumItem.Companion.from(renderer: MusicTwoRowItemRenderer) = Innertube.AlbumItem( + info = renderer + .title + ?.runs + ?.firstOrNull() + ?.let(Innertube::Info), + authors = null, + year = renderer + .subtitle + ?.runs + ?.lastOrNull() + ?.text, + thumbnail = renderer + .thumbnailRenderer + ?.musicThumbnailRenderer + ?.thumbnail + ?.thumbnails + ?.firstOrNull() +).takeIf { it.info?.endpoint?.browseId != null } + +fun Innertube.ArtistItem.Companion.from(renderer: MusicTwoRowItemRenderer) = Innertube.ArtistItem( + info = renderer + .title + ?.runs + ?.firstOrNull() + ?.let(Innertube::Info), + subscribersCountText = renderer + .subtitle + ?.runs + ?.firstOrNull() + ?.text, + thumbnail = renderer + .thumbnailRenderer + ?.musicThumbnailRenderer + ?.thumbnail + ?.thumbnails + ?.firstOrNull() +).takeIf { it.info?.endpoint?.browseId != null } + +fun Innertube.PlaylistItem.Companion.from(renderer: MusicTwoRowItemRenderer) = + Innertube.PlaylistItem( + info = renderer + .title + ?.runs + ?.firstOrNull() + ?.let(Innertube::Info), + channel = renderer + .subtitle + ?.runs + ?.getOrNull(2) + ?.let(Innertube::Info), + songCount = renderer + .subtitle + ?.runs + ?.getOrNull(4) + ?.text + ?.split(' ') + ?.firstOrNull() + ?.toIntOrNull(), + thumbnail = renderer + .thumbnailRenderer + ?.musicThumbnailRenderer + ?.thumbnail + ?.thumbnails + ?.firstOrNull() + ).takeIf { it.info?.endpoint?.browseId != null } diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt new file mode 100644 index 0000000..6248be3 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/FromPlaylistPanelVideoRenderer.kt @@ -0,0 +1,33 @@ +package it.hamy.innertube.utils + +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.PlaylistPanelVideoRenderer + +fun Innertube.SongItem.Companion.from(renderer: PlaylistPanelVideoRenderer) = Innertube.SongItem( + info = Innertube.Info( + name = renderer + .title + ?.text, + endpoint = renderer + .navigationEndpoint + ?.watchEndpoint + ), + authors = renderer + .longBylineText + ?.splitBySeparator() + ?.getOrNull(0) + ?.map(Innertube::Info), + album = renderer + .longBylineText + ?.splitBySeparator() + ?.getOrNull(1) + ?.getOrNull(0) + ?.let(Innertube::Info), + thumbnail = renderer + .thumbnail + ?.thumbnails + ?.getOrNull(0), + durationText = renderer + .lengthText + ?.text +).takeIf { it.info?.endpoint?.videoId != null } diff --git a/innertube/src/main/kotlin/it/hamy/innertube/utils/ProxyPreferences.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/ProxyPreferences.kt similarity index 100% rename from innertube/src/main/kotlin/it/hamy/innertube/utils/ProxyPreferences.kt rename to providers/innertube/src/main/kotlin/it/hamy/innertube/utils/ProxyPreferences.kt diff --git a/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt new file mode 100644 index 0000000..f299389 --- /dev/null +++ b/providers/innertube/src/main/kotlin/it/hamy/innertube/utils/Utils.kt @@ -0,0 +1,38 @@ +package it.hamy.innertube.utils + +import it.hamy.innertube.Innertube +import it.hamy.innertube.models.SectionListRenderer + +internal fun SectionListRenderer.findSectionByTitle(text: String) = contents?.find { + val title = it + .musicCarouselShelfRenderer + ?.header + ?.musicCarouselShelfBasicHeaderRenderer + ?.title + ?: it + .musicShelfRenderer + ?.title + + title + ?.runs + ?.firstOrNull() + ?.text == text +} + +internal fun SectionListRenderer.findSectionByStrapline(text: String) = contents?.find { + it + .musicCarouselShelfRenderer + ?.header + ?.musicCarouselShelfBasicHeaderRenderer + ?.strapline + ?.runs + ?.firstOrNull() + ?.text == text +} + +infix operator fun Innertube.ItemsPage?.plus(other: Innertube.ItemsPage) = + other.copy( + items = (this?.items?.plus(other.items ?: emptyList()) ?: other.items) + ?.distinctBy(Innertube.Item::key), + continuation = other.continuation ?: this?.continuation + ) diff --git a/providers/kugou/.gitignore b/providers/kugou/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/providers/kugou/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/providers/kugou/build.gradle.kts b/providers/kugou/build.gradle.kts new file mode 100644 index 0000000..8febb74 --- /dev/null +++ b/providers/kugou/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.android.lint) +} + +dependencies { + implementation(projects.providers.common) + + implementation(libs.kotlin.coroutines) + + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.okhttp) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.client.encoding) + implementation(libs.ktor.client.serialization) + implementation(libs.ktor.serialization.json) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} diff --git a/providers/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt b/providers/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt new file mode 100644 index 0000000..8515098 --- /dev/null +++ b/providers/kugou/src/main/kotlin/it/hamy/kugou/KuGou.kt @@ -0,0 +1,184 @@ +package it.hamy.kugou + +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.BrowserUserAgent +import io.ktor.client.plugins.compression.ContentEncoding +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.get +import io.ktor.client.request.parameter +import io.ktor.http.ContentType +import io.ktor.http.encodeURLParameter +import io.ktor.serialization.kotlinx.json.json +import io.ktor.util.decodeBase64String +import it.hamy.extensions.runCatchingCancellable +import it.hamy.kugou.models.DownloadLyricsResponse +import it.hamy.kugou.models.SearchLyricsResponse +import it.hamy.kugou.models.SearchSongResponse +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.json.Json + +object KuGou { + @OptIn(ExperimentalSerializationApi::class) + private val client by lazy { + HttpClient(OkHttp) { + BrowserUserAgent() + + expectSuccess = true + + install(ContentNegotiation) { + val feature = Json { + ignoreUnknownKeys = true + explicitNulls = false + encodeDefaults = true + } + + json(feature) + json(feature, ContentType.Text.Html) + json(feature, ContentType.Text.Plain) + } + + install(ContentEncoding) { + gzip() + deflate() + } + + defaultRequest { + url("https://krcs.kugou.com") + } + } + } + + suspend fun lyrics(artist: String, title: String, duration: Long) = runCatchingCancellable { + val keyword = keyword(artist, title) + val infoByKeyword = searchSong(keyword) + + if (infoByKeyword.isNotEmpty()) { + var tolerance = 0 + + while (tolerance <= 5) { + for (info in infoByKeyword) { + if (info.duration >= duration - tolerance && info.duration <= duration + tolerance) { + searchLyricsByHash(info.hash).firstOrNull()?.let { candidate -> + return@runCatchingCancellable downloadLyrics( + candidate.id, + candidate.accessKey + ).normalize() + } + } + } + + tolerance++ + } + } + + searchLyricsByKeyword(keyword).firstOrNull()?.let { candidate -> + return@runCatchingCancellable downloadLyrics( + candidate.id, + candidate.accessKey + ).normalize() + } + + null + } + + private suspend fun downloadLyrics(id: Long, accessKey: String) = client.get("/download") { + parameter("ver", 1) + parameter("man", "yes") + parameter("client", "pc") + parameter("fmt", "lrc") + parameter("id", id) + parameter("accesskey", accessKey) + }.body().content.decodeBase64String().let(::Lyrics) + + private suspend fun searchLyricsByHash(hash: String) = client.get("/search") { + parameter("ver", 1) + parameter("man", "yes") + parameter("client", "mobi") + parameter("hash", hash) + }.body().candidates + + private suspend fun searchLyricsByKeyword(keyword: String) = client.get("/search") { + parameter("ver", 1) + parameter("man", "yes") + parameter("client", "mobi") + url.encodedParameters.append("keyword", keyword.encodeURLParameter(spaceToPlus = false)) + }.body().candidates + + private suspend fun searchSong(keyword: String) = + client.get("https://mobileservice.kugou.com/api/v3/search/song") { + parameter("version", 9108) + parameter("plat", 0) + parameter("pagesize", 8) + parameter("showtype", 0) + url.encodedParameters.append("keyword", keyword.encodeURLParameter(spaceToPlus = false)) + }.body().data.info + + private fun keyword(artist: String, title: String): String { + val (newTitle, featuring) = title.extract(" (feat. ", ')') + + val newArtist = (if (featuring.isEmpty()) artist else "$artist, $featuring") + .replace(", ", "、") + .replace(" & ", "、") + .replace(".", "") + + return "$newArtist - $newTitle" + } + + @Suppress("ReturnCount") + private fun String.extract(startDelimiter: String, endDelimiter: Char): Pair { + val startIndex = indexOf(startDelimiter).takeIf { it != -1 } ?: return this to "" + val endIndex = indexOf(endDelimiter, startIndex).takeIf { it != -1 } ?: return this to "" + + return removeRange(startIndex, endIndex + 1) to substring(startIndex + startDelimiter.length, endIndex) + } + + @JvmInline + value class Lyrics(val value: String) { + @Suppress("CyclomaticComplexMethod") + fun normalize(): Lyrics { + var toDrop = 0 + var maybeToDrop = 0 + + val text = value.replace("\r\n", "\n").trim() + + for (line in text.lineSequence()) when { + line.startsWith("[ti:") || + line.startsWith("[ar:") || + line.startsWith("[al:") || + line.startsWith("[by:") || + line.startsWith("[hash:") || + line.startsWith("[sign:") || + line.startsWith("[qq:") || + line.startsWith("[total:") || + line.startsWith("[offset:") || + line.startsWith("[id:") || + line.containsAt("]Written by:", 9) || + line.containsAt("]Lyrics by:", 9) || + line.containsAt("]Composed by:", 9) || + line.containsAt("]Producer:", 9) || + line.containsAt("]作曲 : ", 9) || + line.containsAt("]作词 : ", 9) -> { + toDrop += line.length + 1 + maybeToDrop + maybeToDrop = 0 + } + + maybeToDrop == 0 -> maybeToDrop = line.length + 1 + + else -> { + maybeToDrop = 0 + break + } + } + + return Lyrics(text.drop(toDrop + maybeToDrop).removeHtmlEntities()) + } + + private fun String.containsAt(charSequence: CharSequence, startIndex: Int) = + regionMatches(startIndex, charSequence, 0, charSequence.length) + + private fun String.removeHtmlEntities() = replace("'", "'") + } +} diff --git a/kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt b/providers/kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt similarity index 100% rename from kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt rename to providers/kugou/src/main/kotlin/it/hamy/kugou/models/DownloadLyricsResponse.kt diff --git a/kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt b/providers/kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt similarity index 100% rename from kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt rename to providers/kugou/src/main/kotlin/it/hamy/kugou/models/SearchLyricsResponse.kt diff --git a/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt b/providers/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt similarity index 91% rename from kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt rename to providers/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt index 4698082..3d934c2 100644 --- a/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt +++ b/providers/kugou/src/main/kotlin/it/hamy/kugou/models/SearchSongResponse.kt @@ -7,7 +7,7 @@ internal data class SearchSongResponse( val data: Data ) { @Serializable - internal data class Data( + internal data class Data( val info: List ) { @Serializable diff --git a/providers/lrclib/.gitignore b/providers/lrclib/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/providers/lrclib/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/innertube/build.gradle.kts b/providers/lrclib/build.gradle.kts similarity index 51% rename from innertube/build.gradle.kts rename to providers/lrclib/build.gradle.kts index e2cf347..5eb4332 100644 --- a/innertube/build.gradle.kts +++ b/providers/lrclib/build.gradle.kts @@ -1,23 +1,24 @@ - plugins { - kotlin("jvm") - @Suppress("DSL_SCOPE_VIOLATION") + alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.serialization) -} - -sourceSets.all { - java.srcDir("src/$name/kotlin") + alias(libs.plugins.android.lint) } dependencies { - implementation(projects.ktorClientBrotli) + implementation(projects.providers.common) + + implementation(libs.kotlin.coroutines) implementation(libs.ktor.client.core) implementation(libs.ktor.client.cio) implementation(libs.ktor.client.content.negotiation) - implementation(libs.ktor.client.encoding) implementation(libs.ktor.client.serialization) implementation(libs.ktor.serialization.json) - testImplementation(testLibs.junit) + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) } diff --git a/providers/lrclib/src/main/kotlin/it/hamy/lrclib/LrcLib.kt b/providers/lrclib/src/main/kotlin/it/hamy/lrclib/LrcLib.kt new file mode 100644 index 0000000..75a2cea --- /dev/null +++ b/providers/lrclib/src/main/kotlin/it/hamy/lrclib/LrcLib.kt @@ -0,0 +1,79 @@ +package it.hamy.lrclib + +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.get +import io.ktor.client.request.parameter +import io.ktor.serialization.kotlinx.json.json +import it.hamy.extensions.runCatchingCancellable +import it.hamy.lrclib.models.Track +import it.hamy.lrclib.models.bestMatchingFor +import kotlinx.serialization.json.Json +import kotlin.time.Duration + +object LrcLib { + private val client by lazy { + HttpClient(CIO) { + install(ContentNegotiation) { + json( + Json { + isLenient = true + ignoreUnknownKeys = true + } + ) + } + + defaultRequest { + url("https://lrclib.net") + } + + expectSuccess = true + } + } + + private suspend fun queryLyrics(artist: String, title: String, album: String? = null) = + client.get("/api/search") { + parameter("track_name", title) + parameter("artist_name", artist) + if (album != null) parameter("album_name", album) + }.body>().filter { it.syncedLyrics != null } + + suspend fun lyrics( + artist: String, + title: String, + duration: Duration, + album: String? = null + ) = runCatchingCancellable { + val tracks = queryLyrics(artist, title, album) + + tracks.bestMatchingFor(title, duration)?.syncedLyrics?.let(LrcLib::Lyrics) + } + + suspend fun lyrics(artist: String, title: String) = runCatchingCancellable { + queryLyrics(artist = artist, title = title, album = null) + } + + @JvmInline + value class Lyrics(val text: String) { + val sentences + get() = runCatching { + buildMap { + put(0L, "") + text.trim().lines().filter { it.length >= 10 }.forEach { + put( + it[8].digitToInt() * 10L + + it[7].digitToInt() * 100 + + it[5].digitToInt() * 1000 + + it[4].digitToInt() * 10000 + + it[2].digitToInt() * 60 * 1000 + + it[1].digitToInt() * 600 * 1000, + it.substring(10) + ) + } + } + }.getOrNull() + } +} diff --git a/providers/lrclib/src/main/kotlin/it/hamy/lrclib/models/Track.kt b/providers/lrclib/src/main/kotlin/it/hamy/lrclib/models/Track.kt new file mode 100644 index 0000000..09f3635 --- /dev/null +++ b/providers/lrclib/src/main/kotlin/it/hamy/lrclib/models/Track.kt @@ -0,0 +1,19 @@ +package it.hamy.lrclib.models + +import kotlinx.serialization.Serializable +import kotlin.math.abs +import kotlin.time.Duration + +@Serializable +data class Track( + val id: Int, + val trackName: String, + val artistName: String, + val duration: Long, + val plainLyrics: String?, + val syncedLyrics: String? +) + +internal fun List.bestMatchingFor(title: String, duration: Duration) = + firstOrNull { it.duration == duration.inWholeSeconds } + ?: minByOrNull { abs(it.trackName.length - title.length) } diff --git a/providers/piped/.gitignore b/providers/piped/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/providers/piped/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/providers/piped/build.gradle.kts b/providers/piped/build.gradle.kts new file mode 100644 index 0000000..2266424 --- /dev/null +++ b/providers/piped/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.android.lint) +} + +dependencies { + implementation(projects.providers.common) + + implementation(libs.kotlin.coroutines) + api(libs.kotlin.datetime) + + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.cio) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.client.serialization) + implementation(libs.ktor.serialization.json) + api(libs.ktor.http) + + detektPlugins(libs.detekt.compose) + detektPlugins(libs.detekt.formatting) +} + +kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) +} diff --git a/providers/piped/src/main/kotlin/it/hamy/piped/Piped.kt b/providers/piped/src/main/kotlin/it/hamy/piped/Piped.kt new file mode 100644 index 0000000..66d5093 --- /dev/null +++ b/providers/piped/src/main/kotlin/it/hamy/piped/Piped.kt @@ -0,0 +1,169 @@ +package it.hamy.piped + +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.HttpRequestRetry +import io.ktor.client.plugins.HttpTimeout +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.accept +import io.ktor.client.request.get +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.request +import io.ktor.client.request.setBody +import io.ktor.client.statement.HttpResponse +import io.ktor.http.ContentType +import io.ktor.http.HttpMethod +import io.ktor.http.URLBuilder +import io.ktor.http.Url +import io.ktor.http.contentType +import io.ktor.http.path +import io.ktor.serialization.kotlinx.json.json +import it.hamy.extensions.runCatchingCancellable +import it.hamy.piped.models.CreatedPlaylist +import it.hamy.piped.models.Instance +import it.hamy.piped.models.Playlist +import it.hamy.piped.models.PlaylistPreview +import it.hamy.piped.models.Session +import it.hamy.piped.models.authenticatedWith +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import java.util.UUID + +operator fun Url.div(path: String) = URLBuilder(this).apply { path(path) }.build() +operator fun JsonElement.div(key: String) = jsonObject[key]!! + +object Piped { + private val client by lazy { + HttpClient(CIO) { + install(ContentNegotiation) { + json( + Json { + isLenient = true + ignoreUnknownKeys = true + } + ) + } + + install(HttpRequestRetry) { + exponentialDelay() + maxRetries = 2 + } + + install(HttpTimeout) { + connectTimeoutMillis = 1000L + requestTimeoutMillis = 5000L + } + + expectSuccess = true + + defaultRequest { + accept(ContentType.Application.Json) + contentType(ContentType.Application.Json) + } + } + } + + private val mutex = Mutex() + + private suspend fun request( + session: Session, + endpoint: String, + block: HttpRequestBuilder.() -> Unit = { } + ) = mutex.withLock { + client.request(url = session.apiBaseUrl / endpoint) { + block() + header("Authorization", session.token) + } + } + + private suspend fun HttpResponse.isOk() = + (body() / "message").jsonPrimitive.content == "ok" + + suspend fun getInstances() = runCatchingCancellable { + client.get("https://piped-instances.kavin.rocks/").body>() + } + + suspend fun login(apiBaseUrl: Url, username: String, password: String) = + runCatchingCancellable { + apiBaseUrl authenticatedWith ( + client.post(apiBaseUrl / "login") { + setBody( + mapOf( + "username" to username, + "password" to password + ) + ) + }.body() / "token" + ).jsonPrimitive.content + } + + val playlist = Playlists() + + class Playlists internal constructor() { + suspend fun list(session: Session) = runCatchingCancellable { + request(session, "user/playlists").body>() + } + + suspend fun create(session: Session, name: String) = runCatchingCancellable { + request(session, "user/playlists/create") { + method = HttpMethod.Post + setBody(mapOf("name" to name)) + }.body() + } + + suspend fun rename(session: Session, id: UUID, name: String) = runCatchingCancellable { + request(session, "user/playlists/rename") { + method = HttpMethod.Post + setBody( + mapOf( + "playlistId" to id.toString(), + "newName" to name + ) + ) + }.isOk() + } + + suspend fun delete(session: Session, id: UUID) = runCatchingCancellable { + request(session, "user/playlists/delete") { + method = HttpMethod.Post + setBody(mapOf("playlistId" to id.toString())) + }.isOk() + } + + suspend fun add(session: Session, id: UUID, videos: List) = runCatchingCancellable { + request(session, "user/playlists/add") { + method = HttpMethod.Post + setBody( + mapOf( + "playlistId" to id.toString(), + "videoIds" to videos + ) + ) + }.isOk() + } + + suspend fun remove(session: Session, id: UUID, idx: Int) = runCatchingCancellable { + request(session, "user/playlists/remove") { + method = HttpMethod.Post + setBody( + mapOf( + "playlistId" to id.toString(), + "index" to idx + ) + ) + }.isOk() + } + + suspend fun songs(session: Session, id: UUID) = runCatchingCancellable { + request(session, "playlists/$id").body() + } + } +} diff --git a/providers/piped/src/main/kotlin/it/hamy/piped/models/Instance.kt b/providers/piped/src/main/kotlin/it/hamy/piped/models/Instance.kt new file mode 100644 index 0000000..0dd9d46 --- /dev/null +++ b/providers/piped/src/main/kotlin/it/hamy/piped/models/Instance.kt @@ -0,0 +1,30 @@ +package it.hamy.piped.models + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class Instance( + val name: String, + @SerialName("api_url") + val apiBaseUrl: UrlString, + @SerialName("locations") + val locationsFormatted: String, + val version: String, + @SerialName("up_to_date") + val upToDate: Boolean, + @SerialName("cdn") + val isCdn: Boolean, + @SerialName("registered") + val userCount: Long, + @SerialName("last_checked") + val lastChecked: DateTimeSeconds, + @SerialName("cache") + val hasCache: Boolean, + @SerialName("s3_enabled") + val usesS3: Boolean, + @SerialName("image_proxy_url") + val imageProxyBaseUrl: UrlString, + @SerialName("registration_disabled") + val registrationDisabled: Boolean +) diff --git a/providers/piped/src/main/kotlin/it/hamy/piped/models/PlaylistPreview.kt b/providers/piped/src/main/kotlin/it/hamy/piped/models/PlaylistPreview.kt new file mode 100644 index 0000000..b313610 --- /dev/null +++ b/providers/piped/src/main/kotlin/it/hamy/piped/models/PlaylistPreview.kt @@ -0,0 +1,60 @@ +package it.hamy.piped.models + +import io.ktor.http.Url +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.time.Duration.Companion.seconds + +@Serializable +data class CreatedPlaylist( + @SerialName("playlistId") + val id: UUIDString +) + +@Serializable +data class PlaylistPreview( + val id: UUIDString, + val name: String, + @SerialName("shortDescription") + val description: String? = null, + @SerialName("thumbnail") + val thumbnailUrl: UrlString, + @SerialName("videos") + val videoCount: Int +) + +@Serializable +data class Playlist( + val name: String, + val thumbnailUrl: UrlString, + val description: String? = null, + val bannerUrl: UrlString? = null, + @SerialName("videos") + val videoCount: Int, + @SerialName("relatedStreams") + val videos: List