Compare commits
No commits in common. "151a440e7ea07f1b83a10ebcd7327daa77a6bc46" and "216fdadf2563e39bf1a776afba8f83abd2e32df5" have entirely different histories.
151a440e7e
...
216fdadf25
63
CHANGELOG.md
@ -1,68 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [5.0.0](https://github.com/KRTirtho/spotube/compare/v4.0.2...v5.0.0) (2025-09-08)
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
- Add ISRC track search for YouTube ([#2594](https://github.com/KRTirtho/spotube/issues/2594))
|
|
||||||
- Add new icons #2676 by @alexio-dev ([#2678](https://github.com/KRTirtho/spotube/issues/2678))
|
|
||||||
- Add connect confirmation dialog
|
|
||||||
- Add metadata api service and models
|
|
||||||
- **metadata-plugin**: Add pagination support, feed and playlist CRUD endpoints
|
|
||||||
- **metadata-plugin**: Add local storage api
|
|
||||||
- Add webview, totp and setInterval apis for plugins
|
|
||||||
- Enhance local storage and webview APIs with improved error handling and resource management
|
|
||||||
- **metadata_plugin**: Add logout method
|
|
||||||
- Update plugin configuration with more fields
|
|
||||||
- Implement metadata plugins based on hetu
|
|
||||||
- Update models to match hetu_spotube_plugin signature
|
|
||||||
- Add user endpoint calls in metadata and paginated async notifiers
|
|
||||||
- Add playlist endpoint and providers
|
|
||||||
- Add albums metadata endpoint and provider
|
|
||||||
- Add artist and album providers
|
|
||||||
- Add track endpoint for metadata service
|
|
||||||
- Remove green corp names formally
|
|
||||||
- **metadata**: Add plugin form
|
|
||||||
- Add support for entity specific search
|
|
||||||
- Enhance image handling
|
|
||||||
- Add support for automatic plugin repository from github and codeberg
|
|
||||||
- Use isolate for youtube_explode engine
|
|
||||||
- Add repository and plugin API version fields to metadata plugins
|
|
||||||
- Update new pipe version
|
|
||||||
- **metadata**: Add plugin update checker and dialog for available updates
|
|
||||||
- Optimize track options and related artists
|
|
||||||
- Add plugin scrobbling support and support button
|
|
||||||
- Add ErrorBox and NoDefaultMetadataPlugin components
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
- Calling /track/:streamId endpoint causes active sourced track to be anything
|
|
||||||
- **mobile**: Dialogs in bottom sheet are not opening
|
|
||||||
- Default accent color is orange but it shows blue in settings
|
|
||||||
- Artist images are not loading up
|
|
||||||
- CVE: Remote path traversal through websocket when devices are on same network
|
|
||||||
- Endless playback not working
|
|
||||||
- **android**: NewPipe invalid search content filters
|
|
||||||
- Make YoutubeExplode engine faster
|
|
||||||
- Create and delete playlist not working
|
|
||||||
- Local track not working and images of local not showing up
|
|
||||||
- Local playback not working for tracks with special # (hashtag) characters
|
|
||||||
- Inaccessible streaming url causing rapid skips
|
|
||||||
- **yt**: Fallback to different search result if all streaming url is inaccessible
|
|
||||||
- **playback**: Skip network requests if cached file already exists
|
|
||||||
- Yt-dlp playback not working and add partial support for HLS streaming
|
|
||||||
- Windows webview2 environment permission issue
|
|
||||||
- **playback**: Play not fetching full playlist if playlist is too long
|
|
||||||
- **track_options**: Tapping on option doesn't close the menu
|
|
||||||
- **playback**: Alternative track sources switch not working
|
|
||||||
- **ui**: Lyrics white text in white background and small player buttons
|
|
||||||
|
|
||||||
### Translation
|
|
||||||
|
|
||||||
- Add Traditional Chinese translation ([#2762](https://github.com/KRTirtho/spotube/issues/2762))
|
|
||||||
- Fix Japanese translations ([#2732](https://github.com/KRTirtho/spotube/issues/2732))
|
|
||||||
- Correction of the dutch language ([#1306](https://github.com/KRTirtho/spotube/issues/1306))
|
|
||||||
|
|
||||||
## [4.0.2](https://github.com/krtirtho/spotube/compare/v4.0.1...v4.0.2) (2025-03-16)
|
## [4.0.2](https://github.com/krtirtho/spotube/compare/v4.0.1...v4.0.2) (2025-03-16)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
@ -119,7 +119,7 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/KRTirt
|
|||||||
|
|
||||||
Do the following:
|
Do the following:
|
||||||
|
|
||||||
- Install [Dart](https://dart.dev/get-dart) and [fvm](https://fvm.app/documentation/getting-started/installation)
|
- Download the latest Flutter SDK (>=3.16.0) & enable desktop support
|
||||||
- Install Development dependencies in linux
|
- Install Development dependencies in linux
|
||||||
- Debian (>=12/Bookworm)/Ubuntu
|
- Debian (>=12/Bookworm)/Ubuntu
|
||||||
```bash
|
```bash
|
||||||
@ -138,11 +138,11 @@ Do the following:
|
|||||||
- Create a `.env` in root of the project following the `.env.example` template
|
- Create a `.env` in root of the project following the `.env.example` template
|
||||||
- Now run the following to bootstrap the project
|
- Now run the following to bootstrap the project
|
||||||
```bash
|
```bash
|
||||||
fvm flutter pub get && fvm dart run build_runner build --delete-conflicting-outputs
|
flutter pub get && dart run build_runner build --delete-conflicting-outputs --enable-experiment=records,patterns
|
||||||
```
|
```
|
||||||
- Finally run these following commands in the root of the project to start the Spotube Locally
|
- Finally run these following commands in the root of the project to start the Spotube Locally
|
||||||
```bash
|
```bash
|
||||||
fvm flutter run -d <window|macos|linux|(<android-device-id>)>
|
flutter run -d <window|macos|linux|(<android-device-id>)>
|
||||||
```
|
```
|
||||||
|
|
||||||
Do debugging/testing/build etc then submit to us with PR against the development branch (dev) & we'll review your code
|
Do debugging/testing/build etc then submit to us with PR against the development branch (dev) & we'll review your code
|
||||||
|
@ -18,10 +18,6 @@ Btw it's not just another Electron app 😉
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 🌃 Features
|
## 🌃 Features
|
||||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 39 KiB |
BIN
assets/branding/mobile-screenshots/android-6.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 172 KiB |
BIN
assets/branding/mobile-screenshots/combined.png
Normal file
After Width: | Height: | Size: 790 KiB |
Before Width: | Height: | Size: 771 KiB After Width: | Height: | Size: 1006 KiB |
@ -61,7 +61,7 @@ protect_breaking_commits = false
|
|||||||
commit_parsers = [
|
commit_parsers = [
|
||||||
{ message = "^feat", group = "<!-- 0 -->Features" },
|
{ message = "^feat", group = "<!-- 0 -->Features" },
|
||||||
{ message = "^fix", group = "<!-- 1 -->Bug Fixes" },
|
{ message = "^fix", group = "<!-- 1 -->Bug Fixes" },
|
||||||
{ message = "^translation", group = "<!-- 3 --> Translation" },
|
# { message = "^doc", group = "<!-- 3 -->📚 Documentation" },
|
||||||
# { message = "^perf", group = "<!-- 4 -->⚡ Performance" },
|
# { message = "^perf", group = "<!-- 4 -->⚡ Performance" },
|
||||||
# { message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
|
# { message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
|
||||||
# { message = "^style", group = "<!-- 5 -->🎨 Styling" },
|
# { message = "^style", group = "<!-- 5 -->🎨 Styling" },
|
||||||
|
123
ios/Podfile.lock
@ -1,16 +1,13 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- app_links (6.4.1):
|
- app_links (0.0.2):
|
||||||
- Flutter
|
- Flutter
|
||||||
- audio_service (0.0.1):
|
- audio_service (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
|
||||||
- audio_session (0.0.1):
|
- audio_session (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- bonsoir_darwin (0.0.1):
|
- bonsoir_darwin (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- connectivity_plus (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- DKImagePickerController/Core (4.3.4):
|
- DKImagePickerController/Core (4.3.4):
|
||||||
@ -49,8 +46,6 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- file_selector_ios (0.0.1):
|
- file_selector_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- fk_user_agent (2.0.0):
|
|
||||||
- Flutter
|
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_broadcasts (0.0.1):
|
- flutter_broadcasts (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -69,18 +64,16 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- flutter_sharing_intent (0.0.1):
|
- flutter_sharing_intent (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_timezone (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- home_widget (0.0.1):
|
- home_widget (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- image_picker_ios (0.0.1):
|
- image_picker_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- integration_test (0.0.1):
|
- integration_test (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- irondash_engine_context (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- media_kit_libs_ios_audio (1.0.4):
|
- media_kit_libs_ios_audio (1.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- media_kit_native_event_loop (1.0.0):
|
||||||
|
- Flutter
|
||||||
- metadata_god (0.0.1):
|
- metadata_god (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- open_file_ios (0.0.1):
|
- open_file_ios (0.0.1):
|
||||||
@ -102,33 +95,25 @@ PODS:
|
|||||||
- sqflite_darwin (0.0.4):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (3.50.4):
|
- sqlite3 (3.47.1):
|
||||||
- sqlite3/common (= 3.50.4)
|
- sqlite3/common (= 3.47.1)
|
||||||
- sqlite3/common (3.50.4)
|
- sqlite3/common (3.47.1)
|
||||||
- sqlite3/dbstatvtab (3.50.4):
|
- sqlite3/dbstatvtab (3.47.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/fts5 (3.50.4):
|
- sqlite3/fts5 (3.47.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/math (3.50.4):
|
- sqlite3/perf-threadsafe (3.47.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/perf-threadsafe (3.50.4):
|
- sqlite3/rtree (3.47.1):
|
||||||
- sqlite3/common
|
|
||||||
- sqlite3/rtree (3.50.4):
|
|
||||||
- sqlite3/common
|
|
||||||
- sqlite3/session (3.50.4):
|
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3_flutter_libs (0.0.1):
|
- sqlite3_flutter_libs (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (~> 3.50.4)
|
- sqlite3 (~> 3.47.1)
|
||||||
- sqlite3/dbstatvtab
|
- sqlite3/dbstatvtab
|
||||||
- sqlite3/fts5
|
- sqlite3/fts5
|
||||||
- sqlite3/math
|
|
||||||
- sqlite3/perf-threadsafe
|
- sqlite3/perf-threadsafe
|
||||||
- sqlite3/rtree
|
- sqlite3/rtree
|
||||||
- sqlite3/session
|
|
||||||
- super_native_extensions (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- SwiftyGif (5.4.4)
|
- SwiftyGif (5.4.4)
|
||||||
- system_theme (0.0.1):
|
- system_theme (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -137,14 +122,12 @@ PODS:
|
|||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- app_links (from `.symlinks/plugins/app_links/ios`)
|
- app_links (from `.symlinks/plugins/app_links/ios`)
|
||||||
- audio_service (from `.symlinks/plugins/audio_service/darwin`)
|
- audio_service (from `.symlinks/plugins/audio_service/ios`)
|
||||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
- bonsoir_darwin (from `.symlinks/plugins/bonsoir_darwin/darwin`)
|
- bonsoir_darwin (from `.symlinks/plugins/bonsoir_darwin/darwin`)
|
||||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
- file_selector_ios (from `.symlinks/plugins/file_selector_ios/ios`)
|
- file_selector_ios (from `.symlinks/plugins/file_selector_ios/ios`)
|
||||||
- fk_user_agent (from `.symlinks/plugins/fk_user_agent/ios`)
|
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_broadcasts (from `.symlinks/plugins/flutter_broadcasts/ios`)
|
- flutter_broadcasts (from `.symlinks/plugins/flutter_broadcasts/ios`)
|
||||||
- flutter_discord_rpc (from `.symlinks/plugins/flutter_discord_rpc/ios`)
|
- flutter_discord_rpc (from `.symlinks/plugins/flutter_discord_rpc/ios`)
|
||||||
@ -152,12 +135,11 @@ DEPENDENCIES:
|
|||||||
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
|
||||||
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||||
- flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`)
|
- flutter_sharing_intent (from `.symlinks/plugins/flutter_sharing_intent/ios`)
|
||||||
- flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`)
|
|
||||||
- home_widget (from `.symlinks/plugins/home_widget/ios`)
|
- home_widget (from `.symlinks/plugins/home_widget/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
||||||
- irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`)
|
|
||||||
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
- media_kit_libs_ios_audio (from `.symlinks/plugins/media_kit_libs_ios_audio/ios`)
|
||||||
|
- media_kit_native_event_loop (from `.symlinks/plugins/media_kit_native_event_loop/ios`)
|
||||||
- metadata_god (from `.symlinks/plugins/metadata_god/ios`)
|
- metadata_god (from `.symlinks/plugins/metadata_god/ios`)
|
||||||
- open_file_ios (from `.symlinks/plugins/open_file_ios/ios`)
|
- open_file_ios (from `.symlinks/plugins/open_file_ios/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
@ -166,7 +148,6 @@ DEPENDENCIES:
|
|||||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
||||||
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||||
- super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`)
|
|
||||||
- system_theme (from `.symlinks/plugins/system_theme/ios`)
|
- system_theme (from `.symlinks/plugins/system_theme/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
|
|
||||||
@ -183,21 +164,17 @@ EXTERNAL SOURCES:
|
|||||||
app_links:
|
app_links:
|
||||||
:path: ".symlinks/plugins/app_links/ios"
|
:path: ".symlinks/plugins/app_links/ios"
|
||||||
audio_service:
|
audio_service:
|
||||||
:path: ".symlinks/plugins/audio_service/darwin"
|
:path: ".symlinks/plugins/audio_service/ios"
|
||||||
audio_session:
|
audio_session:
|
||||||
:path: ".symlinks/plugins/audio_session/ios"
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
bonsoir_darwin:
|
bonsoir_darwin:
|
||||||
:path: ".symlinks/plugins/bonsoir_darwin/darwin"
|
:path: ".symlinks/plugins/bonsoir_darwin/darwin"
|
||||||
connectivity_plus:
|
|
||||||
:path: ".symlinks/plugins/connectivity_plus/ios"
|
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
file_picker:
|
file_picker:
|
||||||
:path: ".symlinks/plugins/file_picker/ios"
|
:path: ".symlinks/plugins/file_picker/ios"
|
||||||
file_selector_ios:
|
file_selector_ios:
|
||||||
:path: ".symlinks/plugins/file_selector_ios/ios"
|
:path: ".symlinks/plugins/file_selector_ios/ios"
|
||||||
fk_user_agent:
|
|
||||||
:path: ".symlinks/plugins/fk_user_agent/ios"
|
|
||||||
Flutter:
|
Flutter:
|
||||||
:path: Flutter
|
:path: Flutter
|
||||||
flutter_broadcasts:
|
flutter_broadcasts:
|
||||||
@ -212,18 +189,16 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
||||||
flutter_sharing_intent:
|
flutter_sharing_intent:
|
||||||
:path: ".symlinks/plugins/flutter_sharing_intent/ios"
|
:path: ".symlinks/plugins/flutter_sharing_intent/ios"
|
||||||
flutter_timezone:
|
|
||||||
:path: ".symlinks/plugins/flutter_timezone/ios"
|
|
||||||
home_widget:
|
home_widget:
|
||||||
:path: ".symlinks/plugins/home_widget/ios"
|
:path: ".symlinks/plugins/home_widget/ios"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
integration_test:
|
integration_test:
|
||||||
:path: ".symlinks/plugins/integration_test/ios"
|
:path: ".symlinks/plugins/integration_test/ios"
|
||||||
irondash_engine_context:
|
|
||||||
:path: ".symlinks/plugins/irondash_engine_context/ios"
|
|
||||||
media_kit_libs_ios_audio:
|
media_kit_libs_ios_audio:
|
||||||
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
:path: ".symlinks/plugins/media_kit_libs_ios_audio/ios"
|
||||||
|
media_kit_native_event_loop:
|
||||||
|
:path: ".symlinks/plugins/media_kit_native_event_loop/ios"
|
||||||
metadata_god:
|
metadata_god:
|
||||||
:path: ".symlinks/plugins/metadata_god/ios"
|
:path: ".symlinks/plugins/metadata_god/ios"
|
||||||
open_file_ios:
|
open_file_ios:
|
||||||
@ -240,53 +215,47 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/sqflite_darwin/darwin"
|
:path: ".symlinks/plugins/sqflite_darwin/darwin"
|
||||||
sqlite3_flutter_libs:
|
sqlite3_flutter_libs:
|
||||||
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
||||||
super_native_extensions:
|
|
||||||
:path: ".symlinks/plugins/super_native_extensions/ios"
|
|
||||||
system_theme:
|
system_theme:
|
||||||
:path: ".symlinks/plugins/system_theme/ios"
|
:path: ".symlinks/plugins/system_theme/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
app_links: 3dbc685f76b1693c66a6d9dd1e9ab6f73d97dc0a
|
app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
|
||||||
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
|
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
|
||||||
audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0
|
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
|
||||||
bonsoir_darwin: 29c7ccf356646118844721f36e1de4b61f6cbd0e
|
bonsoir_darwin: e3b8526c42ca46a885142df84229131dfabea842
|
||||||
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
|
||||||
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
|
|
||||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517
|
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
|
||||||
file_selector_ios: f92e583d43608aebc2e4a18daac30b8902845502
|
file_selector_ios: f0670c1064a8c8450e38145d8043160105d0b97c
|
||||||
fk_user_agent: 137145b086229251761678fe034da53753f4ce59
|
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||||
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
|
flutter_broadcasts: 3ece15b27d8ccbe2132c3df303e7c3401feab882
|
||||||
flutter_broadcasts: 7bb7cc1024900a7f85e98b6faab795290b7c2339
|
flutter_discord_rpc: e1c342f29ceb9dd76cdc01db59a70c93bb4d9ec5
|
||||||
flutter_discord_rpc: 0572e8227ea730c5afe5876a37c08c728ce95f3a
|
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
|
||||||
flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
|
flutter_native_splash: e8a1e01082d97a8099d973f919f57904c925008a
|
||||||
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
|
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
|
||||||
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
|
flutter_sharing_intent: e35380d0e1501d7111dbb7e46d5ac6339da6da98
|
||||||
flutter_sharing_intent: afdc98985814d2c01d8c0956a177d6b6dfbdc373
|
home_widget: 0434835a4c9a75704264feff6be17ea40e0f0d57
|
||||||
flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
|
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
|
||||||
home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f
|
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
|
||||||
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
|
media_kit_libs_ios_audio: 8f39d96a9c630685dfb844c289bd1d114c486fb3
|
||||||
integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e
|
media_kit_native_event_loop: 99111eded5acbdc9c2738021ea6550dd36ca8837
|
||||||
irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486
|
metadata_god: 4bbd8523cdb5d42c5e59d2fabad01ff8f4bc53f9
|
||||||
media_kit_libs_ios_audio: 905e6323b72e65c63ab9262b2e473f52c024a3a8
|
open_file_ios: 461db5853723763573e140de3193656f91990d9e
|
||||||
metadata_god: 018b59c2f3617569928550dcbd17481591557c1d
|
|
||||||
open_file_ios: 5ff7526df64e4394b4fe207636b67a95e83078bb
|
|
||||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||||
package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1
|
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
|
||||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||||
SDWebImage: a81bbb3ba4ea5f810f4069c68727cb118467a04a
|
SDWebImage: a81bbb3ba4ea5f810f4069c68727cb118467a04a
|
||||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||||
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
|
||||||
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
|
sqlite3: 1e522f0938463e44b7faf50393b40bdc1e1e456d
|
||||||
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
|
sqlite3_flutter_libs: 1b4e98da20ebd4e9b1240269b78cdcf492dbe9f3
|
||||||
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
|
||||||
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
||||||
system_theme: a94f91f49eeb97cfa768c7d5a9b2f6aa51b00494
|
system_theme: bfc1b0913d08f38d8c6bbe94b202a58df599d9f7
|
||||||
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||||
|
|
||||||
PODFILE CHECKSUM: 0659b64ac6e9e96b61d8550decffa8bff51a957e
|
PODFILE CHECKSUM: 0659b64ac6e9e96b61d8550decffa8bff51a957e
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ class BackButton extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IconButton.ghost(
|
return IconButton.ghost(
|
||||||
size: const ButtonSize(1.2),
|
size: const ButtonSize(.9),
|
||||||
icon: Icon(icon, color: color),
|
icon: Icon(icon, color: color),
|
||||||
onPressed: () => Navigator.of(context).pop(),
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
);
|
);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
"genre": "Genre",
|
"genre": "Genre",
|
||||||
"personalized": "Gepersonaliseerd",
|
"personalized": "Gepersonaliseerd",
|
||||||
"featured": "Aanbevolen",
|
"featured": "Aanbevolen",
|
||||||
"new_releases": "Nieuwe uitgaven",
|
"new_releases": "Nieuwe uitgaves",
|
||||||
"songs": "Liedjes",
|
"songs": "Liedjes",
|
||||||
"playing_track": "{track} afspelen",
|
"playing_track": "{track} afspelen",
|
||||||
"queue_clear_alert": "Dit zal de huidige wachtrij wissen. {track_length} nummers worden verwijderd\nWil je doorgaan?",
|
"queue_clear_alert": "Dit zal de huidige wachtrij wissen. {track_length} nummers worden verwijderd\nWil je doorgaan?",
|
||||||
@ -41,15 +41,14 @@
|
|||||||
"sort_z_a": "Sorteren op Z-A",
|
"sort_z_a": "Sorteren op Z-A",
|
||||||
"sort_artist": "Sorteren op artiest",
|
"sort_artist": "Sorteren op artiest",
|
||||||
"sort_album": "Sorteren op album",
|
"sort_album": "Sorteren op album",
|
||||||
"sort_duration": "Sorteren op lengte",
|
|
||||||
"sort_tracks": "Nummers sorteren",
|
"sort_tracks": "Nummers sorteren",
|
||||||
"currently_downloading": "Momenteel aan het downloaden ({tracks_length})",
|
"currently_downloading": "Momenteel aan het downloaden ({tracks_length})",
|
||||||
"cancel_all": "Alles annuleren",
|
"cancel_all": "Alle annuleren",
|
||||||
"filter_artist": "Artiesten filteren…",
|
"filter_artist": "Artiesten filteren…",
|
||||||
"followers": "{followers} volgers",
|
"followers": "{followers} volgers",
|
||||||
"add_artist_to_blacklist": "Artiest toevoegen aan zwarte lijst",
|
"add_artist_to_blacklist": "Artiest toevoegen aan zwarte lijst",
|
||||||
"top_tracks": "Topnummers",
|
"top_tracks": "Topsporen",
|
||||||
"fans_also_like": "Fans luisteren ook",
|
"fans_also_like": "Liefhebbers willen ook",
|
||||||
"loading": "Laden…",
|
"loading": "Laden…",
|
||||||
"artist": "Artiest",
|
"artist": "Artiest",
|
||||||
"blacklisted": "Zwarte lijst",
|
"blacklisted": "Zwarte lijst",
|
||||||
@ -90,8 +89,8 @@
|
|||||||
"share": "Delen",
|
"share": "Delen",
|
||||||
"mini_player": "Minispeler",
|
"mini_player": "Minispeler",
|
||||||
"slide_to_seek": "Schuiven om vooruit of achteruit te zoeken",
|
"slide_to_seek": "Schuiven om vooruit of achteruit te zoeken",
|
||||||
"shuffle_playlist": "Afspeellijst willekeurig",
|
"shuffle_playlist": "Afspeellijst schuifelen",
|
||||||
"unshuffle_playlist": "Afspeellijst op volgorde",
|
"unshuffle_playlist": "Afspeellijst onschuifelen",
|
||||||
"previous_track": "Vorige nummer",
|
"previous_track": "Vorige nummer",
|
||||||
"next_track": "Volgende nummer",
|
"next_track": "Volgende nummer",
|
||||||
"pause_playback": "Afspelen pauzeren",
|
"pause_playback": "Afspelen pauzeren",
|
||||||
@ -99,7 +98,7 @@
|
|||||||
"loop_track": "Nummer herhalen",
|
"loop_track": "Nummer herhalen",
|
||||||
"repeat_playlist": "Afspeellijst herhalen",
|
"repeat_playlist": "Afspeellijst herhalen",
|
||||||
"queue": "Wachtrij",
|
"queue": "Wachtrij",
|
||||||
"alternative_track_sources": "Alternatieve bronnen voor nummers",
|
"alternative_track_sources": "Alternatieve nummerbronnen",
|
||||||
"download_track": "Nummer downloaden",
|
"download_track": "Nummer downloaden",
|
||||||
"tracks_in_queue": "{tracks} nummers in wachtrij",
|
"tracks_in_queue": "{tracks} nummers in wachtrij",
|
||||||
"clear_all": "Alles wissen",
|
"clear_all": "Alles wissen",
|
||||||
@ -241,8 +240,8 @@
|
|||||||
"views": "Weergaven",
|
"views": "Weergaven",
|
||||||
"streamUrl": "Stream-URL",
|
"streamUrl": "Stream-URL",
|
||||||
"stop": "Stoppen",
|
"stop": "Stoppen",
|
||||||
"sort_newest": "Sorteren op recent toegevoegd",
|
"sort_newest": "Sorteren op nieuwste toegevoegd",
|
||||||
"sort_oldest": "Sorteren op langst toegevoegd",
|
"sort_oldest": "Sorteren op oudste toegevoegd",
|
||||||
"sleep_timer": "Slaaptimer",
|
"sleep_timer": "Slaaptimer",
|
||||||
"mins": "{minutes} minuten",
|
"mins": "{minutes} minuten",
|
||||||
"hours": "{hours} uren",
|
"hours": "{hours} uren",
|
||||||
@ -288,32 +287,34 @@
|
|||||||
"explore_genres": "Genres verkennen",
|
"explore_genres": "Genres verkennen",
|
||||||
"friends": "Vrienden",
|
"friends": "Vrienden",
|
||||||
"no_lyrics_available": "Sorry, geen teksten gevonden voor dit nummer",
|
"no_lyrics_available": "Sorry, geen teksten gevonden voor dit nummer",
|
||||||
"start_a_radio": "Een radio starten",
|
"sort_duration": "Sorteer op Duur",
|
||||||
"how_to_start_radio": "Hoe wil je de radio starten?",
|
"audio_source": "Audiobron",
|
||||||
"replace_queue_question": "Wil je de huidige wachtrij vervangen of eraan toevoegen?",
|
"start_a_radio": "Start een Radio",
|
||||||
"endless_playback": "Oneindig afspelen",
|
"how_to_start_radio": "Hoe wilt u de radio starten?",
|
||||||
"delete_playlist": "Afspeellijst verwijderen",
|
"replace_queue_question": "Wilt u de huidige wachtrij vervangen of eraan toevoegen?",
|
||||||
"delete_playlist_confirmation": "Weet je zeker dat je deze afspeellijst wilt verwijderen?",
|
"endless_playback": "Eindeloze Afspelen",
|
||||||
"local_tracks": "Lokale nummers",
|
"delete_playlist": "Verwijder Afspeellijst",
|
||||||
"song_link": "Song-link",
|
"delete_playlist_confirmation": "Weet u zeker dat u deze afspeellijst wilt verwijderen?",
|
||||||
"skip_this_nonsense": "Deze onzin overslaan",
|
"local_tracks": "Lokale Nummers",
|
||||||
"freedom_of_music": "“Vrijheid van muziek”",
|
"song_link": "Nummer Link",
|
||||||
"freedom_of_music_palm": "“Vrijheid van muziek in je hand”",
|
"skip_this_nonsense": "Sla deze onzin over",
|
||||||
|
"freedom_of_music": "“Vrijheid van Muziek”",
|
||||||
|
"freedom_of_music_palm": "“Vrijheid van Muziek in de palm van je hand”",
|
||||||
"get_started": "Laten we beginnen",
|
"get_started": "Laten we beginnen",
|
||||||
"youtube_source_description": "Aangeraden en werkt het best.",
|
"youtube_source_description": "Aanbevolen en werkt het beste.",
|
||||||
"piped_source_description": "Voel je je vrij? Net als YouTube, maar meer vrij.",
|
"piped_source_description": "Voel je vrij? Hetzelfde als YouTube maar veel gratis.",
|
||||||
"jiosaavn_source_description": "Het beste voor de regio Zuid-Azië.",
|
"jiosaavn_source_description": "Het beste voor de Zuid-Aziatische regio.",
|
||||||
"highest_quality": "Hoogste kwaliteit: {quality}",
|
"highest_quality": "Hoogste Kwaliteit: {quality}",
|
||||||
"select_audio_source": "Audiobron kiezen",
|
"select_audio_source": "Selecteer Audiobron",
|
||||||
"endless_playback_description": "Nieuwe nummers automatisch achteraan de wachtrij toevoegen",
|
"endless_playback_description": "Voeg automatisch nieuwe nummers toe aan het einde van de wachtrij",
|
||||||
"choose_your_region": "Kies je regio",
|
"choose_your_region": "Kies uw regio",
|
||||||
"choose_your_region_description": "Dit helpt Spotube om de juiste inhoud\nvoor jouw locatie te tonen.",
|
"choose_your_region_description": "Dit zal Spotube helpen om de juiste inhoud voor uw locatie te tonen.",
|
||||||
"choose_your_language": "Kies je taal",
|
"choose_your_language": "Kies uw taal",
|
||||||
"help_project_grow": "Help dit project met groeien",
|
"help_project_grow": "Help dit project groeien",
|
||||||
"help_project_grow_description": "Spotube is een open-source project. Je kunt dit project helpen groeien door eraan bij te dragen, problemen te melden of nieuwe functies voor te stellen.",
|
"help_project_grow_description": "Spotube is een open-source project. U kunt dit project helpen groeien door bij te dragen aan het project, bugs te melden of nieuwe functies voor te stellen.",
|
||||||
"contribute_on_github": "Bijdragen on GitHub",
|
"contribute_on_github": "Bijdragen op GitHub",
|
||||||
"donate_on_open_collective": "Doneren on Open Collective",
|
"donate_on_open_collective": "Doneren op Open Collective",
|
||||||
"browse_anonymously": "Anoniem browsen",
|
"browse_anonymously": "Anoniem Bladeren",
|
||||||
"enable_connect": "Verbinding inschakelen",
|
"enable_connect": "Verbinding inschakelen",
|
||||||
"enable_connect_description": "Spotube bedienen vanaf andere apparaten",
|
"enable_connect_description": "Spotube bedienen vanaf andere apparaten",
|
||||||
"devices": "Apparaten",
|
"devices": "Apparaten",
|
||||||
@ -478,4 +479,4 @@
|
|||||||
"configure_your_own_metadata_plugin": "Configureer uw eigen metadata-aanbieder voor afspeellijst/album/artiest/feed",
|
"configure_your_own_metadata_plugin": "Configureer uw eigen metadata-aanbieder voor afspeellijst/album/artiest/feed",
|
||||||
"audio_scrobblers": "Audioscrobblers",
|
"audio_scrobblers": "Audioscrobblers",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling"
|
||||||
}
|
}
|
@ -39,7 +39,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get featured => 'Aanbevolen';
|
String get featured => 'Aanbevolen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get new_releases => 'Nieuwe uitgaven';
|
String get new_releases => 'Nieuwe uitgaves';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get songs => 'Liedjes';
|
String get songs => 'Liedjes';
|
||||||
@ -139,7 +139,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get sort_album => 'Sorteren op album';
|
String get sort_album => 'Sorteren op album';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get sort_duration => 'Sorteren op lengte';
|
String get sort_duration => 'Sorteer op Duur';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get sort_tracks => 'Nummers sorteren';
|
String get sort_tracks => 'Nummers sorteren';
|
||||||
@ -150,7 +150,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cancel_all => 'Alles annuleren';
|
String get cancel_all => 'Alle annuleren';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get filter_artist => 'Artiesten filteren…';
|
String get filter_artist => 'Artiesten filteren…';
|
||||||
@ -164,10 +164,10 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get add_artist_to_blacklist => 'Artiest toevoegen aan zwarte lijst';
|
String get add_artist_to_blacklist => 'Artiest toevoegen aan zwarte lijst';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get top_tracks => 'Topnummers';
|
String get top_tracks => 'Topsporen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get fans_also_like => 'Fans luisteren ook';
|
String get fans_also_like => 'Liefhebbers willen ook';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get loading => 'Laden…';
|
String get loading => 'Laden…';
|
||||||
@ -312,10 +312,10 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get slide_to_seek => 'Schuiven om vooruit of achteruit te zoeken';
|
String get slide_to_seek => 'Schuiven om vooruit of achteruit te zoeken';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get shuffle_playlist => 'Afspeellijst willekeurig';
|
String get shuffle_playlist => 'Afspeellijst schuifelen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get unshuffle_playlist => 'Afspeellijst op volgorde';
|
String get unshuffle_playlist => 'Afspeellijst onschuifelen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get previous_track => 'Vorige nummer';
|
String get previous_track => 'Vorige nummer';
|
||||||
@ -342,7 +342,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get queue => 'Wachtrij';
|
String get queue => 'Wachtrij';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get alternative_track_sources => 'Alternatieve bronnen voor nummers';
|
String get alternative_track_sources => 'Alternatieve nummerbronnen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_track => 'Nummer downloaden';
|
String get download_track => 'Nummer downloaden';
|
||||||
@ -776,10 +776,10 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get stop => 'Stoppen';
|
String get stop => 'Stoppen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get sort_newest => 'Sorteren op recent toegevoegd';
|
String get sort_newest => 'Sorteren op nieuwste toegevoegd';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get sort_oldest => 'Sorteren op langst toegevoegd';
|
String get sort_oldest => 'Sorteren op oudste toegevoegd';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get sleep_timer => 'Slaaptimer';
|
String get sleep_timer => 'Slaaptimer';
|
||||||
@ -815,7 +815,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get search_mode => 'Zoekmodus';
|
String get search_mode => 'Zoekmodus';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_source => 'Audio Source';
|
String get audio_source => 'Audiobron';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ok => 'Oké';
|
String get ok => 'Oké';
|
||||||
@ -927,56 +927,57 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
'Sorry, geen teksten gevonden voor dit nummer';
|
'Sorry, geen teksten gevonden voor dit nummer';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get start_a_radio => 'Een radio starten';
|
String get start_a_radio => 'Start een Radio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get how_to_start_radio => 'Hoe wil je de radio starten?';
|
String get how_to_start_radio => 'Hoe wilt u de radio starten?';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get replace_queue_question =>
|
String get replace_queue_question =>
|
||||||
'Wil je de huidige wachtrij vervangen of eraan toevoegen?';
|
'Wilt u de huidige wachtrij vervangen of eraan toevoegen?';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get endless_playback => 'Oneindig afspelen';
|
String get endless_playback => 'Eindeloze Afspelen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get delete_playlist => 'Afspeellijst verwijderen';
|
String get delete_playlist => 'Verwijder Afspeellijst';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get delete_playlist_confirmation =>
|
String get delete_playlist_confirmation =>
|
||||||
'Weet je zeker dat je deze afspeellijst wilt verwijderen?';
|
'Weet u zeker dat u deze afspeellijst wilt verwijderen?';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get local_tracks => 'Lokale nummers';
|
String get local_tracks => 'Lokale Nummers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get local_tab => 'Lokaal';
|
String get local_tab => 'Lokaal';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get song_link => 'Song-link';
|
String get song_link => 'Nummer Link';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get skip_this_nonsense => 'Deze onzin overslaan';
|
String get skip_this_nonsense => 'Sla deze onzin over';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get freedom_of_music => '“Vrijheid van muziek”';
|
String get freedom_of_music => '“Vrijheid van Muziek”';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get freedom_of_music_palm => '“Vrijheid van muziek in je hand”';
|
String get freedom_of_music_palm =>
|
||||||
|
'“Vrijheid van Muziek in de palm van je hand”';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get get_started => 'Laten we beginnen';
|
String get get_started => 'Laten we beginnen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get youtube_source_description => 'Aangeraden en werkt het best.';
|
String get youtube_source_description => 'Aanbevolen en werkt het beste.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get piped_source_description =>
|
String get piped_source_description =>
|
||||||
'Voel je je vrij? Net als YouTube, maar meer vrij.';
|
'Voel je vrij? Hetzelfde als YouTube maar veel gratis.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get jiosaavn_source_description =>
|
String get jiosaavn_source_description =>
|
||||||
'Het beste voor de regio Zuid-Azië.';
|
'Het beste voor de Zuid-Aziatische regio.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get invidious_source_description =>
|
String get invidious_source_description =>
|
||||||
@ -984,41 +985,41 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
String highest_quality(Object quality) {
|
String highest_quality(Object quality) {
|
||||||
return 'Hoogste kwaliteit: $quality';
|
return 'Hoogste Kwaliteit: $quality';
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get select_audio_source => 'Audiobron kiezen';
|
String get select_audio_source => 'Selecteer Audiobron';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get endless_playback_description =>
|
String get endless_playback_description =>
|
||||||
'Nieuwe nummers automatisch achteraan de wachtrij toevoegen';
|
'Voeg automatisch nieuwe nummers toe aan het einde van de wachtrij';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get choose_your_region => 'Kies je regio';
|
String get choose_your_region => 'Kies uw regio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get choose_your_region_description =>
|
String get choose_your_region_description =>
|
||||||
'Dit helpt Spotube om de juiste inhoud\nvoor jouw locatie te tonen.';
|
'Dit zal Spotube helpen om de juiste inhoud voor uw locatie te tonen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get choose_your_language => 'Kies je taal';
|
String get choose_your_language => 'Kies uw taal';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get help_project_grow => 'Help dit project met groeien';
|
String get help_project_grow => 'Help dit project groeien';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get help_project_grow_description =>
|
String get help_project_grow_description =>
|
||||||
'Spotube is een open-source project. Je kunt dit project helpen groeien door eraan bij te dragen, problemen te melden of nieuwe functies voor te stellen.';
|
'Spotube is een open-source project. U kunt dit project helpen groeien door bij te dragen aan het project, bugs te melden of nieuwe functies voor te stellen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get contribute_on_github => 'Bijdragen on GitHub';
|
String get contribute_on_github => 'Bijdragen op GitHub';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get donate_on_open_collective => 'Doneren on Open Collective';
|
String get donate_on_open_collective => 'Doneren op Open Collective';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get browse_anonymously => 'Anoniem browsen';
|
String get browse_anonymously => 'Anoniem Bladeren';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get enable_connect => 'Verbinding inschakelen';
|
String get enable_connect => 'Verbinding inschakelen';
|
||||||
|
@ -217,7 +217,7 @@ class Spotube extends HookConsumerWidget {
|
|||||||
iconTheme: const IconThemeProperties(),
|
iconTheme: const IconThemeProperties(),
|
||||||
colorScheme:
|
colorScheme:
|
||||||
colorSchemeMap[accentMaterialColor.name]?.call(ThemeMode.light) ??
|
colorSchemeMap[accentMaterialColor.name]?.call(ThemeMode.light) ??
|
||||||
LegacyColorSchemes.lightSlate(),
|
LegacyColorSchemes.lightOrange(),
|
||||||
surfaceOpacity: .8,
|
surfaceOpacity: .8,
|
||||||
surfaceBlur: 10,
|
surfaceBlur: 10,
|
||||||
),
|
),
|
||||||
@ -226,7 +226,7 @@ class Spotube extends HookConsumerWidget {
|
|||||||
iconTheme: const IconThemeProperties(),
|
iconTheme: const IconThemeProperties(),
|
||||||
colorScheme:
|
colorScheme:
|
||||||
colorSchemeMap[accentMaterialColor.name]?.call(ThemeMode.dark) ??
|
colorSchemeMap[accentMaterialColor.name]?.call(ThemeMode.dark) ??
|
||||||
LegacyColorSchemes.darkSlate(),
|
LegacyColorSchemes.darkOrange(),
|
||||||
surfaceOpacity: .8,
|
surfaceOpacity: .8,
|
||||||
surfaceBlur: 10,
|
surfaceBlur: 10,
|
||||||
),
|
),
|
||||||
|
@ -102,7 +102,7 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
);
|
);
|
||||||
await customStatement(
|
await customStatement(
|
||||||
"ALTER TABLE $tableName "
|
"ALTER TABLE $tableName "
|
||||||
"ADD COLUMN $columnName TEXT NOT NULL DEFAULT 'Slate:0xff64748b'",
|
"ADD COLUMN $columnName TEXT NOT NULL DEFAULT 'Orange:0xFFf97315'",
|
||||||
);
|
);
|
||||||
await customStatement(
|
await customStatement(
|
||||||
"UPDATE $tableName "
|
"UPDATE $tableName "
|
||||||
@ -114,7 +114,7 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
);
|
);
|
||||||
await customStatement(
|
await customStatement(
|
||||||
"UPDATE $tableName "
|
"UPDATE $tableName "
|
||||||
"SET $columnName = 'Slate:0xff64748b' WHERE $columnName = 'Blue:0xFF2196F3'",
|
"SET $columnName = 'Orange:0xFFf97315' WHERE $columnName = 'Blue:0xFF2196F3'",
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
from5To6: (m, schema) async {
|
from5To6: (m, schema) async {
|
||||||
|
@ -666,7 +666,7 @@ class $PreferencesTableTable extends PreferencesTable
|
|||||||
'accent_color_scheme', aliasedName, false,
|
'accent_color_scheme', aliasedName, false,
|
||||||
type: DriftSqlType.string,
|
type: DriftSqlType.string,
|
||||||
requiredDuringInsert: false,
|
requiredDuringInsert: false,
|
||||||
defaultValue: const Constant("Slate:0xff64748b"))
|
defaultValue: const Constant("Orange:0xFFf97315"))
|
||||||
.withConverter<SpotubeColor>(
|
.withConverter<SpotubeColor>(
|
||||||
$PreferencesTableTable.$converteraccentColorScheme);
|
$PreferencesTableTable.$converteraccentColorScheme);
|
||||||
static const VerificationMeta _layoutModeMeta =
|
static const VerificationMeta _layoutModeMeta =
|
||||||
|
@ -1407,7 +1407,7 @@ final class Schema5 extends i0.VersionedSchema {
|
|||||||
i1.GeneratedColumn<String> _column_55(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_55(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
|
i1.GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string,
|
||||||
defaultValue: const Constant("Slate:0xff64748b"));
|
defaultValue: const Constant("Orange:0xFFf97315"));
|
||||||
|
|
||||||
final class Schema6 extends i0.VersionedSchema {
|
final class Schema6 extends i0.VersionedSchema {
|
||||||
Schema6({required super.database}) : super(version: 6);
|
Schema6({required super.database}) : super(version: 6);
|
||||||
|
@ -79,7 +79,7 @@ class PreferencesTable extends Table {
|
|||||||
TextColumn get closeBehavior => textEnum<CloseBehavior>()
|
TextColumn get closeBehavior => textEnum<CloseBehavior>()
|
||||||
.withDefault(Constant(CloseBehavior.close.name))();
|
.withDefault(Constant(CloseBehavior.close.name))();
|
||||||
TextColumn get accentColorScheme => text()
|
TextColumn get accentColorScheme => text()
|
||||||
.withDefault(const Constant("Slate:0xff64748b"))
|
.withDefault(const Constant("Orange:0xFFf97315"))
|
||||||
.map(const SpotubeColorConverter())();
|
.map(const SpotubeColorConverter())();
|
||||||
TextColumn get layoutMode =>
|
TextColumn get layoutMode =>
|
||||||
textEnum<LayoutMode>().withDefault(Constant(LayoutMode.adaptive.name))();
|
textEnum<LayoutMode>().withDefault(Constant(LayoutMode.adaptive.name))();
|
||||||
@ -131,7 +131,7 @@ class PreferencesTable extends Table {
|
|||||||
systemTitleBar: false,
|
systemTitleBar: false,
|
||||||
skipNonMusic: false,
|
skipNonMusic: false,
|
||||||
closeBehavior: CloseBehavior.close,
|
closeBehavior: CloseBehavior.close,
|
||||||
accentColorScheme: SpotubeColor(Colors.slate.value, name: "Slate"),
|
accentColorScheme: SpotubeColor(Colors.orange.value, name: "Orange"),
|
||||||
layoutMode: LayoutMode.adaptive,
|
layoutMode: LayoutMode.adaptive,
|
||||||
locale: const Locale("system", "system"),
|
locale: const Locale("system", "system"),
|
||||||
market: Market.US,
|
market: Market.US,
|
||||||
|
@ -21,6 +21,7 @@ import 'package:spotube/extensions/constrains.dart';
|
|||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/modules/root/spotube_navigation_bar.dart';
|
import 'package:spotube/modules/root/spotube_navigation_bar.dart';
|
||||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||||
|
import 'package:spotube/provider/metadata_plugin/core/auth.dart';
|
||||||
import 'package:spotube/provider/server/active_track_sources.dart';
|
import 'package:spotube/provider/server/active_track_sources.dart';
|
||||||
import 'package:spotube/provider/volume_provider.dart';
|
import 'package:spotube/provider/volume_provider.dart';
|
||||||
import 'package:spotube/services/sourced_track/sources/youtube.dart';
|
import 'package:spotube/services/sourced_track/sources/youtube.dart';
|
||||||
@ -39,6 +40,7 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
final authenticated = ref.watch(metadataPluginAuthenticatedProvider);
|
||||||
final sourcedCurrentTrack = ref.watch(activeTrackSourcesProvider);
|
final sourcedCurrentTrack = ref.watch(activeTrackSourcesProvider);
|
||||||
final currentActiveTrack =
|
final currentActiveTrack =
|
||||||
ref.watch(audioPlayerProvider.select((s) => s.activeTrack));
|
ref.watch(audioPlayerProvider.select((s) => s.activeTrack));
|
||||||
@ -103,15 +105,13 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
surfaceBlur: 0,
|
surfaceBlur: 0,
|
||||||
leading: [
|
leading: [
|
||||||
IconButton.ghost(
|
IconButton.ghost(
|
||||||
size: const ButtonSize(1.2),
|
icon: const Icon(SpotubeIcons.angleDown, size: 18),
|
||||||
icon: const Icon(SpotubeIcons.angleDown),
|
|
||||||
onPressed: panelController.close,
|
onPressed: panelController.close,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
trailing: [
|
trailing: [
|
||||||
if (currentActiveTrackSource is YoutubeSourcedTrack)
|
if (currentActiveTrackSource is YoutubeSourcedTrack)
|
||||||
TextButton(
|
TextButton(
|
||||||
size: const ButtonSize(1.2),
|
|
||||||
leading: Assets.images.logos.songlinkTransparent.image(
|
leading: Assets.images.logos.songlinkTransparent.image(
|
||||||
width: 20,
|
width: 20,
|
||||||
height: 20,
|
height: 20,
|
||||||
@ -131,8 +131,7 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
child: Text(context.l10n.details),
|
child: Text(context.l10n.details),
|
||||||
).call,
|
).call,
|
||||||
child: IconButton.ghost(
|
child: IconButton.ghost(
|
||||||
size: const ButtonSize(1.2),
|
icon: const Icon(SpotubeIcons.info, size: 18),
|
||||||
icon: const Icon(SpotubeIcons.info),
|
|
||||||
onPressed: currentActiveTrackSource == null
|
onPressed: currentActiveTrackSource == null
|
||||||
? null
|
? null
|
||||||
: () {
|
: () {
|
||||||
@ -240,16 +239,18 @@ class PlayerView extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
if (authenticated.asData?.value == true)
|
||||||
Expanded(
|
const SizedBox(width: 10),
|
||||||
child: OutlineButton(
|
if (authenticated.asData?.value == true)
|
||||||
leading: const Icon(SpotubeIcons.music),
|
Expanded(
|
||||||
child: Text(context.l10n.lyrics),
|
child: OutlineButton(
|
||||||
onPressed: () {
|
leading: const Icon(SpotubeIcons.music),
|
||||||
context.pushRoute(const PlayerLyricsRoute());
|
child: Text(context.l10n.lyrics),
|
||||||
},
|
onPressed: () {
|
||||||
|
context.pushRoute(const PlayerLyricsRoute());
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -3,7 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:media_kit/media_kit.dart';
|
import 'package:media_kit/media_kit.dart';
|
||||||
import 'package:palette_generator/palette_generator.dart';
|
import 'package:palette_generator/palette_generator.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer;
|
||||||
|
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/collections/intents.dart';
|
import 'package:spotube/collections/intents.dart';
|
||||||
@ -14,7 +14,6 @@ import 'package:spotube/modules/player/use_progress.dart';
|
|||||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||||
import 'package:spotube/provider/audio_player/querying_track_info.dart';
|
import 'package:spotube/provider/audio_player/querying_track_info.dart';
|
||||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||||
import 'package:spotube/utils/platform.dart';
|
|
||||||
|
|
||||||
class PlayerControls extends HookConsumerWidget {
|
class PlayerControls extends HookConsumerWidget {
|
||||||
final PaletteGenerator? palette;
|
final PaletteGenerator? palette;
|
||||||
@ -49,9 +48,6 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying;
|
useStream(audioPlayer.playingStream).data ?? audioPlayer.isPlaying;
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final buttonSize =
|
|
||||||
kIsMobile ? const ButtonSize(1.5) : const ButtonSize(1.2);
|
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
behavior: HitTestBehavior.translucent,
|
behavior: HitTestBehavior.translucent,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@ -153,11 +149,9 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
).call,
|
).call,
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
size: buttonSize,
|
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
SpotubeIcons.shuffle,
|
SpotubeIcons.shuffle,
|
||||||
color: shuffled ? theme.colorScheme.primary : null,
|
color: shuffled ? theme.colorScheme.primary : null,
|
||||||
size: 22,
|
|
||||||
),
|
),
|
||||||
variance: shuffled
|
variance: shuffled
|
||||||
? ButtonVariance.secondary
|
? ButtonVariance.secondary
|
||||||
@ -176,10 +170,8 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
}),
|
}),
|
||||||
Tooltip(
|
Tooltip(
|
||||||
tooltip: TooltipContainer(
|
tooltip: TooltipContainer(
|
||||||
child: Text(context.l10n.previous_track),
|
child: Text(context.l10n.previous_track)).call,
|
||||||
).call,
|
|
||||||
child: IconButton.ghost(
|
child: IconButton.ghost(
|
||||||
size: buttonSize,
|
|
||||||
enabled: !isFetchingActiveTrack,
|
enabled: !isFetchingActiveTrack,
|
||||||
icon: const Icon(SpotubeIcons.skipBack),
|
icon: const Icon(SpotubeIcons.skipBack),
|
||||||
onPressed: audioPlayer.skipToPrevious,
|
onPressed: audioPlayer.skipToPrevious,
|
||||||
@ -194,7 +186,6 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
).call,
|
).call,
|
||||||
child: IconButton.primary(
|
child: IconButton.primary(
|
||||||
size: buttonSize,
|
|
||||||
shape: ButtonShape.circle,
|
shape: ButtonShape.circle,
|
||||||
icon: isFetchingActiveTrack
|
icon: isFetchingActiveTrack
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
@ -215,10 +206,8 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
Tooltip(
|
Tooltip(
|
||||||
tooltip:
|
tooltip:
|
||||||
TooltipContainer(child: Text(context.l10n.next_track))
|
TooltipContainer(child: Text(context.l10n.next_track)).call,
|
||||||
.call,
|
|
||||||
child: IconButton.ghost(
|
child: IconButton.ghost(
|
||||||
size: buttonSize,
|
|
||||||
icon: const Icon(SpotubeIcons.skipForward),
|
icon: const Icon(SpotubeIcons.skipForward),
|
||||||
onPressed:
|
onPressed:
|
||||||
isFetchingActiveTrack ? null : audioPlayer.skipToNext,
|
isFetchingActiveTrack ? null : audioPlayer.skipToNext,
|
||||||
@ -239,7 +228,6 @@ class PlayerControls extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
).call,
|
).call,
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
size: buttonSize,
|
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
loopMode == PlaylistMode.single
|
loopMode == PlaylistMode.single
|
||||||
? SpotubeIcons.repeatOne
|
? SpotubeIcons.repeatOne
|
||||||
|
@ -47,8 +47,10 @@ class PlayerTrackDetails extends HookConsumerWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 4),
|
const SizedBox(height: 4),
|
||||||
Text(
|
LinkText(
|
||||||
playback.activeTrack?.name ?? "",
|
playback.activeTrack?.name ?? "",
|
||||||
|
TrackRoute(trackId: playback.activeTrack?.id ?? ""),
|
||||||
|
push: true,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: theme.typography.normal.copyWith(
|
style: theme.typography.normal.copyWith(
|
||||||
color: color,
|
color: color,
|
||||||
|
@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
|
|
||||||
|
import 'package:spotube/collections/assets.gen.dart';
|
||||||
import 'package:spotube/collections/side_bar_tiles.dart';
|
import 'package:spotube/collections/side_bar_tiles.dart';
|
||||||
import 'package:spotube/models/database/database.dart';
|
import 'package:spotube/models/database/database.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
@ -19,6 +20,19 @@ class Sidebar extends HookConsumerWidget {
|
|||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
static Widget brandLogo(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.black,
|
||||||
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
),
|
||||||
|
child: Assets.branding.spotubeLogoPng.image(
|
||||||
|
height: 50,
|
||||||
|
cacheHeight: (100 * MediaQuery.devicePixelRatioOf(context)).toInt(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final ThemeData(:colorScheme) = Theme.of(context);
|
final ThemeData(:colorScheme) = Theme.of(context);
|
||||||
|
@ -3,6 +3,8 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
|
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
|
||||||
|
import 'package:spotube/collections/assets.gen.dart';
|
||||||
import 'package:spotube/collections/routes.gr.dart';
|
import 'package:spotube/collections/routes.gr.dart';
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/models/database/database.dart';
|
import 'package:spotube/models/database/database.dart';
|
||||||
@ -41,17 +43,19 @@ class HomePage extends HookConsumerWidget {
|
|||||||
if (mediaQuery.smAndDown || layoutMode == LayoutMode.compact)
|
if (mediaQuery.smAndDown || layoutMode == LayoutMode.compact)
|
||||||
SliverAppBar(
|
SliverAppBar(
|
||||||
floating: true,
|
floating: true,
|
||||||
title: DefaultTextStyle(
|
title: Image.asset(
|
||||||
style: TextStyle(
|
theme.brightness == Brightness.dark
|
||||||
fontFamily: "Cookie",
|
? Assets.branding.spotubeLogoPng.path
|
||||||
fontSize: 30,
|
: Assets.branding.spotubeLogoLight.path,
|
||||||
letterSpacing: 1.8,
|
height: 45,
|
||||||
color: theme.colorScheme.foreground,
|
width: 45,
|
||||||
),
|
color: theme.colorScheme.background,
|
||||||
child: const Text("Spotube"),
|
colorBlendMode: BlendMode.saturation,
|
||||||
|
cacheHeight:
|
||||||
|
(100 * MediaQuery.devicePixelRatioOf(context)).toInt(),
|
||||||
),
|
),
|
||||||
backgroundColor: theme.colorScheme.background,
|
backgroundColor: context.theme.colorScheme.background,
|
||||||
foregroundColor: theme.colorScheme.foreground,
|
foregroundColor: context.theme.colorScheme.foreground,
|
||||||
actions: [
|
actions: [
|
||||||
const ConnectDeviceButton(),
|
const ConnectDeviceButton(),
|
||||||
const Gap(10),
|
const Gap(10),
|
||||||
|
@ -18,6 +18,8 @@ import 'package:spotube/provider/lyrics/synced.dart';
|
|||||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||||
import 'package:spotube/services/logger/logger.dart';
|
import 'package:spotube/services/logger/logger.dart';
|
||||||
|
|
||||||
|
import 'package:stroke_text/stroke_text.dart';
|
||||||
|
|
||||||
class SyncedLyrics extends HookConsumerWidget {
|
class SyncedLyrics extends HookConsumerWidget {
|
||||||
final PaletteColor palette;
|
final PaletteColor palette;
|
||||||
final bool? isModal;
|
final bool? isModal;
|
||||||
@ -158,9 +160,6 @@ class SyncedLyrics extends HookConsumerWidget {
|
|||||||
child: AnimatedDefaultTextStyle(
|
child: AnimatedDefaultTextStyle(
|
||||||
duration: const Duration(milliseconds: 250),
|
duration: const Duration(milliseconds: 250),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isActive
|
|
||||||
? theme.colorScheme.foreground
|
|
||||||
: theme.colorScheme.mutedForeground,
|
|
||||||
fontWeight: isActive
|
fontWeight: isActive
|
||||||
? FontWeight.w500
|
? FontWeight.w500
|
||||||
: FontWeight.normal,
|
: FontWeight.normal,
|
||||||
@ -182,7 +181,25 @@ class SyncedLyrics extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
audioPlayer.seek(time);
|
audioPlayer.seek(time);
|
||||||
},
|
},
|
||||||
child: Text(lyricSlice.text),
|
child: Builder(builder: (context) {
|
||||||
|
return StrokeText(
|
||||||
|
text: lyricSlice.text,
|
||||||
|
textStyle:
|
||||||
|
DefaultTextStyle.of(context).style,
|
||||||
|
textColor: switch ((
|
||||||
|
isActive,
|
||||||
|
isModal == true
|
||||||
|
)) {
|
||||||
|
(true, _) => Colors.white,
|
||||||
|
(_, true) =>
|
||||||
|
theme.colorScheme.mutedForeground,
|
||||||
|
(_, _) => palette.bodyTextColor,
|
||||||
|
},
|
||||||
|
strokeColor: isActive
|
||||||
|
? Colors.black
|
||||||
|
: Colors.transparent,
|
||||||
|
);
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -28,18 +28,20 @@ class PlayerLyricsPage extends HookConsumerWidget {
|
|||||||
final selectedIndex = useState(0);
|
final selectedIndex = useState(0);
|
||||||
final palette = usePaletteColor(albumArt, ref);
|
final palette = usePaletteColor(albumArt, ref);
|
||||||
|
|
||||||
final tabbar = TabList(
|
final tabbar = Padding(
|
||||||
index: selectedIndex.value,
|
padding: const EdgeInsets.all(10),
|
||||||
onChanged: (index) => selectedIndex.value = index,
|
child: TabList(
|
||||||
children: [
|
index: selectedIndex.value,
|
||||||
TabItem(
|
onChanged: (index) => selectedIndex.value = index,
|
||||||
child: Text(context.l10n.synced),
|
children: [
|
||||||
),
|
TabItem(
|
||||||
TabItem(
|
child: Text(context.l10n.synced),
|
||||||
child: Text(context.l10n.plain),
|
),
|
||||||
),
|
TabItem(
|
||||||
],
|
child: Text(context.l10n.plain),
|
||||||
);
|
),
|
||||||
|
],
|
||||||
|
));
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
headers: [
|
headers: [
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- app_links (6.4.1):
|
- app_links (1.0.0):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- audio_service (0.0.1):
|
- audio_service (0.14.1):
|
||||||
- Flutter
|
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- audio_session (0.0.1):
|
- audio_session (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
@ -10,6 +9,7 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- connectivity_plus (0.0.1):
|
- connectivity_plus (0.0.1):
|
||||||
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- desktop_webview_window (0.0.1):
|
- desktop_webview_window (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
@ -33,6 +33,8 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- media_kit_libs_macos_audio (1.0.4):
|
- media_kit_libs_macos_audio (1.0.4):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- media_kit_native_event_loop (1.0.0):
|
||||||
|
- FlutterMacOS
|
||||||
- metadata_god (0.0.1):
|
- metadata_god (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- open_file_mac (0.0.1):
|
- open_file_mac (0.0.1):
|
||||||
@ -51,31 +53,25 @@ PODS:
|
|||||||
- sqflite_darwin (0.0.4):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (3.50.4):
|
- sqlite3 (3.47.2):
|
||||||
- sqlite3/common (= 3.50.4)
|
- sqlite3/common (= 3.47.2)
|
||||||
- sqlite3/common (3.50.4)
|
- sqlite3/common (3.47.2)
|
||||||
- sqlite3/dbstatvtab (3.50.4):
|
- sqlite3/dbstatvtab (3.47.2):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/fts5 (3.50.4):
|
- sqlite3/fts5 (3.47.2):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/math (3.50.4):
|
- sqlite3/perf-threadsafe (3.47.2):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/perf-threadsafe (3.50.4):
|
- sqlite3/rtree (3.47.2):
|
||||||
- sqlite3/common
|
|
||||||
- sqlite3/rtree (3.50.4):
|
|
||||||
- sqlite3/common
|
|
||||||
- sqlite3/session (3.50.4):
|
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3_flutter_libs (0.0.1):
|
- sqlite3_flutter_libs (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (~> 3.50.4)
|
- sqlite3 (~> 3.47.1)
|
||||||
- sqlite3/dbstatvtab
|
- sqlite3/dbstatvtab
|
||||||
- sqlite3/fts5
|
- sqlite3/fts5
|
||||||
- sqlite3/math
|
|
||||||
- sqlite3/perf-threadsafe
|
- sqlite3/perf-threadsafe
|
||||||
- sqlite3/rtree
|
- sqlite3/rtree
|
||||||
- sqlite3/session
|
|
||||||
- super_native_extensions (0.0.1):
|
- super_native_extensions (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- system_theme (0.0.1):
|
- system_theme (0.0.1):
|
||||||
@ -89,10 +85,10 @@ PODS:
|
|||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
|
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
|
||||||
- audio_service (from `Flutter/ephemeral/.symlinks/plugins/audio_service/darwin`)
|
- audio_service (from `Flutter/ephemeral/.symlinks/plugins/audio_service/macos`)
|
||||||
- audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`)
|
- audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`)
|
||||||
- bonsoir_darwin (from `Flutter/ephemeral/.symlinks/plugins/bonsoir_darwin/darwin`)
|
- bonsoir_darwin (from `Flutter/ephemeral/.symlinks/plugins/bonsoir_darwin/darwin`)
|
||||||
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
|
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
|
||||||
- desktop_webview_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos`)
|
- desktop_webview_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos`)
|
||||||
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
||||||
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
|
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
|
||||||
@ -104,6 +100,7 @@ DEPENDENCIES:
|
|||||||
- irondash_engine_context (from `Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos`)
|
- irondash_engine_context (from `Flutter/ephemeral/.symlinks/plugins/irondash_engine_context/macos`)
|
||||||
- local_notifier (from `Flutter/ephemeral/.symlinks/plugins/local_notifier/macos`)
|
- local_notifier (from `Flutter/ephemeral/.symlinks/plugins/local_notifier/macos`)
|
||||||
- media_kit_libs_macos_audio (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_audio/macos`)
|
- media_kit_libs_macos_audio (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_audio/macos`)
|
||||||
|
- media_kit_native_event_loop (from `Flutter/ephemeral/.symlinks/plugins/media_kit_native_event_loop/macos`)
|
||||||
- metadata_god (from `Flutter/ephemeral/.symlinks/plugins/metadata_god/macos`)
|
- metadata_god (from `Flutter/ephemeral/.symlinks/plugins/metadata_god/macos`)
|
||||||
- open_file_mac (from `Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos`)
|
- open_file_mac (from `Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos`)
|
||||||
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
||||||
@ -127,13 +124,13 @@ EXTERNAL SOURCES:
|
|||||||
app_links:
|
app_links:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
|
||||||
audio_service:
|
audio_service:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/audio_service/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/audio_service/macos
|
||||||
audio_session:
|
audio_session:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/audio_session/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/audio_session/macos
|
||||||
bonsoir_darwin:
|
bonsoir_darwin:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/bonsoir_darwin/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/bonsoir_darwin/darwin
|
||||||
connectivity_plus:
|
connectivity_plus:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
|
||||||
desktop_webview_window:
|
desktop_webview_window:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/desktop_webview_window/macos
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
@ -156,6 +153,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter/ephemeral/.symlinks/plugins/local_notifier/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/local_notifier/macos
|
||||||
media_kit_libs_macos_audio:
|
media_kit_libs_macos_audio:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_audio/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_audio/macos
|
||||||
|
media_kit_native_event_loop:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/media_kit_native_event_loop/macos
|
||||||
metadata_god:
|
metadata_god:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/metadata_god/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/metadata_god/macos
|
||||||
open_file_mac:
|
open_file_mac:
|
||||||
@ -184,11 +183,11 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
app_links: 05a6ec2341985eb05e9f97dc63f5837c39895c3f
|
app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
|
||||||
audio_service: aa99a6ba2ae7565996015322b0bb024e1d25c6fd
|
audio_service: 0d9e4e25347bb3efb768f3b9f005911a81e587a7
|
||||||
audio_session: eaca2512cf2b39212d724f35d11f46180ad3a33e
|
audio_session: 48ab6500f7a5e7c64363e206565a5dfe5a0c1441
|
||||||
bonsoir_darwin: 29c7ccf356646118844721f36e1de4b61f6cbd0e
|
bonsoir_darwin: 29c7ccf356646118844721f36e1de4b61f6cbd0e
|
||||||
connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e
|
connectivity_plus: 2256d3e20624a7749ed21653aafe291a46446fee
|
||||||
desktop_webview_window: 2f0cdefecc06e21208a51589bd3d1580a87a703c
|
desktop_webview_window: 2f0cdefecc06e21208a51589bd3d1580a87a703c
|
||||||
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
|
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
|
||||||
file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31
|
file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31
|
||||||
@ -200,6 +199,7 @@ SPEC CHECKSUMS:
|
|||||||
irondash_engine_context: 893c7d96d20ce361d7e996f39d360c4c2f9869ba
|
irondash_engine_context: 893c7d96d20ce361d7e996f39d360c4c2f9869ba
|
||||||
local_notifier: ebf072651e35ae5e47280ad52e2707375cb2ae4e
|
local_notifier: ebf072651e35ae5e47280ad52e2707375cb2ae4e
|
||||||
media_kit_libs_macos_audio: 06f3cf88d6d89c7c3c87eae57689d1c6adb335b2
|
media_kit_libs_macos_audio: 06f3cf88d6d89c7c3c87eae57689d1c6adb335b2
|
||||||
|
media_kit_native_event_loop: a5833d1e4d5bedb6f691e9909fa57f15f436f2c8
|
||||||
metadata_god: 8029e6ff4b1400ae4f13c38d2c478e8633f0e58b
|
metadata_god: 8029e6ff4b1400ae4f13c38d2c478e8633f0e58b
|
||||||
open_file_mac: 01874b6d6a2c1485ac9b126d7105b99102dea2cf
|
open_file_mac: 01874b6d6a2c1485ac9b126d7105b99102dea2cf
|
||||||
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
|
||||||
@ -208,8 +208,8 @@ SPEC CHECKSUMS:
|
|||||||
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
|
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
|
||||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||||
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||||
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
|
sqlite3: 7559e33dae4c78538df563795af3a86fc887ee71
|
||||||
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
|
sqlite3_flutter_libs: f0b59f6bb2a18597d0796558725007e5a7428397
|
||||||
super_native_extensions: c2795d6d9aedf4a79fae25cb6160b71b50549189
|
super_native_extensions: c2795d6d9aedf4a79fae25cb6160b71b50549189
|
||||||
system_theme: ed74293ad07d3a05e3e2d0059ff342360346f1a0
|
system_theme: ed74293ad07d3a05e3e2d0059ff342360346f1a0
|
||||||
tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
|
tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
|
||||||
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 39 KiB |
BIN
metadata/en-US/images/phoneScreenshots/android-6.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 39 KiB |
BIN
metadata/tr/images/phoneScreenshots/android-6.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
@ -3,7 +3,7 @@ description: Open source extensible music streaming platform and app, based on B
|
|||||||
|
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
|
|
||||||
version: 5.0.0+42
|
version: 4.0.2+41
|
||||||
|
|
||||||
homepage: https://spotube.krtirtho.dev
|
homepage: https://spotube.krtirtho.dev
|
||||||
repository: https://github.com/KRTirtho/spotube
|
repository: https://github.com/KRTirtho/spotube
|
||||||
|
@ -525,7 +525,7 @@ class PreferencesTable extends Table
|
|||||||
GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
|
GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
|
||||||
type: DriftSqlType.string,
|
type: DriftSqlType.string,
|
||||||
requiredDuringInsert: false,
|
requiredDuringInsert: false,
|
||||||
defaultValue: const Constant("Slate:0xff64748b"));
|
defaultValue: const Constant("Orange:0xFFf97315"));
|
||||||
late final GeneratedColumn<String> layoutMode = GeneratedColumn<String>(
|
late final GeneratedColumn<String> layoutMode = GeneratedColumn<String>(
|
||||||
'layout_mode', aliasedName, false,
|
'layout_mode', aliasedName, false,
|
||||||
type: DriftSqlType.string,
|
type: DriftSqlType.string,
|
||||||
|
@ -1,5 +1 @@
|
|||||||
{
|
{}
|
||||||
"nl": [
|
|
||||||
"audio_source"
|
|
||||||
]
|
|
||||||
}
|
|