├── app
├── CMakeLists.txt
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── resources.properties
│ │ │ ├── values-es-rUS
│ │ │ │ └── strings.xml
│ │ │ ├── values-nb-rNO
│ │ │ │ └── strings.xml
│ │ │ ├── drawable
│ │ │ │ ├── casa.webp
│ │ │ │ ├── loudly_picutre_1.jpg
│ │ │ │ ├── loudly_picutre_2.jpg
│ │ │ │ ├── loudly_picutre_3.jpg
│ │ │ │ ├── loudly_picutre_4.jpg
│ │ │ │ ├── loudly_picutre_5.jpg
│ │ │ │ ├── loudly_picutre_6.jpg
│ │ │ │ ├── app_widget_background.xml
│ │ │ │ ├── app_widget_inner_view_background.xml
│ │ │ │ ├── widget_album_art_background.xml
│ │ │ │ ├── album_art_gradient.xml
│ │ │ │ ├── signal_cellular_alt.xml
│ │ │ │ ├── home_filled.xml
│ │ │ │ ├── widget_icon_background.xml
│ │ │ │ ├── remove.xml
│ │ │ │ ├── wifi.xml
│ │ │ │ ├── widget_background.xml
│ │ │ │ ├── tag.xml
│ │ │ │ ├── widget_control_chip_background.xml
│ │ │ │ ├── arrow_upward.xml
│ │ │ │ ├── arrow_downward.xml
│ │ │ │ ├── arrow_top_left.xml
│ │ │ │ ├── navigate_next.xml
│ │ │ │ ├── headphones.xml
│ │ │ │ ├── logout.xml
│ │ │ │ ├── arrow_forward.xml
│ │ │ │ ├── save.xml
│ │ │ │ ├── content_copy.xml
│ │ │ │ ├── notification_on.xml
│ │ │ │ ├── download_done.xml
│ │ │ │ ├── security.xml
│ │ │ │ ├── shortcut_songs.xml
│ │ │ │ ├── play.xml
│ │ │ │ ├── bookmark.xml
│ │ │ │ ├── music_note.xml
│ │ │ │ ├── explore_filled.xml
│ │ │ │ ├── nav_bar.xml
│ │ │ │ ├── add_link.xml
│ │ │ │ ├── shuffle.xml
│ │ │ │ ├── sliders.xml
│ │ │ │ ├── format_align_center.xml
│ │ │ │ ├── add.xml
│ │ │ │ ├── arrow_back.xml
│ │ │ │ ├── close.xml
│ │ │ │ ├── drag_handle.xml
│ │ │ │ ├── notifications_off.xml
│ │ │ │ ├── playlist_remove.xml
│ │ │ │ ├── rounded_corner.xml
│ │ │ │ ├── account_circle.xml
│ │ │ │ ├── ic_autorenew.xml
│ │ │ │ ├── contrast.xml
│ │ │ │ ├── format_align_left.xml
│ │ │ │ ├── home_outlined.xml
│ │ │ │ ├── boosty.xml
│ │ │ │ ├── wifi_off.xml
│ │ │ │ ├── gradient.xml
│ │ │ │ ├── edit.xml
│ │ │ │ ├── library_music_filled.xml
│ │ │ │ ├── search.xml
│ │ │ │ ├── trending_up.xml
│ │ │ │ ├── high_quality.xml
│ │ │ │ ├── skip_next.xml
│ │ │ │ ├── tips.xml
│ │ │ │ ├── badge.xml
│ │ │ │ ├── skip_previous.xml
│ │ │ │ ├── ic_battery_charging.xml
│ │ │ │ ├── bedtime.xml
│ │ │ │ ├── pause.xml
│ │ │ │ ├── widget_progress_bar.xml
│ │ │ │ ├── favorite.xml
│ │ │ │ ├── home.xml
│ │ │ │ ├── equalizer.xml
│ │ │ │ ├── codigo.xml
│ │ │ │ ├── clear_all.xml
│ │ │ │ ├── ic_low_battery.xml
│ │ │ │ ├── shortcut_search.xml
│ │ │ │ ├── tune.xml
│ │ │ │ ├── fast_forward.xml
│ │ │ │ ├── dark_mode.xml
│ │ │ │ ├── shuffle_on.xml
│ │ │ │ ├── lock.xml
│ │ │ │ ├── token.xml
│ │ │ │ ├── translate.xml
│ │ │ │ ├── library_music_outlined.xml
│ │ │ │ ├── offline.xml
│ │ │ │ ├── download.xml
│ │ │ │ ├── bookmark_filled.xml
│ │ │ │ ├── ic_smart_hub.xml
│ │ │ │ ├── explicit.xml
│ │ │ │ ├── replay.xml
│ │ │ │ ├── location_on.xml
│ │ │ │ ├── lock_open.xml
│ │ │ │ ├── upgrade.xml
│ │ │ │ ├── schedule.xml
│ │ │ │ ├── ic_battery.xml
│ │ │ │ ├── directions_run.xml
│ │ │ │ ├── expand_less.xml
│ │ │ │ ├── expand_more.xml
│ │ │ │ ├── more_vert.xml
│ │ │ │ ├── input.xml
│ │ │ │ ├── more_horiz.xml
│ │ │ │ ├── manage_search.xml
│ │ │ │ ├── radio.xml
│ │ │ │ ├── library_add_check.xml
│ │ │ │ ├── swipe.xml
│ │ │ │ ├── update.xml
│ │ │ │ ├── playlist_play.xml
│ │ │ │ ├── library_music.xml
│ │ │ │ ├── delete.xml
│ │ │ │ ├── grid_view.xml
│ │ │ │ ├── error.xml
│ │ │ │ ├── tab.xml
│ │ │ │ ├── album.xml
│ │ │ │ ├── shortcut_albums.xml
│ │ │ │ ├── extension.xml
│ │ │ │ ├── info.xml
│ │ │ │ ├── queue_music.xml
│ │ │ │ ├── shortcut_playlists.xml
│ │ │ │ ├── backup.xml
│ │ │ │ ├── repeat.xml
│ │ │ │ ├── cached.xml
│ │ │ │ ├── library_add.xml
│ │ │ │ ├── graphic_eq.xml
│ │ │ │ ├── slow_motion_video.xml
│ │ │ │ ├── history.xml
│ │ │ │ └── radio_button_unchecked.xml
│ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_banner.png
│ │ │ ├── xml
│ │ │ │ ├── automotive_app_desc.xml
│ │ │ │ ├── file_paths.xml
│ │ │ │ ├── backup_rules.xml
│ │ │ │ ├── widget_info.xml
│ │ │ │ └── provider_paths.xml
│ │ │ ├── drawable-nodpi
│ │ │ │ └── example_appwidget_preview.png
│ │ │ ├── values
│ │ │ │ ├── app_name.xml
│ │ │ │ ├── ic_banner_background.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── values.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── themes.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_banner.xml
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values-night-v31
│ │ │ │ └── themes.xml
│ │ │ ├── values-v31
│ │ │ │ ├── themes.xml
│ │ │ │ └── styles.xml
│ │ │ └── values-v21
│ │ │ │ └── styles.xml
│ │ ├── ic_launcher-playstore.png
│ │ └── java
│ │ │ └── com
│ │ │ └── babelsoftware
│ │ │ └── loudly
│ │ │ ├── constants
│ │ │ ├── HistorySource.kt
│ │ │ └── StatPeriod.kt
│ │ │ ├── extensions
│ │ │ ├── UtilExt.kt
│ │ │ ├── ListExt.kt
│ │ │ ├── FileExt.kt
│ │ │ ├── NavControllerExt.kt
│ │ │ └── StringExt.kt
│ │ │ ├── models
│ │ │ ├── spotify
│ │ │ │ ├── tracks
│ │ │ │ │ ├── Artists.kt
│ │ │ │ │ ├── Track.kt
│ │ │ │ │ ├── TrackItem.kt
│ │ │ │ │ └── SpotifyResultPaginatedResponse.kt
│ │ │ │ ├── playlists
│ │ │ │ │ ├── Images.kt
│ │ │ │ │ ├── SpotifyPlaylistPaginatedResponse.kt
│ │ │ │ │ └── SpotifyPlaylistItem.kt
│ │ │ │ └── Tracks.kt
│ │ │ ├── ItemsPage.kt
│ │ │ ├── SongWithPlayCount.kt
│ │ │ ├── PersistQueue.kt
│ │ │ ├── SpotifyUserProfile.kt
│ │ │ ├── SimilarRecommendation.kt
│ │ │ └── SpotifyAuthResponse.kt
│ │ │ ├── db
│ │ │ ├── entities
│ │ │ │ ├── LocalItem.kt
│ │ │ │ ├── SetVideoIdEntity.kt
│ │ │ │ ├── LyricsEntity.kt
│ │ │ │ ├── PlaylistSong.kt
│ │ │ │ ├── EventWithSong.kt
│ │ │ │ ├── SearchHistory.kt
│ │ │ │ ├── SortedSongAlbumMap.kt
│ │ │ │ ├── SortedSongArtistMap.kt
│ │ │ │ ├── FormatEntity.kt
│ │ │ │ ├── PlaylistSongMapPreview.kt
│ │ │ │ ├── Artist.kt
│ │ │ │ ├── RecentActivityEntity.kt
│ │ │ │ └── Event.kt
│ │ │ └── Converters.kt
│ │ │ ├── ui
│ │ │ ├── screens
│ │ │ │ └── settings
│ │ │ │ │ └── import_from_spotify
│ │ │ │ │ └── model
│ │ │ │ │ ├── Playlist.kt
│ │ │ │ │ ├── ImportProgressEvent.kt
│ │ │ │ │ └── ImportFromSpotifyScreenState.kt
│ │ │ ├── utils
│ │ │ │ ├── ShapeUtils.kt
│ │ │ │ ├── NavControllerUtils.kt
│ │ │ │ └── YouTubeUtils.kt
│ │ │ └── component
│ │ │ │ └── shimmer
│ │ │ │ └── ButtonPlaceholder.kt
│ │ │ ├── utils
│ │ │ ├── ItemWrapper.kt
│ │ │ ├── Updater.kt
│ │ │ └── StringUtils.kt
│ │ │ ├── lyrics
│ │ │ ├── LyricsEntry.kt
│ │ │ ├── YouTubeSubtitleLyricsProvider.kt
│ │ │ ├── LyricsProvider.kt
│ │ │ └── YouTubeLyricsProvider.kt
│ │ │ └── playback
│ │ │ └── queues
│ │ │ ├── EmptyQueue.kt
│ │ │ └── ListQueue.kt
│ ├── debug
│ │ └── res
│ │ │ └── values
│ │ │ └── app_name.xml
│ ├── foss
│ │ └── java
│ │ │ └── com
│ │ │ └── babelsoftware
│ │ │ └── loudly
│ │ │ ├── Utils.kt
│ │ │ └── TranslationHelper.kt
│ └── full
│ │ └── java
│ │ └── com
│ │ └── babelsoftware
│ │ └── loudly
│ │ └── Utils.kt
├── foss
│ └── release
│ │ └── baselineProfiles
│ │ ├── 0
│ │ └── app-foss-release.dm
│ │ └── 1
│ │ └── app-foss-release.dm
└── full
│ └── release
│ └── baselineProfiles
│ ├── 0
│ └── app-full-release.dm
│ └── 1
│ └── app-full-release.dm
├── kizzy
├── .gitignore
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── my
│ │ └── kizzy
│ │ ├── rpc
│ │ └── UserInfo.kt
│ │ ├── remote
│ │ └── ApiResponse.kt
│ │ └── gateway
│ │ └── entities
│ │ ├── presence
│ │ ├── Metadata.kt
│ │ ├── Timestamps.kt
│ │ ├── Presence.kt
│ │ └── Assets.kt
│ │ ├── Resume.kt
│ │ ├── Payload.kt
│ │ ├── HeartBeat.kt
│ │ └── Ready.kt
└── build.gradle.kts
├── kugou
├── .gitignore
├── src
│ ├── main
│ │ └── java
│ │ │ └── com
│ │ │ └── babelsoftware
│ │ │ └── kugou
│ │ │ └── models
│ │ │ ├── DownloadLyricsResponse.kt
│ │ │ ├── SearchSongResponse.kt
│ │ │ └── SearchLyricsResponse.kt
│ └── test
│ │ └── java
│ │ └── Test.kt
└── build.gradle.kts
├── lrclib
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── babelsoftware
│ └── lrclib
│ └── models
│ └── Track.kt
├── innertube
├── .gitignore
├── src
│ └── main
│ │ └── java
│ │ └── com
│ │ └── babelsoftware
│ │ └── innertube
│ │ ├── models
│ │ ├── Icon.kt
│ │ ├── AccountInfo.kt
│ │ ├── SearchSuggestions.kt
│ │ ├── YouTubeLocale.kt
│ │ ├── response
│ │ │ ├── CreatePlaylistResponse.kt
│ │ │ ├── GetQueueResponse.kt
│ │ │ ├── GetSearchSuggestionsResponse.kt
│ │ │ └── AddItemYouTubePlaylistResponse.kt
│ │ ├── body
│ │ │ ├── PlaylistDeleteBody.kt
│ │ │ ├── SubscribeBody.kt
│ │ │ ├── GetTranscriptBody.kt
│ │ │ ├── GetSearchSuggestionsBody.kt
│ │ │ ├── SearchBody.kt
│ │ │ ├── GetQueueBody.kt
│ │ │ ├── BrowseBody.kt
│ │ │ ├── AccountMenuBody.kt
│ │ │ ├── NextBody.kt
│ │ │ ├── CreatePlaylistBody.kt
│ │ │ ├── LikeBody.kt
│ │ │ └── PlayerBody.kt
│ │ ├── MusicDescriptionShelfRenderer.kt
│ │ ├── Badges.kt
│ │ ├── Thumbnails.kt
│ │ ├── MusicPlaylistShelfRenderer.kt
│ │ ├── SubscriptionButton.kt
│ │ ├── Button.kt
│ │ ├── ContinuationItemRenderer.kt
│ │ ├── AutomixPreviewVideoRenderer.kt
│ │ ├── MusicNavigationButtonRenderer.kt
│ │ ├── ResponseContext.kt
│ │ ├── Context.kt
│ │ ├── PlaylistPanelVideoRenderer.kt
│ │ ├── SearchSuggestionsSectionRenderer.kt
│ │ ├── MusicQueueRenderer.kt
│ │ ├── Continuation.kt
│ │ ├── PlaylistPanelRenderer.kt
│ │ ├── Tabs.kt
│ │ └── GridRenderer.kt
│ │ └── pages
│ │ ├── LibraryContinuationPage.kt
│ │ ├── PlaylistContinuationPage.kt
│ │ ├── ExplorePage.kt
│ │ ├── ArtistItemsContinuationPage.kt
│ │ └── BrowseResult.kt
└── build.gradle.kts
├── material-color-utilities
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ └── java
│ └── com
│ └── google
│ └── material
│ └── color
│ └── quantize
│ └── Quantizer.java
├── fastlane
└── metadata
│ └── android
│ ├── en-US
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 19.txt
│ │ ├── 18.txt
│ │ ├── 17.txt
│ │ ├── 10.txt
│ │ ├── 22.txt
│ │ ├── 21.txt
│ │ ├── 12.txt
│ │ ├── 6.txt
│ │ ├── 20.txt
│ │ ├── 23.txt
│ │ ├── 24.txt
│ │ ├── 16.txt
│ │ ├── 8.txt
│ │ ├── 13.txt
│ │ ├── 7.txt
│ │ ├── 9.txt
│ │ ├── 5.txt
│ │ ├── 14.txt
│ │ ├── 15.txt
│ │ ├── 25.txt
│ │ └── 11.txt
│ ├── images
│ │ ├── icon.png
│ │ └── phoneScreenshots
│ │ │ ├── 01.png
│ │ │ ├── 02.png
│ │ │ ├── 03.png
│ │ │ ├── 04.png
│ │ │ ├── 05.png
│ │ │ └── 06.png
│ └── full_description.txt
│ ├── it
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pt-BR
│ ├── title.txt
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 19.txt
│ │ └── 23.txt
│ └── full_description.txt
│ ├── ru-RU
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── uk-UA
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── zh-CN
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── zh-TW
│ ├── title.txt
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pa
│ └── short_description.txt
│ ├── bg
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ja
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ko
│ ├── short_description.txt
│ └── full_description.txt
│ ├── de-DE
│ └── short_description.txt
│ ├── pl-PL
│ ├── short_description.txt
│ └── full_description.txt
│ ├── es
│ ├── short_description.txt
│ ├── changelogs
│ │ ├── 18.txt
│ │ ├── 19.txt
│ │ ├── 17.txt
│ │ ├── 22.txt
│ │ ├── 21.txt
│ │ ├── 6.txt
│ │ ├── 20.txt
│ │ ├── 12.txt
│ │ ├── 24.txt
│ │ ├── 23.txt
│ │ ├── 16.txt
│ │ ├── 7.txt
│ │ ├── 8.txt
│ │ ├── 13.txt
│ │ ├── 9.txt
│ │ ├── 5.txt
│ │ ├── 14.txt
│ │ ├── 26.txt
│ │ ├── 15.txt
│ │ ├── 25.txt
│ │ └── 11.txt
│ └── full_description.txt
│ └── tr
│ ├── short_description.txt
│ ├── changelogs
│ ├── 12.txt
│ ├── 13.txt
│ ├── 14.txt
│ └── 11.txt
│ └── full_description.txt
├── assets
└── Loudly-icon.jpg
├── image
├── loudly_banner.png
├── loudly_dark_mode.png
└── loudly_light_mode.png
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── crowdin.yml
├── lint.xml
└── settings.gradle.kts
/app/CMakeLists.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/kizzy/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/kugou/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/lrclib/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/innertube/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/material-color-utilities/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk-UA/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/title.txt:
--------------------------------------------------------------------------------
1 | Loudly
2 |
--------------------------------------------------------------------------------
/app/src/main/res/resources.properties:
--------------------------------------------------------------------------------
1 | unqualifiedResLocale=en
--------------------------------------------------------------------------------
/assets/Loudly-icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/assets/Loudly-icon.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/short_description.txt:
--------------------------------------------------------------------------------
1 | 一個 YouTube Music 用戶端,使用 Material 3 設計
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A Material 3 YouTube Music client for Android
--------------------------------------------------------------------------------
/fastlane/metadata/android/pa/short_description.txt:
--------------------------------------------------------------------------------
1 | ਇੱਕ ਮਟੀਰੀਅਲ ਡਿਜ਼ਾਈਨ ਵਾਲਾ ਯੂਟਿਊਬ ਮਿਊਜ਼ਕ ਕਲਾਈਂਟ
--------------------------------------------------------------------------------
/image/loudly_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/image/loudly_banner.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/bg/short_description.txt:
--------------------------------------------------------------------------------
1 | Клиент на YouTube Music Material 3 за Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/short_description.txt:
--------------------------------------------------------------------------------
1 | YouTube Musicから音楽をストリーミング再生するMaterial Designの音楽プレイヤー
--------------------------------------------------------------------------------
/fastlane/metadata/android/ko/short_description.txt:
--------------------------------------------------------------------------------
1 | YouTube/YouTube Music의 음악이 포함된 머티리얼 디자인 뮤직 플레이어
2 |
--------------------------------------------------------------------------------
/image/loudly_dark_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/image/loudly_dark_mode.png
--------------------------------------------------------------------------------
/image/loudly_light_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/image/loudly_light_mode.png
--------------------------------------------------------------------------------
/app/src/main/res/values-es-rUS/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-nb-rNO/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de-DE/short_description.txt:
--------------------------------------------------------------------------------
1 | Ein Material 3 YouTube Musik-Client für Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Un client di YouTube Music in Material 3 per Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl-PL/short_description.txt:
--------------------------------------------------------------------------------
1 | Aplikacja YouTube Music wykorzystująca Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 适用于 Android 的 YouTube Music 客户端,采用 Material 3 设计
2 |
--------------------------------------------------------------------------------
/kizzy/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Un cliente de YouTube Music con Material 3 para Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Um cliente do YouTube Music em Material 3 para Android
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru-RU/short_description.txt:
--------------------------------------------------------------------------------
1 | Клиент YouTube Music для Android в стиле Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk-UA/short_description.txt:
--------------------------------------------------------------------------------
1 | Клієнт YouTube Music для Android у стилі Material 3
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Android için bir Material 3 tasarımlı YouTube Müzik istemcisi
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/drawable/casa.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/casa.webp
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/mipmap-xhdpi/ic_banner.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_1.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_2.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_3.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_4.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_5.jpg
--------------------------------------------------------------------------------
/app/src/main/res/drawable/loudly_picutre_6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable/loudly_picutre_6.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - Better UI
2 | - Grid layout for albums and playlists
3 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | files:
2 | - source: /app/src/main/res/values/strings.xml
3 | translation: /app/src/main/res/values-%android_code%/strings.xml
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/automotive_app_desc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/18.txt:
--------------------------------------------------------------------------------
1 | - Improve library design
2 | - Lyrics translator (full version only)
3 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - IU melhorada
2 | - Layout de grade para álbuns e playlists
3 | - Pequenas melhoras e correção de bugs
4 |
--------------------------------------------------------------------------------
/app/foss/release/baselineProfiles/0/app-foss-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/foss/release/baselineProfiles/0/app-foss-release.dm
--------------------------------------------------------------------------------
/app/foss/release/baselineProfiles/1/app-foss-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/foss/release/baselineProfiles/1/app-foss-release.dm
--------------------------------------------------------------------------------
/app/full/release/baselineProfiles/0/app-full-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/full/release/baselineProfiles/0/app-full-release.dm
--------------------------------------------------------------------------------
/app/full/release/baselineProfiles/1/app-full-release.dm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/full/release/baselineProfiles/1/app-full-release.dm
--------------------------------------------------------------------------------
/app/src/main/res/drawable-nodpi/example_appwidget_preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/app/src/main/res/drawable-nodpi/example_appwidget_preview.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/17.txt:
--------------------------------------------------------------------------------
1 | - Login support
2 | - Mood & Genres
3 | - Better stats screen
4 | - Bookmark artists
5 | - Minor enhancement and bug fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RRechz/Loudly/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/constants/HistorySource.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.constants
2 |
3 | enum class HistorySource {
4 | LOCAL, REMOTE
5 | }
--------------------------------------------------------------------------------
/app/src/main/res/values/app_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Loudly
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_banner_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 |
--------------------------------------------------------------------------------
/app/src/debug/res/values/app_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Loudly Debug
4 |
--------------------------------------------------------------------------------
/app/src/foss/java/com/babelsoftware/loudly/Utils.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly
2 |
3 | fun reportException(throwable: Throwable) {
4 | throwable.printStackTrace()
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/18.txt:
--------------------------------------------------------------------------------
1 | - Mejorar el diseño de la biblioteca
2 | - Traductor de letras (en versión completa)
3 | - Mejoras menores y corrección de errores
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/10.txt:
--------------------------------------------------------------------------------
1 |
Improved
2 |
3 | * Support Android 13 themed icon (#157)
4 |
5 |
Fixed
6 |
7 | * Fix stream can't be played (#161)
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/19.txt:
--------------------------------------------------------------------------------
1 | - Mejor interfaz de usuario
2 | - Diseño de cuadrícula para álbumes y listas de reproducción
3 | - Mejoras menores y corrección de errores
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/22.txt:
--------------------------------------------------------------------------------
1 | - Fix frequent random crash
2 | - Fix crash when searching lyrics
3 | - Upgrade Material 3
4 | - Automatically scroll to the currently playing song in the queue
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/21.txt:
--------------------------------------------------------------------------------
1 | - Fix radio not working
2 | - Playlist duplicate warning
3 | - Add LrcLib lyrics provider
4 | - Add marquee
5 | - Add haptic feedback
6 | - Black player in pure black mode
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/17.txt:
--------------------------------------------------------------------------------
1 | - Soporte de inicio de sesión
2 | - Estado de ánimo y géneros
3 | - Mejor pantalla de estadísticas
4 | - Artistas favoritos
5 | - Pequeñas mejoras y correcciones de errores
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | * Start radio from library songs
2 | * Default open tab setting
3 | * Audio quality setting
4 | * Pause or clear search history
5 | * Backup and restore
6 | * Support SOCKS proxy
--------------------------------------------------------------------------------
/kizzy/src/main/java/com/my/kizzy/rpc/UserInfo.kt:
--------------------------------------------------------------------------------
1 | package com.my.kizzy.rpc
2 |
3 | /**
4 | * Created by Zion Huang
5 | */
6 | data class UserInfo(
7 | val username: String,
8 | val name: String,
9 | )
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/6.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix YouTube not playing any streams #27, TeamNewPipe/NewPipe#8202
4 | * Fix YouTube age restricted videos being throttled TeamNewPipe/NewPipeExtractor#832
--------------------------------------------------------------------------------
/lint.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/20.txt:
--------------------------------------------------------------------------------
1 | - Fix YouTube API changes
2 | - Show library artist albums first in new releases
3 | - More actions in Android Auto
4 | - Long click on back arrow to go to home
5 | - More improvements and fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | *Kütüphaneden, radyo özelliğini başlatma
2 | *Varsayılan başlangıç sekmesi
3 | *Ses kalitesi ayarı
4 | *Arama geçmişi durdurma ve temizleme
5 | *Yedekle ve geri yükle
6 | *SOCKS proxy desteği
7 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/Icon.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Icon(
7 | val iconType: String,
8 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Discord RPC support
2 | - In-app update checker
3 | - Player text alignment customization
4 | - Exclude downloaded files in auto backup
5 | - Fix random crash
6 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/22.txt:
--------------------------------------------------------------------------------
1 | - Corrección de fallos aleatorios frecuentes
2 | - Arreglar fallo al buscar letras
3 | - Actualización Material 3
4 | - Desplazamiento automático a la canción que se está reproduciendo en la cola
5 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/extensions/UtilExt.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.extensions
2 |
3 | fun tryOrNull(block: () -> T): T? =
4 | try {
5 | block()
6 | } catch (e: Exception) {
7 | null
8 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/AccountInfo.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | data class AccountInfo(
4 | val name: String,
5 | val email: String?,
6 | val channelHandle: String?,
7 | )
8 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/SearchSuggestions.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | data class SearchSuggestions(
4 | val queries: List,
5 | val recommendedItems: List,
6 | )
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/tracks/Artists.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify.tracks
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Artist(
7 | val name: String
8 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/LocalItem.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | sealed class LocalItem {
4 | abstract val id: String
5 | abstract val title: String
6 | abstract val thumbnailUrl: String?
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/playlists/Images.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify.playlists
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Images(
7 | val url:String
8 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/ui/screens/settings/import_from_spotify/model/Playlist.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.ui.screens.settings.import_from_spotify.model
2 |
3 | data class Playlist(
4 | val name: String,
5 | val id: String
6 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/24.txt:
--------------------------------------------------------------------------------
1 | - Smoother navigation animation
2 | - Option to hide explicit content
3 | - Add squiggly slider
4 | - Fix album artist error and add refetch album button
5 | - Fix color mismatch
6 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/kugou/src/main/java/com/babelsoftware/kugou/models/DownloadLyricsResponse.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.kugou.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class DownloadLyricsResponse(
7 | val content: String,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/ItemsPage.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import com.babelsoftware.innertube.models.YTItem
4 |
5 | data class ItemsPage(
6 | val items: List,
7 | val continuation: String?,
8 | )
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/21.txt:
--------------------------------------------------------------------------------
1 | - Arreglar la radio no funciona
2 | - Aviso de lista de reproducción duplicada
3 | - Añadir proveedor de letras LrcLib
4 | - Añadir marquesina
5 | - Añadir retroalimentación háptica
6 | - Reproductor negro en modo negro puro
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/app_widget_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/16.txt:
--------------------------------------------------------------------------------
1 | - New app icon
2 | - Rewrite UI using Jetpack Compose
3 | - Better UI/UX
4 | - Dynamic theme
5 | - Redesigned home screen
6 | - Improved download experience
7 | - New lyrics source: YouTube subtitle
8 | - Show replay button when playing ended
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/YouTubeLocale.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class YouTubeLocale(
7 | val gl: String,
8 | val hl: String,
9 | )
10 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/response/CreatePlaylistResponse.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.response
2 |
3 | import kotlinx.serialization.Serializable
4 | @Serializable
5 | data class CreatePlaylistResponse(
6 | val playlistId: String
7 | )
--------------------------------------------------------------------------------
/kizzy/src/main/java/com/my/kizzy/remote/ApiResponse.kt:
--------------------------------------------------------------------------------
1 | package com.my.kizzy.remote
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class ApiResponse(
8 | @SerialName("id")
9 | val id: String,
10 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/6.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Se solucionó el problema de que YouTube no reproducía ninguna transmisión #27, TeamNewPipe/NewPipe#8202
4 | * Se soluciona el problema de la limitación de edad de los videos de YouTube TeamNewPipe/NewPipeExtractor#832
5 |
--------------------------------------------------------------------------------
/app/src/foss/java/com/babelsoftware/loudly/TranslationHelper.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly
2 |
3 | import com.babelsoftware.loudly.db.entities.LyricsEntity
4 |
5 | object TranslationHelper {
6 | fun translate(lyrics: LyricsEntity): LyricsEntity = lyrics
7 | fun clearModels() {}
8 | }
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/20.txt:
--------------------------------------------------------------------------------
1 | - Corregir los cambios de la API de YouTube
2 | - Mostrar primero los álbumes de artistas de la biblioteca en las novedades
3 | - Más acciones en Android Auto
4 | - Pulsación larga en la flecha atrás para ir al inicio
5 | - Más mejoras y correcciones
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Suporte ao Discord RPC
2 | - Verificação de atualizações no app
3 | - Customização do alinhamento do texto do reprodutor
4 | - Downloads agora são excluídos do backup do Android
5 | - Corrigir um crash aleatório
6 | - Outras correções e melhorias
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Jun 29 11:18:28 MSK 2025
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-rc-1-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/pages/LibraryContinuationPage.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.pages
2 |
3 | import com.babelsoftware.innertube.models.YTItem
4 |
5 | data class LibraryContinuationPage(
6 | val items: List,
7 | val continuation: String?,
8 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/12.txt:
--------------------------------------------------------------------------------
1 | * Iniciar la radio desde las canciones de la biblioteca
2 | * Configuración de pestaña abierta por defecto
3 | * Configuración de la calidad del audio
4 | * Pausa o borrar el historial de búsqueda
5 | * Copia de seguridad y restauración
6 | * Admite proxy SOCKS
7 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/pages/PlaylistContinuationPage.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.pages
2 |
3 | import com.babelsoftware.innertube.models.SongItem
4 |
5 | data class PlaylistContinuationPage(
6 | val songs: List,
7 | val continuation: String?,
8 | )
9 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/pages/ExplorePage.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.pages
2 |
3 | import com.babelsoftware.innertube.models.AlbumItem
4 |
5 | data class ExplorePage(
6 | val newReleaseAlbums: List,
7 | val moodAndGenres: List,
8 | )
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/app_widget_inner_view_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/SongWithPlayCount.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import androidx.room.Embedded
4 | import com.babelsoftware.loudly.db.entities.Song
5 |
6 | data class SongWithPlayCount(
7 | @Embedded
8 | val song: Song,
9 | val playCount: Int
10 | )
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/8.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix main content resize animation
4 | * Fix dark theme malfunction #69
5 | * Fix renaming an artist can lead to lose songs #75
6 |
7 |
Translation updates
8 |
9 | * Finnish (by @teemue) #67
10 | * Italian (by @airon90) #71
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_album_art_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/24.txt:
--------------------------------------------------------------------------------
1 | - Animación de navegación más fluida
2 | - Opción para ocultar contenido explícito
3 | - Añadir control deslizante
4 | - Arreglar el error del artista del álbum y añadir un botón para recuperar el álbum
5 | - Corrección del desajuste de colores
6 | - Otras correcciones y mejoras
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-TW/full_description.txt:
--------------------------------------------------------------------------------
1 | 一個 YouTube Music 用戶端,使用 Material 3 風格
2 |
3 |
功能:
4 |
5 | - 無廣告播放 Youtube/Youtube Music 中的歌曲
6 | - 背景播放
7 | - 搜尋歌曲、影片、專輯和播放清單
8 | - 可下載並離線播放
9 | - 同步歌詞
10 | - 跳過無聲片段
11 | - 標準化音量
12 | - 動態主題
13 | - 支援 Android Auto
14 | - 個人化推薦曲目
15 | - Material 3 風格
16 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/pages/ArtistItemsContinuationPage.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.pages
2 |
3 |
4 | import com.babelsoftware.innertube.models.YTItem
5 |
6 | data class ArtistItemsContinuationPage(
7 | val items: List,
8 | val continuation: String?,
9 | )
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/Tracks.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class Tracks(
8 | @SerialName("total")
9 | val totalTracksCount: Int
10 | )
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | Music is now renamed to Loudly!
2 |
3 | - Player redesign
4 | - Queue redesign
5 | - Cache songs
6 | - Stats for nerds
7 | - Persistent queue
8 | - Add built-in playlist (liked, downloaded)
9 | - Set cache limits
10 | - Sort songs by play time
11 | - Customize navigation tabs
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/PersistQueue.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import java.io.Serializable
4 |
5 | data class PersistQueue(
6 | val title: String?,
7 | val items: List,
8 | val mediaItemIndex: Int,
9 | val position: Long,
10 | ) : Serializable
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/album_art_gradient.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 | 0dp
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/SpotifyUserProfile.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class SpotifyUserProfile(
8 | @SerialName("display_name")
9 | val displayName: String
10 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/tracks/Track.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify.tracks
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class Track(
8 | @SerialName("track")
9 | val trackItem: TrackItem
10 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | * Material You #25
2 | * Dark mode settings
3 | * Show an icon indicating if a song is in your library in search fragment
4 | * Make search filter bar fixed
5 | * Move song downloaded icon to second line
6 | * Smoother transition animation
7 | * Merge artists with same name (#50)
8 | * Minor fixes
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/23.txt:
--------------------------------------------------------------------------------
1 | - Compatibilidad con Discord RPC
2 | - Comprobador de actualizaciones en la aplicación
3 | - Personalización de la alineación del texto del reproductor
4 | - Excluir archivos descargados en la copia de seguridad automática
5 | - Corrección de fallos aleatorios
6 | - Otras correcciones y mejoras
7 |
--------------------------------------------------------------------------------
/kizzy/src/main/java/com/my/kizzy/gateway/entities/presence/Metadata.kt:
--------------------------------------------------------------------------------
1 | package com.my.kizzy.gateway.entities.presence
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class Metadata(
8 | @SerialName("button_urls")
9 | val buttonUrls: List?,
10 | )
--------------------------------------------------------------------------------
/app/src/full/java/com/babelsoftware/loudly/Utils.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly
2 |
3 | import com.google.firebase.crashlytics.ktx.crashlytics
4 | import com.google.firebase.ktx.Firebase
5 |
6 | fun reportException(throwable: Throwable) {
7 | Firebase.crashlytics.recordException(throwable)
8 | throwable.printStackTrace()
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/extensions/ListExt.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.extensions
2 |
3 | fun List.reversed(reversed: Boolean) = if (reversed) asReversed() else this
4 |
5 | fun MutableList.move(fromIndex: Int, toIndex: Int): MutableList {
6 | add(toIndex, removeAt(fromIndex))
7 | return this
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/SimilarRecommendation.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import com.babelsoftware.innertube.models.YTItem
4 | import com.babelsoftware.loudly.db.entities.LocalItem
5 |
6 | data class SimilarRecommendation(
7 | val title: LocalItem,
8 | val items: List,
9 | )
10 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/PlaylistDeleteBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 | @Serializable
6 | data class PlaylistDeleteBody(
7 | val context: Context,
8 | val playlistId: String
9 | )
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/SubscribeBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 | @Serializable
6 | data class SubscribeBody(
7 | val channelIds: List,
8 | val context: Context,
9 | )
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/9.txt:
--------------------------------------------------------------------------------
1 |
Fixed
2 |
3 | * Fix stream can't be played (#148)
4 | * Fix bottom navigation item isn't checked when clicked (#12)
5 |
6 |
Translation updates
7 |
8 | * Korean (by @dongsu8142) #107
9 | * Spanish (by @DD21S) #120
10 | * Japanese (by @HiSubway) #138
11 | * Swedish (by @Itroublve) #143
--------------------------------------------------------------------------------
/material-color-utilities/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("java-library")
3 | }
4 |
5 | java {
6 | sourceCompatibility = JavaVersion.VERSION_1_8
7 | targetCompatibility = JavaVersion.VERSION_1_8
8 | }
9 |
10 | dependencies {
11 | compileOnly("com.google.errorprone:error_prone_core:2.37.0")
12 | implementation(libs.annotation)
13 | }
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | * App updater (Preview)
2 | * Share button function in bottom control fragment
3 | * Open YouTube urls by this app #11
4 | * You can now search for YouTube Music albums
5 | * Remove download of a song
6 | * Show channel or playlist name in search fragment title
7 | * Scrollable search filter chip group
8 | * Minor fixes
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/GetTranscriptBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class GetTranscriptBody(
8 | val context: Context,
9 | val params: String,
10 | )
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/16.txt:
--------------------------------------------------------------------------------
1 | - Nuevo icono de la aplicación
2 | - Reescritura de la interfaz de usuario con Jetpack Compose
3 | - Mejor UI/UX
4 | - Tema dinámico
5 | - Pantalla de inicio rediseñada
6 | - Experiencia de descarga mejorada
7 | - Nueva fuente de letras: Subtítulos de YouTube
8 | - Mostrar el botón de repetición al finalizar la reproducción
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/signal_cellular_alt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | Müziğin ismi artık Loudly oldu!
2 |
3 | -Oynatma arayüzü değiştirildi
4 | -Çalma sırası değiştirildi
5 | -Meraklısı için istatistikler
6 | -Kalıcı çalma sırası
7 | -Dahili oynatma listesi (beğenilenler, indirilenler)
8 | -Önbellek sınırı ayarlama
9 | -En son çalmaya göre sıralama
10 | -Navigasyon sekmelerini kişiselleştirme
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | 适用于 Android 的 YouTube Music 客户端,采用 Material 3 设计
2 |
3 |
特点:
4 |
5 | - 无广告播放 YouTube/YouTube Music 中的歌曲
6 | - 后台播放
7 | - 从 YouTube Music 搜索歌曲、视频、专辑和播放列表
8 | - 媒体库管理
9 | - 缓存和下载歌曲以供离线播放
10 | - 同步歌词
11 | - 跳过无声片段
12 | - 标准化音量
13 | - 动态主题
14 | - 良好的本地化
15 | - 支持 Android Auto
16 | - 个性化歌曲快选
17 | - Material 3 设计
18 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/GetSearchSuggestionsBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class GetSearchSuggestionsBody(
8 | val context: Context,
9 | val input: String,
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_filled.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_icon_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/MusicDescriptionShelfRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicDescriptionShelfRenderer(
7 | val header: Runs?,
8 | val subheader: Runs?,
9 | val description: Runs,
10 | val footer: Runs?,
11 | )
12 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/SearchBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class SearchBody(
8 | val context: Context,
9 | val query: String?,
10 | val params: String?,
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/SetVideoIdEntity.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.PrimaryKey
5 | @Entity(tableName = "set_video_id")
6 | data class SetVideoIdEntity(
7 | @PrimaryKey(autoGenerate = false)
8 | val videoId: String = "",
9 | val setVideoId: String? = null,
10 | )
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/ui/utils/ShapeUtils.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.ui.utils
2 |
3 | import androidx.compose.foundation.shape.CornerBasedShape
4 | import androidx.compose.foundation.shape.CornerSize
5 | import androidx.compose.ui.unit.dp
6 |
7 | fun CornerBasedShape.top(): CornerBasedShape =
8 | copy(bottomStart = CornerSize(0.dp), bottomEnd = CornerSize(0.dp))
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/kizzy/src/main/java/com/my/kizzy/gateway/entities/presence/Timestamps.kt:
--------------------------------------------------------------------------------
1 | package com.my.kizzy.gateway.entities.presence
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class Timestamps(
8 | @SerialName("end")
9 | val end: Long? = null,
10 | @SerialName("start")
11 | val start: Long? = null,
12 | )
--------------------------------------------------------------------------------
/app/src/main/res/drawable/remove.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/wifi.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/GetQueueBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class GetQueueBody(
8 | val context: Context,
9 | val videoIds: List?,
10 | val playlistId: String?,
11 | )
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | - Lyrics
2 | - Android Auto support
3 | - Skip silence
4 | - Audio normalization
5 | - Export downloaded songs via SAF
6 | - Improve player view layout
7 | - Add wake lock for player
8 | - Option to hide buttons in player notification
9 | - Delete persistent queue when restoring database
10 | - Show itag in stats for nerds
11 | - Minor changes and fixes
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/Badges.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Badges(
7 | val musicInlineBadgeRenderer: MusicInlineBadgeRenderer?,
8 | ) {
9 | @Serializable
10 | data class MusicInlineBadgeRenderer(
11 | val icon: Icon,
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/Thumbnails.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Thumbnails(
7 | val thumbnails: List,
8 | )
9 |
10 | @Serializable
11 | data class Thumbnail(
12 | val url: String,
13 | val width: Int?,
14 | val height: Int?,
15 | )
16 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/7.txt:
--------------------------------------------------------------------------------
1 | * Material You #25
2 | * Configuración del modo oscuro
3 | * Mostrar un icono indicando si una canción está en su biblioteca en fragmento de búsqueda
4 | * Hacer fija la barra de filtros de búsqueda
5 | * Mover el icono de canción descargada a la segunda línea
6 | * Animación de transición más suave
7 | * Fusionar artistas con el mismo nombre (#50)
8 | * Correcciones menores
9 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/BrowseBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class BrowseBody(
8 | val context: Context,
9 | val browseId: String?,
10 | val params: String?,
11 | val continuation: String?
12 | )
13 |
--------------------------------------------------------------------------------
/kizzy/src/main/java/com/my/kizzy/gateway/entities/Resume.kt:
--------------------------------------------------------------------------------
1 | package com.my.kizzy.gateway.entities
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class Resume(
8 | @SerialName("seq")
9 | val seq: Int,
10 | @SerialName("session_id")
11 | val sessionId: String?,
12 | @SerialName("token")
13 | val token: String,
14 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/utils/ItemWrapper.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.utils
2 |
3 | import androidx.compose.runtime.mutableStateOf
4 |
5 | class ItemWrapper(val item: T) {
6 | private val _isSelected = mutableStateOf(false)
7 |
8 | var isSelected: Boolean
9 | get() = _isSelected.value
10 | set(value) {
11 | _isSelected.value = value
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/8.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Corregir la animación de cambio de tamaño del contenido principal
4 | * Se solucionó el problema del tema oscuro n.° 69
5 | * Se solucionó que cambiar el nombre de un artista pudiera provocar la pérdida de canciones #75
6 |
7 |
Actualizaciones de traducción
8 |
9 | * Finlandés (por @teemue) #67
10 | * Italiano (por @airon90) #71
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tag.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/13.txt:
--------------------------------------------------------------------------------
1 | ¡La aplicación Music ahora se llama Loudly!
2 |
3 | - Rediseño del reproductor
4 | - Rediseño de la cola
5 | - Almacenar canciones en caché
6 | - Estadísticas para nerds
7 | - Cola persistente
8 | - Añadir listas de reproducción (me gusta, descargadas)
9 | - Establecer límites de caché
10 | - Ordenar canciones por tiempo de reproducción
11 | - Personalizar pestañas de navegación
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/LyricsEntity.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.PrimaryKey
5 |
6 | @Entity(tableName = "lyrics")
7 | data class LyricsEntity(
8 | @PrimaryKey val id: String,
9 | val lyrics: String,
10 | ) {
11 | companion object {
12 | const val LYRICS_NOT_FOUND = "LYRICS_NOT_FOUND"
13 | }
14 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_control_chip_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/MusicPlaylistShelfRenderer.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class MusicPlaylistShelfRenderer(
7 | val playlistId: String?,
8 | val contents: List,
9 | val collapsedItemCount: Int,
10 | val continuations: List?,
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/PlaylistSong.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.Embedded
4 | import androidx.room.Relation
5 |
6 | data class PlaylistSong(
7 | @Embedded val map: PlaylistSongMap,
8 | @Relation(
9 | parentColumn = "songId",
10 | entityColumn = "id",
11 | entity = SongEntity::class
12 | )
13 | val song: Song,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_upward.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/9.txt:
--------------------------------------------------------------------------------
1 |
Reparado
2 |
3 | * Se solucionó el problema de que la transmisión no se puede reproducir (#148)
4 | * Se solucionó que el elemento de navegación inferior no se marcara al hacer clic (#12)
5 |
6 |
Actualizaciones de traducción
7 |
8 | * Coreano (por @dongsu8142) #107
9 | * Español(por @DD21S) #120
10 | * Japonés (por @HiSubway) #138
11 | * Sueco (por @Itroublve) #143
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_downward.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_top_left.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/15.txt:
--------------------------------------------------------------------------------
1 | Improvement
2 |
3 | - Add shuffle button in Android Auto
4 |
5 | Fixed
6 |
7 | - Fix apostrophe displayed as HTML entity in lyrics #401
8 | - Update YouTube search filter key #436
9 | - Fix #432
10 |
11 | Translation
12 |
13 | - Update Hungarian translation #407 #425
14 | - Add Indonesia translation #415
15 | - Update Simplified Chinese translation #416
16 | - Update Japanese translation #419
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/SubscriptionButton.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 | @Serializable
5 | data class SubscriptionButton(
6 | val subscribeButtonRenderer: SubscribeButtonRenderer,
7 | ) {
8 | @Serializable
9 | data class SubscribeButtonRenderer(
10 | val subscribed: Boolean,
11 | val channelId: String,
12 | )
13 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/navigate_next.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/25.txt:
--------------------------------------------------------------------------------
1 | - Revamped home screen
2 | - Multi-select in queue and playlists
3 | - Add queue item menu
4 | - Search in playlists
5 | - Option to change grid cell size
6 | - Option to stop music when the app is killed
7 | - Option to auto skip to next song on error
8 | - Click on bottom navigation item again to scroll to top
9 | - Refetch song button
10 | - Fix repetitions in history
11 | - Other fixes and enhancements
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/ui/utils/NavControllerUtils.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.ui.utils
2 |
3 | import androidx.compose.ui.util.fastAny
4 | import androidx.navigation.NavController
5 | import com.babelsoftware.loudly.ui.screens.Screens
6 |
7 | fun NavController.backToMain() {
8 | while (!Screens.Companion.MainScreens.fastAny { it.route == currentBackStackEntry?.destination?.route }) {
9 | navigateUp()
10 | }
11 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/AccountMenuBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class AccountMenuBody(
8 | val context: Context,
9 | val deviceTheme: String = "DEVICE_THEME_SELECTED",
10 | val userInterfaceTheme: String = "USER_INTERFACE_THEME_DARK",
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/headphones.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/5.txt:
--------------------------------------------------------------------------------
1 | * Actualizador de aplicaciones (Previsualizar)
2 | * Compartir la función del botón en el fragmento de control inferior
3 | * Abrir URL de YouTube por esta aplicación #11
4 | * Ahora puedes buscar álbumes de YouTube Music
5 | * Eliminar la descarga de una canción
6 | * Mostrar el nombre del canal o lista de reproducción en el título del fragmento de búsqueda
7 | * Búsqueda desplazable filtro chip grupo
8 | * Correcciones menores
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/logout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/widget_info.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/arrow_forward.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | -Altyazılar
2 | -Android Auto desteği
3 | -Sessizliği atla özelliği
4 | -Ses normalleştirme özelliği
5 | -SAF üzerinden indirilen müzikleri dışa aktarma
6 | -Oynatıcı görüntüsünde geliştirmeler
7 | -Oynatıcıya uyanma kilidi ekle
8 | -Oynatıcı bildirimini gizleme ayarı
9 | -Yedek geri yüklendiğinde çalma listesindeki kalıcı müziği silme
10 | -Meraklısı için istatistiklerde itag eklendi
11 | -Diğer ufak değişikliler ve düzeltmeler
12 |
--------------------------------------------------------------------------------
/lrclib/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | kotlin("jvm")
3 | alias(libs.plugins.kotlin.serialization)
4 | }
5 |
6 | kotlin {
7 | jvmToolchain(17)
8 | }
9 |
10 | dependencies {
11 | implementation(libs.ktor.client.core)
12 | implementation(libs.ktor.client.okhttp)
13 | implementation(libs.ktor.client.content.negotiation)
14 | implementation(libs.ktor.serialization.json)
15 | implementation(libs.ktor.client.encoding)
16 | testImplementation(libs.junit)
17 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/save.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/values.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @drawable/play
5 | @drawable/pause
6 | @drawable/skip_previous
7 | @drawable/skip_next
8 |
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/Button.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models
2 |
3 | import kotlinx.serialization.Serializable
4 |
5 | @Serializable
6 | data class Button(
7 | val buttonRenderer: ButtonRenderer,
8 | ) {
9 | @Serializable
10 | data class ButtonRenderer(
11 | val text: Runs,
12 | val navigationEndpoint: NavigationEndpoint?,
13 | val command: NavigationEndpoint?,
14 | val icon: Icon?,
15 | )
16 | }
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/response/GetQueueResponse.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.response
2 |
3 | import com.babelsoftware.innertube.models.PlaylistPanelRenderer
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class GetQueueResponse(
8 | val queueDatas: List,
9 | ) {
10 | @Serializable
11 | data class QueueData(
12 | val content: PlaylistPanelRenderer.Content,
13 | )
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/lyrics/LyricsEntry.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.lyrics
2 |
3 | data class LyricsEntry(
4 | val time: Long,
5 | val text: String,
6 | var translatedText: String? = null,
7 | var isTranslation: Boolean = false
8 | ) : Comparable {
9 | override fun compareTo(other: LyricsEntry): Int = (time - other.time).toInt()
10 |
11 | companion object {
12 | val HEAD_LYRICS_ENTRY = LyricsEntry(0L, "")
13 | }
14 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/content_copy.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/notification_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_done.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/security.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/EventWithSong.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.compose.runtime.Immutable
4 | import androidx.room.Embedded
5 | import androidx.room.Relation
6 |
7 | @Immutable
8 | data class EventWithSong(
9 | @Embedded
10 | val event: Event,
11 | @Relation(
12 | entity = SongEntity::class,
13 | parentColumn = "songId",
14 | entityColumn = "id"
15 | )
16 | val song: Song,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/SearchHistory.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.Entity
4 | import androidx.room.Index
5 | import androidx.room.PrimaryKey
6 |
7 | @Entity(
8 | tableName = "search_history",
9 | indices = [Index(
10 | value = ["query"],
11 | unique = true
12 | )]
13 | )
14 | data class SearchHistory(
15 | @PrimaryKey(autoGenerate = true) val id: Long = 0,
16 | val query: String,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/SortedSongAlbumMap.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.DatabaseView
5 |
6 | @DatabaseView(
7 | viewName = "sorted_song_album_map",
8 | value = "SELECT * FROM song_album_map ORDER BY `index`")
9 | data class SortedSongAlbumMap(
10 | @ColumnInfo(index = true) val songId: String,
11 | @ColumnInfo(index = true) val albumId: String,
12 | val index: Int,
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/extensions/FileExt.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.extensions
2 |
3 | import java.io.File
4 | import java.io.InputStream
5 | import java.io.OutputStream
6 | import java.util.zip.ZipInputStream
7 | import java.util.zip.ZipOutputStream
8 |
9 | operator fun File.div(child: String): File = File(this, child)
10 |
11 | fun InputStream.zipInputStream(): ZipInputStream = ZipInputStream(this)
12 | fun OutputStream.zipOutputStream(): ZipOutputStream = ZipOutputStream(this)
--------------------------------------------------------------------------------
/innertube/src/main/java/com/babelsoftware/innertube/models/body/NextBody.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.innertube.models.body
2 |
3 | import com.babelsoftware.innertube.models.Context
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class NextBody(
8 | val context: Context,
9 | val videoId: String?,
10 | val playlistId: String?,
11 | val playlistSetVideoId: String?,
12 | val index: Int?,
13 | val params: String?,
14 | val continuation: String?,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/tracks/TrackItem.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify.tracks
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class TrackItem(
8 | val type: String,
9 | @SerialName("id")
10 | val trackId: String,
11 | @SerialName("name")
12 | val trackName: String,
13 | @SerialName("is_local")
14 | val isLocal: Boolean,
15 | val artists:List
16 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/playback/queues/EmptyQueue.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.playback.queues
2 |
3 | import androidx.media3.common.MediaItem
4 | import com.babelsoftware.loudly.models.MediaMetadata
5 |
6 | object EmptyQueue : Queue {
7 | override val preloadItem: MediaMetadata? = null
8 | override suspend fun getInitialStatus() = Queue.Status(null, emptyList(), -1)
9 | override fun hasNextPage() = false
10 | override suspend fun nextPage() = emptyList()
11 | }
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/changelogs/14.txt:
--------------------------------------------------------------------------------
1 | - Letras
2 | - Compatibilidad con Android Auto
3 | - Saltar silencio
4 | - Normalización de audio
5 | - Exportar canciones descargadas mediante SAF
6 | - Mejora del diseño de la vista del reproductor
7 | - Añadir bloqueo de despertador para el reproductor
8 | - Opción de ocultar botones en la notificación del reproductor
9 | - Eliminar la cola persistente al restaurar la base de datos
10 | - Mostrar itag en estadísticas para nerds
11 | - Cambios y correcciones menores
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/db/entities/SortedSongArtistMap.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.db.entities
2 |
3 | import androidx.room.ColumnInfo
4 | import androidx.room.DatabaseView
5 |
6 | @DatabaseView(
7 | viewName = "sorted_song_artist_map",
8 | value = "SELECT * FROM song_artist_map ORDER BY position")
9 | data class SortedSongArtistMap(
10 | @ColumnInfo(index = true) val songId: String,
11 | @ColumnInfo(index = true) val artistId: String,
12 | val position: Int,
13 | )
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/SpotifyAuthResponse.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class SpotifyAuthResponse(
8 | @SerialName("access_token")
9 | val accessToken: String
10 |
11 | /*
12 | only `access_token` is required for the import process.
13 | the spotify servers will be triggered again if a new import needs to be made.
14 | */
15 |
16 | )
--------------------------------------------------------------------------------
/app/src/main/java/com/babelsoftware/loudly/models/spotify/tracks/SpotifyResultPaginatedResponse.kt:
--------------------------------------------------------------------------------
1 | package com.babelsoftware.loudly.models.spotify.tracks
2 |
3 | import kotlinx.serialization.SerialName
4 | import kotlinx.serialization.Serializable
5 |
6 | @Serializable
7 | data class SpotifyResultPaginatedResponse(
8 | @SerialName("total")
9 | val totalCountOfLikedSongs: Int,
10 | @SerialName("next")
11 | val nextPaginatedUrl: String? = null,
12 | @SerialName("items")
13 | val tracks: List