mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-06 07:29:42 +00:00
Compare commits
51 Commits
eda81a6740
...
7530614bb3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7530614bb3 | ||
|
|
826c8e4dd6 | ||
|
|
4838656dcc | ||
|
|
7ad2066684 | ||
|
|
77c32a27cf | ||
|
|
89c67e4f89 | ||
|
|
b142928412 | ||
|
|
bf2eb0ffac | ||
|
|
3f5291ec92 | ||
|
|
5ea4df932f | ||
|
|
3462e32a6c | ||
|
|
a452122302 | ||
|
|
11866d532b | ||
|
|
d843ce9ede | ||
|
|
6884a131c9 | ||
|
|
bb6f4bd57b | ||
|
|
cab09e00ce | ||
|
|
4fae9013a7 | ||
|
|
834445eda3 | ||
|
|
f10a3d4976 | ||
|
|
3209c75144 | ||
|
|
700a69fcd1 | ||
|
|
d2dd60aa5c | ||
|
|
fda2257119 | ||
|
|
7c632c8f06 | ||
|
|
a012a8f3af | ||
|
|
64f937bd14 | ||
|
|
d1b73dbb1c | ||
|
|
e1fa9efa14 | ||
|
|
6272f376ea | ||
|
|
4b5108e54e | ||
|
|
6311831902 | ||
|
|
99a84aa6dc | ||
|
|
3bc296cf22 | ||
|
|
f6d9d64b7d | ||
|
|
439de5d7f7 | ||
|
|
88699e9a3b | ||
|
|
348c2e931b | ||
|
|
973ca20c8e | ||
|
|
7d849b1430 | ||
|
|
e5150515f3 | ||
|
|
66848c78c7 | ||
|
|
3e34bc4be6 | ||
|
|
cecb687592 | ||
|
|
e8a54d3209 | ||
|
|
ca6924f5a9 | ||
|
|
0e48b7a337 | ||
|
|
60fbf66639 | ||
|
|
97370712bc | ||
|
|
c36e819ba3 | ||
|
|
61d34963fa |
25
.github/Dockerfile
vendored
25
.github/Dockerfile
vendored
@ -1,25 +0,0 @@
|
|||||||
ARG FLUTTER_VERSION
|
|
||||||
|
|
||||||
FROM --platform=linux/arm64 krtirtho/flutter_distributor:${FLUTTER_VERSION}
|
|
||||||
|
|
||||||
ARG BUILD_VERSION
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN chown -R $(whoami) /app
|
|
||||||
|
|
||||||
RUN rustup target add aarch64-unknown-linux-gnu
|
|
||||||
|
|
||||||
RUN flutter pub get
|
|
||||||
|
|
||||||
RUN alias dpkg-deb="dpkg-deb --Zxz" &&\
|
|
||||||
flutter_distributor package --platform=linux --targets=deb --skip-clean
|
|
||||||
|
|
||||||
RUN make tar VERSION=${BUILD_VERSION} ARCH=arm64 PKG_ARCH=aarch64
|
|
||||||
|
|
||||||
RUN mv build/spotube-linux-*-aarch64.tar.xz dist/ &&\
|
|
||||||
mv dist/**/spotube-*-linux.deb dist/Spotube-linux-aarch64.deb
|
|
||||||
|
|
||||||
CMD [ "sleep", "5000000" ]
|
|
||||||
46
.github/workflows/spotube-publish-binary.yml
vendored
46
.github/workflows/spotube-publish-binary.yml
vendored
@ -12,10 +12,10 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: true
|
default: true
|
||||||
jobs:
|
jobs:
|
||||||
description: Jobs to run (flathub,aur,winget,chocolatey,playstore)
|
description: Jobs to run (flathub,aur,winget,chocolatey)
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
default: "flathub,aur,winget,chocolatey,playstore"
|
default: "flathub,aur,winget,chocolatey"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
flathub:
|
flathub:
|
||||||
@ -112,26 +112,26 @@ jobs:
|
|||||||
- name: Tagname (workflow dispatch)
|
- name: Tagname (workflow dispatch)
|
||||||
run: echo 'TAG_NAME=${{inputs.version}}' >> $GITHUB_ENV
|
run: echo 'TAG_NAME=${{inputs.version}}' >> $GITHUB_ENV
|
||||||
|
|
||||||
- uses: robinraju/release-downloader@main
|
# - uses: robinraju/release-downloader@main
|
||||||
with:
|
# with:
|
||||||
repository: KRTirtho/spotube
|
# repository: KRTirtho/spotube
|
||||||
tag: v${{ env.TAG_NAME }}
|
# tag: v${{ env.TAG_NAME }}
|
||||||
tarBall: false
|
# tarBall: false
|
||||||
zipBall: false
|
# zipBall: false
|
||||||
out-file-path: dist
|
# out-file-path: dist
|
||||||
fileName: "Spotube-playstore-all-arch.aab"
|
# fileName: "Spotube-playstore-all-arch.aab"
|
||||||
|
|
||||||
- name: Create service-account.json
|
# - name: Create service-account.json
|
||||||
run: |
|
# run: |
|
||||||
echo "${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_BASE64 }}" | base64 -d > service-account.json
|
# echo "${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_BASE64 }}" | base64 -d > service-account.json
|
||||||
|
|
||||||
- name: Upload Android Release to Play Store
|
# - name: Upload Android Release to Play Store
|
||||||
if: ${{!inputs.dry_run}}
|
# if: ${{!inputs.dry_run}}
|
||||||
uses: r0adkll/upload-google-play@v1
|
# uses: r0adkll/upload-google-play@v1
|
||||||
with:
|
# with:
|
||||||
serviceAccountJson: ./service-account.json
|
# serviceAccountJson: ./service-account.json
|
||||||
releaseFiles: ./dist/Spotube-playstore-all-arch.aab
|
# releaseFiles: ./dist/Spotube-playstore-all-arch.aab
|
||||||
packageName: oss.krtirtho.spotube
|
# packageName: oss.krtirtho.spotube
|
||||||
track: production
|
# track: production
|
||||||
status: draft
|
# status: draft
|
||||||
releaseName: ${{ env.TAG_NAME }}
|
# releaseName: ${{ env.TAG_NAME }}
|
||||||
|
|||||||
13
.github/workflows/spotube-release-binary.yml
vendored
13
.github/workflows/spotube-release-binary.yml
vendored
@ -37,19 +37,20 @@ jobs:
|
|||||||
files: |
|
files: |
|
||||||
dist/Spotube-linux-x86_64.deb
|
dist/Spotube-linux-x86_64.deb
|
||||||
dist/Spotube-linux-x86_64.rpm
|
dist/Spotube-linux-x86_64.rpm
|
||||||
|
dist/Spotube-linux-x86_64.AppImage
|
||||||
dist/spotube-linux-*-x86_64.tar.xz
|
dist/spotube-linux-*-x86_64.tar.xz
|
||||||
- os: ubuntu-22.04-arm
|
- os: ubuntu-22.04-arm
|
||||||
platform: linux
|
platform: linux
|
||||||
arch: arm64
|
arch: arm64
|
||||||
files: |
|
files: |
|
||||||
dist/Spotube-linux-aarch64.deb
|
dist/Spotube-linux-aarch64.deb
|
||||||
|
dist/Spotube-linux-aarch64.AppImage
|
||||||
dist/spotube-linux-*-aarch64.tar.xz
|
dist/spotube-linux-*-aarch64.tar.xz
|
||||||
- os: ubuntu-22.04
|
- os: ubuntu-22.04
|
||||||
platform: android
|
platform: android
|
||||||
arch: all
|
arch: all
|
||||||
files: |
|
files: |
|
||||||
build/Spotube-android-all-arch.apk
|
build/Spotube-android-all-arch.apk
|
||||||
build/Spotube-playstore-all-arch.aab
|
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
platform: windows
|
platform: windows
|
||||||
arch: x86
|
arch: x86
|
||||||
@ -77,6 +78,14 @@ jobs:
|
|||||||
cache: true
|
cache: true
|
||||||
git-source: https://github.com/flutter/flutter.git
|
git-source: https://github.com/flutter/flutter.git
|
||||||
|
|
||||||
|
- name: free disk space
|
||||||
|
if: ${{ matrix.platform == 'android' }}
|
||||||
|
run: |
|
||||||
|
sudo swapoff -a
|
||||||
|
sudo rm -f /swapfile
|
||||||
|
sudo apt clean
|
||||||
|
docker rmi $(docker image ls -aq)
|
||||||
|
df -h
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
if: ${{matrix.platform == 'android'}}
|
if: ${{matrix.platform == 'android'}}
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
@ -100,7 +109,7 @@ jobs:
|
|||||||
- name: Install ${{matrix.platform}} dependencies
|
- name: Install ${{matrix.platform}} dependencies
|
||||||
run: |
|
run: |
|
||||||
flutter pub get
|
flutter pub get
|
||||||
dart cli/cli.dart install-dependencies --platform=${{matrix.platform}}
|
dart cli/cli.dart install-dependencies --platform=${{matrix.platform}} --arch=${{matrix.arch}}
|
||||||
|
|
||||||
- name: Sign Apk
|
- name: Sign Apk
|
||||||
if: ${{matrix.platform == 'android'}}
|
if: ${{matrix.platform == 'android'}}
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,6 +9,7 @@
|
|||||||
.history
|
.history
|
||||||
.svn/
|
.svn/
|
||||||
|
|
||||||
|
|
||||||
# IntelliJ related
|
# IntelliJ related
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
|
|||||||
24
CHANGELOG.md
24
CHANGELOG.md
@ -1,5 +1,29 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [5.1.0](https://github.com/KRTirtho/spotube/compare/v5.0.0...v5.1.0) (2025-11-14)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- Show plugin source and set the only plugin as default if no plugin is there
|
||||||
|
- **playback**: Add dab music source
|
||||||
|
- **playback**: Add uncompressed flac playback support
|
||||||
|
- Add plugin audio source models and api service
|
||||||
|
- **plugins**: Filter plugins by abilities in plugins page and show abilities as badge
|
||||||
|
- Add setting default audio source support
|
||||||
|
- Move away from track source query and preferences audio quality and codec
|
||||||
|
- Add NewPipe support for desktop platforms
|
||||||
|
- Add default plugin loading capability
|
||||||
|
- **queue**: Add multi-select and bulk actions to queue ([#2839](https://github.com/KRTirtho/spotube/issues/2839))
|
||||||
|
- **android**: Add 16KB page size support
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Change plugin download directory to application support
|
||||||
|
- **playback**: Play next not working
|
||||||
|
- Downloaded tracks are not tagged with metadata
|
||||||
|
- Download not working in different devices and slow
|
||||||
|
- **playback**: Use stream instead of chunked serving of audio bytes
|
||||||
|
|
||||||
## [5.0.0](https://github.com/KRTirtho/spotube/compare/v4.0.2...v5.0.0) (2025-09-08)
|
## [5.0.0](https://github.com/KRTirtho/spotube/compare/v4.0.2...v5.0.0) (2025-09-08)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|||||||
39
README.md
39
README.md
@ -2,7 +2,7 @@
|
|||||||
<img width="600" src="assets/branding/spotube_banner.png" alt="Spotube Logo">
|
<img width="600" src="assets/branding/spotube_banner.png" alt="Spotube Logo">
|
||||||
|
|
||||||
A cross-platform extensible open-source music streaming platform.<br>
|
A cross-platform extensible open-source music streaming platform.<br>
|
||||||
Bring your own music metadata/playlist with plugins created by community or by yourself. A small step towards the decentralized music streaming era!
|
Bring your own music metadata/playlist/audio-source with plugins created by community or by yourself. A small step towards the decentralized music streaming era!
|
||||||
|
|
||||||
Btw it's not just another Electron app 😉
|
Btw it's not just another Electron app 😉
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [Invidious](https://invidious.io/) - Invidious is an open source alternative front-end to YouTube.
|
1. [Invidious](https://invidious.io/) - Invidious is an open source alternative front-end to YouTube.
|
||||||
1. [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A feature-rich command-line audio/video downloader.
|
1. [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A feature-rich command-line audio/video downloader.
|
||||||
1. [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) - NewPipe's core library for extracting data from streaming sites.
|
1. [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) - NewPipe's core library for extracting data from streaming sites.
|
||||||
1. [SongLink](https://song.link) - SongLink is a free smart link service that helps you share music with your audience. It's a one-stop-shop for creating smart links for music, podcasts, and other audio content
|
1. [YouTubeExplodeDart](https://github.com/Hexer10/youtube_explode_dart) - A port in dart of the youtube explode library. Supports several API functions without the need of Youtube API Key.
|
||||||
1. [LRCLib](https://lrclib.net/) - A public synced lyric API.
|
1. [LRCLib](https://lrclib.net/) - A public synced lyric API.
|
||||||
1. [Linux](https://www.linux.org) - Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution
|
1. [Linux](https://www.linux.org) - Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution
|
||||||
1. [AUR](https://aur.archlinux.org) - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
|
1. [AUR](https://aur.archlinux.org) - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
|
||||||
@ -223,7 +223,6 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
|
|
||||||
1. [app_links](https://github.com/llfbandit/app_links) - Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler for Flutter (desktop included).
|
1. [app_links](https://github.com/llfbandit/app_links) - Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler for Flutter (desktop included).
|
||||||
1. [args](https://pub.dev/packages/args) - Library for defining parsers for parsing raw command-line arguments into a set of options and values using GNU and POSIX style options.
|
1. [args](https://pub.dev/packages/args) - Library for defining parsers for parsing raw command-line arguments into a set of options and values using GNU and POSIX style options.
|
||||||
1. [async](https://pub.dev/packages/async) - Utility functions and classes related to the 'dart:async' library.
|
|
||||||
1. [audio_service](https://pub.dev/packages/audio_service) - Flutter plugin to play audio in the background while the screen is off.
|
1. [audio_service](https://pub.dev/packages/audio_service) - Flutter plugin to play audio in the background while the screen is off.
|
||||||
1. [audio_service_mpris](https://github.com/bdrazhzhov/audio-service-mpris) - audio_service platform interface supporting Media Player Remote Interfacing Specification.
|
1. [audio_service_mpris](https://github.com/bdrazhzhov/audio-service-mpris) - audio_service platform interface supporting Media Player Remote Interfacing Specification.
|
||||||
1. [audio_session](https://github.com/ryanheise/audio_session) - Sets the iOS audio session category and Android audio attributes for your app, and manages your app's audio focus, mixing and ducking behaviour.
|
1. [audio_session](https://github.com/ryanheise/audio_session) - Sets the iOS audio session category and Android audio attributes for your app, and manages your app's audio focus, mixing and ducking behaviour.
|
||||||
@ -250,15 +249,11 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [flutter_inappwebview](https://inappwebview.dev/) - A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
|
1. [flutter_inappwebview](https://inappwebview.dev/) - A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
|
||||||
1. [flutter_native_splash](https://pub.dev/packages/flutter_native_splash) - Customize Flutter's default white native splash screen with background color and splash image. Supports dark mode, full screen, and more.
|
1. [flutter_native_splash](https://pub.dev/packages/flutter_native_splash) - Customize Flutter's default white native splash screen with background color and splash image. Supports dark mode, full screen, and more.
|
||||||
1. [flutter_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
1. [flutter_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
||||||
1. [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) - Flutter Secure Storage provides API to store data in secure storage. Keychain is used in iOS, KeyStore based solution is used in Android.
|
|
||||||
1. [flutter_sharing_intent](https://github.com/bhagat-techind/flutter_sharing_intent.git) - A flutter plugin that allow flutter apps to receive photos, videos, text, urls or any other file types from another app.
|
1. [flutter_sharing_intent](https://github.com/bhagat-techind/flutter_sharing_intent.git) - A flutter plugin that allow flutter apps to receive photos, videos, text, urls or any other file types from another app.
|
||||||
1. [flutter_undraw](https://github.com/KRTirtho/flutter_undraw) - Undraw.co Illustrations for Flutter with customization options
|
1. [flutter_undraw](https://github.com/KRTirtho/flutter_undraw) - Undraw.co Illustrations for Flutter with customization options
|
||||||
1. [form_builder_validators](https://github.com/flutter-form-builder-ecosystem) - Form Builder Validators set of validators for FlutterFormBuilder. Provides common validators and a way to make your own.
|
1. [form_builder_validators](https://github.com/flutter-form-builder-ecosystem) - Form Builder Validators set of validators for FlutterFormBuilder. Provides common validators and a way to make your own.
|
||||||
1. [form_validator](https://github.com/TheMisir/form-validator) - Simplest form validation library for flutter's form field widgets
|
|
||||||
1. [freezed_annotation](https://pub.dev/packages/freezed_annotation) - Annotations for the freezed code-generator. This package does nothing without freezed too.
|
1. [freezed_annotation](https://pub.dev/packages/freezed_annotation) - Annotations for the freezed code-generator. This package does nothing without freezed too.
|
||||||
1. [fuzzywuzzy](https://github.com/sphericalkat/dart-fuzzywuzzy) - An implementation of the popular fuzzywuzzy package in Dart, to suit all your fuzzy string matching/searching needs!
|
1. [fuzzywuzzy](https://github.com/sphericalkat/dart-fuzzywuzzy) - An implementation of the popular fuzzywuzzy package in Dart, to suit all your fuzzy string matching/searching needs!
|
||||||
1. [gap](https://github.com/letsar/gap) - Flutter widgets for easily adding gaps inside Flex widgets such as Columns and Rows or scrolling views.
|
|
||||||
1. [google_fonts](https://pub.dev/packages/google_fonts) - A Flutter package to use fonts from fonts.google.com. Supports HTTP fetching, caching, and asset bundling.
|
|
||||||
1. [home_widget](https://pub.dev/packages/home_widget) - A plugin to provide a common interface for creating HomeScreen Widgets for Android and iOS.
|
1. [home_widget](https://pub.dev/packages/home_widget) - A plugin to provide a common interface for creating HomeScreen Widgets for Android and iOS.
|
||||||
1. [hooks_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
1. [hooks_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
||||||
1. [html](https://pub.dev/packages/html) - APIs for parsing and manipulating HTML content outside the browser.
|
1. [html](https://pub.dev/packages/html) - APIs for parsing and manipulating HTML content outside the browser.
|
||||||
@ -266,15 +261,10 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [http](https://pub.dev/packages/http) - A composable, multi-platform, Future-based API for HTTP requests.
|
1. [http](https://pub.dev/packages/http) - A composable, multi-platform, Future-based API for HTTP requests.
|
||||||
1. [image_picker](https://pub.dev/packages/image_picker) - Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera.
|
1. [image_picker](https://pub.dev/packages/image_picker) - Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera.
|
||||||
1. [intl](https://pub.dev/packages/intl) - Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
|
1. [intl](https://pub.dev/packages/intl) - Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
|
||||||
1. [invidious](https://pub.dev/packages/invidious) - Invidious API client for Dart and Flutter.
|
|
||||||
1. [jiosaavn](https://github.com/KRTirtho/jiosaavn) - Unofficial API client for jiosaavn.com
|
|
||||||
1. [json_annotation](https://pub.dev/packages/json_annotation) - Classes and helper functions that support JSON code generation via the `json_serializable` package.
|
|
||||||
1. [local_notifier](https://github.com/leanflutter/local_notifier) - This plugin allows Flutter desktop apps to displaying local notifications.
|
1. [local_notifier](https://github.com/leanflutter/local_notifier) - This plugin allows Flutter desktop apps to displaying local notifications.
|
||||||
1. [logger](https://pub.dev/packages/logger) - Small, easy to use and extensible logger which prints beautiful logs.
|
1. [logger](https://pub.dev/packages/logger) - Small, easy to use and extensible logger which prints beautiful logs.
|
||||||
1. [logging](https://pub.dev/packages/logging) - Provides APIs for debugging and error logging, similar to loggers in other languages, such as the Closure JS Logger and java.util.logging.Logger.
|
1. [logging](https://pub.dev/packages/logging) - Provides APIs for debugging and error logging, similar to loggers in other languages, such as the Closure JS Logger and java.util.logging.Logger.
|
||||||
1. [lrc](https://pub.dev/packages/lrc) - A Dart-only package that creates, parses, and handles LRC, which is a format that stores song lyrics.
|
1. [lrc](https://pub.dev/packages/lrc) - A Dart-only package that creates, parses, and handles LRC, which is a format that stores song lyrics.
|
||||||
1. [media_kit](https://github.com/media-kit/media-kit) - A cross-platform video player & audio player for Flutter & Dart. Performant, stable, feature-proof & modular.
|
|
||||||
1. [media_kit_libs_audio](https://github.com/media-kit/media-kit.git) - package:media_kit audio (only) playback native libraries for all platforms.
|
|
||||||
1. [metadata_god](https://pub.dev/packages/metadata_god) - Plugin for retrieving and writing audio tags/metadata from audio files
|
1. [metadata_god](https://pub.dev/packages/metadata_god) - Plugin for retrieving and writing audio tags/metadata from audio files
|
||||||
1. [mime](https://pub.dev/packages/mime) - Utilities for handling media (MIME) types, including determining a type from a file extension and file contents.
|
1. [mime](https://pub.dev/packages/mime) - Utilities for handling media (MIME) types, including determining a type from a file extension and file contents.
|
||||||
1. [open_file](https://pub.dev/packages/open_file) - A plug-in that can call native APP to open files with string result in flutter, support iOS(UTI) / android(intent) / PC(ffi) / web(dart:html)
|
1. [open_file](https://pub.dev/packages/open_file) - A plug-in that can call native APP to open files with string result in flutter, support iOS(UTI) / android(intent) / PC(ffi) / web(dart:html)
|
||||||
@ -283,7 +273,6 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [path](https://pub.dev/packages/path) - A string-based path manipulation library. All of the path operations you know and love, with solid support for Windows, POSIX (Linux and Mac OS X), and the web.
|
1. [path](https://pub.dev/packages/path) - A string-based path manipulation library. All of the path operations you know and love, with solid support for Windows, POSIX (Linux and Mac OS X), and the web.
|
||||||
1. [path_provider](https://pub.dev/packages/path_provider) - Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.
|
1. [path_provider](https://pub.dev/packages/path_provider) - Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.
|
||||||
1. [permission_handler](https://pub.dev/packages/permission_handler) - Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
|
1. [permission_handler](https://pub.dev/packages/permission_handler) - Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
|
||||||
1. [piped_client](https://github.com/KRTirtho/piped_client) - API Client for piped.video
|
|
||||||
1. [riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
1. [riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
|
||||||
1. [scroll_to_index](https://github.com/quire-io/scroll-to-index) - Scroll to a specific child of any scrollable widget in Flutter
|
1. [scroll_to_index](https://github.com/quire-io/scroll-to-index) - Scroll to a specific child of any scrollable widget in Flutter
|
||||||
1. [shadcn_flutter](https://github.com/sunarya-thito/shadcn_flutter) - Beautifully designed components from Shadcn/UI is now available for Flutter
|
1. [shadcn_flutter](https://github.com/sunarya-thito/shadcn_flutter) - Beautifully designed components from Shadcn/UI is now available for Flutter
|
||||||
@ -298,9 +287,6 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [smtc_windows](https://pub.dev/packages/smtc_windows) - Windows `SystemMediaTransportControls` implementation for Flutter giving access to Windows OS Media Control applet.
|
1. [smtc_windows](https://pub.dev/packages/smtc_windows) - Windows `SystemMediaTransportControls` implementation for Flutter giving access to Windows OS Media Control applet.
|
||||||
1. [sqlite3](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3) - Provides lightweight yet convenient bindings to SQLite by using dart:ffi
|
1. [sqlite3](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3) - Provides lightweight yet convenient bindings to SQLite by using dart:ffi
|
||||||
1. [sqlite3_flutter_libs](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3_flutter_libs) - Flutter plugin to include native sqlite3 libraries with your app
|
1. [sqlite3_flutter_libs](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3_flutter_libs) - Flutter plugin to include native sqlite3 libraries with your app
|
||||||
1. [stroke_text](https://github.com/MohamedAbd0/stroke_text) - A Simple Flutter plugin for applying stroke (border) style to a text widget
|
|
||||||
1. [system_theme](https://github.com/bdlukaa/system_theme/tree/master/system_theme) - A plugin to get the current system theme info. Supports Android, Web, Windows, Linux and macOS
|
|
||||||
1. [test](https://pub.dev/packages/test) - A full featured library for writing and running Dart tests across platforms.
|
|
||||||
1. [timezone](https://pub.dev/packages/timezone) - Time zone database and time zone aware DateTime.
|
1. [timezone](https://pub.dev/packages/timezone) - Time zone database and time zone aware DateTime.
|
||||||
1. [titlebar_buttons](https://github.com/gtk-flutter/titlebar_buttons) - A package which provides most of the titlebar buttons from windows, linux and macos.
|
1. [titlebar_buttons](https://github.com/gtk-flutter/titlebar_buttons) - A package which provides most of the titlebar buttons from windows, linux and macos.
|
||||||
1. [tray_manager](https://github.com/leanflutter/tray_manager) - This plugin allows Flutter desktop apps to defines system tray.
|
1. [tray_manager](https://github.com/leanflutter/tray_manager) - This plugin allows Flutter desktop apps to defines system tray.
|
||||||
@ -312,12 +298,17 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [web_socket_channel](https://pub.dev/packages/web_socket_channel) - StreamChannel wrappers for WebSockets. Provides a cross-platform WebSocketChannel API, a cross-platform implementation of that API that communicates over an underlying StreamChannel.
|
1. [web_socket_channel](https://pub.dev/packages/web_socket_channel) - StreamChannel wrappers for WebSockets. Provides a cross-platform WebSocketChannel API, a cross-platform implementation of that API that communicates over an underlying StreamChannel.
|
||||||
1. [wikipedia_api](https://github.com/KRTirtho/wikipedia_api) - Wikipedia API for dart and flutter
|
1. [wikipedia_api](https://github.com/KRTirtho/wikipedia_api) - Wikipedia API for dart and flutter
|
||||||
1. [win32_registry](https://pub.dev/packages/win32_registry) - A package that provides a friendly Dart API for accessing the Windows Registry.
|
1. [win32_registry](https://pub.dev/packages/win32_registry) - A package that provides a friendly Dart API for accessing the Windows Registry.
|
||||||
1. [window_manager](https://github.com/leanflutter/window_manager) - This plugin allows Flutter desktop apps to resizing and repositioning the window.
|
1. [window_manager](https://leanflutter.dev) - This plugin allows Flutter desktop apps to resizing and repositioning the window.
|
||||||
1. [youtube_explode_dart](https://github.com/Hexer10/youtube_explode_dart) - A port in dart of the youtube explode library. Supports several API functions without the need of Youtube API Key.
|
1. [youtube_explode_dart](https://github.com/Hexer10/youtube_explode_dart) - A port in dart of the youtube explode library. Supports several API functions without the need of Youtube API Key.
|
||||||
1. [http_parser](https://pub.dev/packages/http_parser) - A platform-independent package for parsing and serializing HTTP formats.
|
1. [http_parser](https://pub.dev/packages/http_parser) - A platform-independent package for parsing and serializing HTTP formats.
|
||||||
1. [collection](https://pub.dev/packages/collection) - Collections and utilities functions and classes related to collections.
|
1. [collection](https://pub.dev/packages/collection) - Collections and utilities functions and classes related to collections.
|
||||||
1. [otp_util](https://github.com/dushiling) - otp_util is a dart package to generate and verify one-time passwords,it It provides two methods TOPT and HOTP.They are Time-based OTPs and Counter-based OTPs.
|
1. [archive](https://pub.dev/packages/archive) - Provides encoders and decoders for various archive and compression formats such as zip, tar, bzip2, gzip, and zlib.
|
||||||
1. [dio_http2_adapter](https://github.com/cfug/dio) - An adapter that combines HTTP/2 and dio. Supports reusing connections, header compression, etc.
|
1. [hetu_script](https://github.com/hetu-script/hetu-script) - Hetu is a lightweight scripting language for embedding in Flutter apps.
|
||||||
|
1. [get_it](https://github.com/flutter-it/get_it) - Simple direct Service Locator that allows to decouple the interface from a concrete implementation and to access the concrete implementation from everywhere in your App"
|
||||||
|
1. [flutter_markdown_plus](https://pub.dev/packages/flutter_markdown_plus) - A Markdown renderer for Flutter. Create rich text output, including text styles, tables, links, and more, from plain text data formatted with simple Markdown tags.
|
||||||
|
1. [pub_semver](https://pub.dev/packages/pub_semver) - Versions and version constraints implementing pub's versioning policy. This is very similar to vanilla semver, with a few corner cases.
|
||||||
|
1. [change_case](https://github.com/mrgnhnt96/change_case) - An extension on String for the missing methods for camelCase, PascalCase, Capital Case, snake_case, param-case, CONSTANT_CASE and others.
|
||||||
|
1. [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) - Flutter Secure Storage provides API to store data in secure storage. Keychain is used in iOS, KeyStore based solution is used in Android.
|
||||||
1. [build_runner](https://pub.dev/packages/build_runner) - A build system for Dart code generation and modular compilation.
|
1. [build_runner](https://pub.dev/packages/build_runner) - A build system for Dart code generation and modular compilation.
|
||||||
1. [envied_generator](https://github.com/petercinibulk/envied) - Generator for the Envied package. See https://pub.dev/packages/envied.
|
1. [envied_generator](https://github.com/petercinibulk/envied) - Generator for the Envied package. See https://pub.dev/packages/envied.
|
||||||
1. [flutter_gen_runner](https://github.com/FlutterGen/flutter_gen) - The Flutter code generator for your assets, fonts, colors, … — Get rid of all String-based APIs.
|
1. [flutter_gen_runner](https://github.com/FlutterGen/flutter_gen) - The Flutter code generator for your assets, fonts, colors, … — Get rid of all String-based APIs.
|
||||||
@ -328,17 +319,23 @@ If you are curious, you can [read the reason of choosing this license](https://d
|
|||||||
1. [process_run](https://github.com/tekartik/process_run.dart/blob/master/packages/process_run) - Process run helpers for Linux/Win/Mac and which like feature for finding executables.
|
1. [process_run](https://github.com/tekartik/process_run.dart/blob/master/packages/process_run) - Process run helpers for Linux/Win/Mac and which like feature for finding executables.
|
||||||
1. [pubspec_parse](https://pub.dev/packages/pubspec_parse) - Simple package for parsing pubspec.yaml files with a type-safe API and rich error reporting.
|
1. [pubspec_parse](https://pub.dev/packages/pubspec_parse) - Simple package for parsing pubspec.yaml files with a type-safe API and rich error reporting.
|
||||||
1. [pub_api_client](https://github.com/leoafarias/pub_api_client) - An API Client for Pub to interact with public package information.
|
1. [pub_api_client](https://github.com/leoafarias/pub_api_client) - An API Client for Pub to interact with public package information.
|
||||||
1. [xml](https://github.com/renggli/dart-xml) - A lightweight library for parsing, traversing, querying, transforming and building XML documents.
|
|
||||||
1. [io](https://pub.dev/packages/io) - Utilities for the Dart VM Runtime including support for ANSI colors, file copying, and standard exit code values.
|
1. [io](https://pub.dev/packages/io) - Utilities for the Dart VM Runtime including support for ANSI colors, file copying, and standard exit code values.
|
||||||
1. [drift_dev](https://drift.simonbinder.eu/) - Dev-dependency for users of drift. Contains the generator and development tools.
|
1. [drift_dev](https://drift.simonbinder.eu/) - Dev-dependency for users of drift. Contains the generator and development tools.
|
||||||
|
1. [test](https://pub.dev/packages/test) - A full featured library for writing and running Dart tests across platforms.
|
||||||
1. [auto_route_generator](https://github.com/Milad-Akarie/auto_route_library) - AutoRoute is a declarative routing solution, where everything needed for navigation is automatically generated for you.
|
1. [auto_route_generator](https://github.com/Milad-Akarie/auto_route_library) - AutoRoute is a declarative routing solution, where everything needed for navigation is automatically generated for you.
|
||||||
1. [desktop_webview_window](https://github.com/MixinNetwork/flutter-plugins/tree/main/packages/desktop_webview_window) - Show a webview window on your flutter desktop application.
|
1. [desktop_webview_window](https://github.com/MixinNetwork/flutter-plugins/tree/main/packages/desktop_webview_window) - Show a webview window on your flutter desktop application.
|
||||||
1. [disable_battery_optimization](https://github.com/pvsvamsi/Disable-Battery-Optimizations) - Flutter plugin to check and disable battery optimizations. Also shows custom steps to disable the optimizations in devices like mi, xiaomi, samsung, oppo, huawei, oneplus etc
|
1. [disable_battery_optimization](https://github.com/pvsvamsi/Disable-Battery-Optimizations) - Flutter plugin to check and disable battery optimizations. Also shows custom steps to disable the optimizations in devices like mi, xiaomi, samsung, oppo, huawei, oneplus etc
|
||||||
1. [draggable_scrollbar](https://github.com/fluttercommunity/flutter-draggable-scrollbar) - A scrollbar that can be dragged for quickly navigation through a vertical list. Additional option is showing label next to scrollthumb with information about current item.
|
1. [draggable_scrollbar](https://github.com/fluttercommunity/flutter-draggable-scrollbar) - A scrollbar that can be dragged for quickly navigation through a vertical list. Additional option is showing label next to scrollthumb with information about current item.
|
||||||
1. [flutter_broadcasts](https://github.com/KRTirtho/flutter_broadcasts.git) - A plugin for sending and receiving broadcasts with Android intents and iOS notifications.
|
1. [flutter_broadcasts](https://github.com/KRTirtho/flutter_broadcasts.git) - A plugin for sending and receiving broadcasts with Android intents and iOS notifications.
|
||||||
1. [scrobblenaut](https://github.com/Nebulino/Scrobblenaut) - A deadly simple LastFM API Wrapper for Dart. So deadly simple that it's gonna hit the mark.
|
1. [scrobblenaut](https://github.com/Nebulino/Scrobblenaut) - A deadly simple LastFM API Wrapper for Dart. So deadly simple that it's gonna hit the mark.
|
||||||
1. [yt_dlp_dart](https://github.com/KRTirtho/yt_dlp_dart.git) - yt-dlp binding in Dart
|
1. [yt_dlp_dart](https://github.com/KRTirtho/yt_dlp_dart.git) - A starting point for Dart libraries or applications.
|
||||||
1. [flutter_new_pipe_extractor](https://github.com/KRTirtho/flutter_new_pipe_extractor) - NewPipeExtractor binding for Flutter (Android only)
|
1. [flutter_new_pipe_extractor](https://github.com/KRTirtho/flutter_new_pipe_extractor) - NewPipeExtractor binding for Flutter (Android only)
|
||||||
|
1. [hetu_std](https://github.com/hetu-community/hetu_std.git) - A sample command-line application.
|
||||||
|
1. [hetu_otp_util](https://github.com/hetu-community/hetu_otp_util.git) - A sample command-line application.
|
||||||
|
1. [hetu_spotube_plugin](https://github.com/KRTirtho/hetu_spotube_plugin) - A new Flutter package project.
|
||||||
|
1. [media_kit](https://github.com/media-kit/media-kit) - A cross-platform video player & audio player for Flutter & Dart. Performant, stable, feature-proof & modular.
|
||||||
|
1. [media_kit_libs_audio](https://github.com/media-kit/media-kit.git) - package:media_kit audio (only) playback native libraries for all platforms.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<div align="center"><h4>© Copyright Spotube 2025</h4></div>
|
<div align="center"><h4>© Copyright Spotube 2025</h4></div>
|
||||||
|
|||||||
1
android/.gitignore
vendored
1
android/.gitignore
vendored
@ -11,3 +11,4 @@ GeneratedPluginRegistrant.java
|
|||||||
key.properties
|
key.properties
|
||||||
**/*.keystore
|
**/*.keystore
|
||||||
**/*.jks
|
**/*.jks
|
||||||
|
.kotlin
|
||||||
@ -2,6 +2,7 @@ plugins {
|
|||||||
id "com.android.application"
|
id "com.android.application"
|
||||||
id "kotlin-android"
|
id "kotlin-android"
|
||||||
id "dev.flutter.flutter-gradle-plugin"
|
id "dev.flutter.flutter-gradle-plugin"
|
||||||
|
id "org.jetbrains.kotlin.plugin.compose"
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProperties = new Properties()
|
def localProperties = new Properties()
|
||||||
@ -35,7 +36,7 @@ android {
|
|||||||
|
|
||||||
compileSdkVersion 36
|
compileSdkVersion 36
|
||||||
|
|
||||||
ndkVersion = "27.0.12077973"
|
ndkVersion = "29.0.14206865"
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
coreLibraryDesugaringEnabled true
|
coreLibraryDesugaringEnabled true
|
||||||
|
|||||||
@ -19,7 +19,8 @@ pluginManagement {
|
|||||||
plugins {
|
plugins {
|
||||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||||
id "com.android.application" version '8.7.0' apply false
|
id "com.android.application" version '8.7.0' apply false
|
||||||
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
|
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
|
||||||
|
id "org.jetbrains.kotlin.plugin.compose" version "2.1.0" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
include ':app'
|
include ':app'
|
||||||
BIN
assets/images/logos/dab-music.png
Normal file
BIN
assets/images/logos/dab-music.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
BIN
assets/plugins/spotube-plugin-youtube-audio/plugin.smplug
Normal file
BIN
assets/plugins/spotube-plugin-youtube-audio/plugin.smplug
Normal file
Binary file not shown.
@ -2,9 +2,7 @@ import 'dart:async';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:args/command_runner.dart';
|
import 'package:args/command_runner.dart';
|
||||||
import 'package:collection/collection.dart';
|
|
||||||
import 'package:path/path.dart';
|
import 'package:path/path.dart';
|
||||||
import 'package:xml/xml.dart';
|
|
||||||
|
|
||||||
import '../../core/env.dart';
|
import '../../core/env.dart';
|
||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
@ -24,39 +22,6 @@ class AndroidBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
"flutter build apk --flavor ${CliEnv.channel.name}",
|
"flutter build apk --flavor ${CliEnv.channel.name}",
|
||||||
);
|
);
|
||||||
|
|
||||||
await dotEnvFile.writeAsString(
|
|
||||||
"\nENABLE_UPDATE_CHECK=0"
|
|
||||||
"\nHIDE_DONATIONS=1",
|
|
||||||
mode: FileMode.append,
|
|
||||||
);
|
|
||||||
|
|
||||||
final androidManifestFile = File(
|
|
||||||
join(cwd.path, "android", "app", "src", "main", "AndroidManifest.xml"));
|
|
||||||
|
|
||||||
final androidManifestXml =
|
|
||||||
XmlDocument.parse(await androidManifestFile.readAsString());
|
|
||||||
|
|
||||||
final deletingElement =
|
|
||||||
androidManifestXml.findAllElements("meta-data").firstWhereOrNull(
|
|
||||||
(el) =>
|
|
||||||
el.getAttribute("android:name") ==
|
|
||||||
"com.google.android.gms.car.application",
|
|
||||||
);
|
|
||||||
|
|
||||||
deletingElement?.parent?.children.remove(deletingElement);
|
|
||||||
|
|
||||||
await androidManifestFile.writeAsString(
|
|
||||||
androidManifestXml.toXmlString(pretty: true),
|
|
||||||
);
|
|
||||||
|
|
||||||
await shell.run(
|
|
||||||
"""
|
|
||||||
dart run build_runner clean
|
|
||||||
dart run build_runner build --delete-conflicting-outputs
|
|
||||||
flutter build appbundle --flavor ${CliEnv.channel.name}
|
|
||||||
""",
|
|
||||||
);
|
|
||||||
|
|
||||||
final ogApkFile = File(
|
final ogApkFile = File(
|
||||||
join(
|
join(
|
||||||
"build",
|
"build",
|
||||||
@ -71,22 +36,6 @@ class AndroidBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
join(cwd.path, "build", "Spotube-android-all-arch.apk"),
|
join(cwd.path, "build", "Spotube-android-all-arch.apk"),
|
||||||
);
|
);
|
||||||
|
|
||||||
final ogAppbundleFile = File(
|
|
||||||
join(
|
|
||||||
cwd.path,
|
|
||||||
"build",
|
|
||||||
"app",
|
|
||||||
"outputs",
|
|
||||||
"bundle",
|
|
||||||
"${CliEnv.channel.name}Release",
|
|
||||||
"app-${CliEnv.channel.name}-release.aab",
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
await ogAppbundleFile.copy(
|
|
||||||
join(cwd.path, "build", "Spotube-playstore-all-arch.aab"),
|
|
||||||
);
|
|
||||||
|
|
||||||
stdout.writeln("✅ Built Android Apk and Appbundle");
|
stdout.writeln("✅ Built Android Apk and Appbundle");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,7 +59,7 @@ mixin BuildCommandCommonSteps on Command {
|
|||||||
"""
|
"""
|
||||||
flutter pub get
|
flutter pub get
|
||||||
dart run build_runner build --delete-conflicting-outputs
|
dart run build_runner build --delete-conflicting-outputs
|
||||||
dart pub global activate flutter_distributor
|
dart pub global activate fastforge
|
||||||
""",
|
""",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,12 +37,11 @@ class LinuxBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
await bootstrap();
|
await bootstrap();
|
||||||
|
|
||||||
await shell.run(
|
await shell.run(
|
||||||
"flutter_distributor package --platform=linux --targets=deb",
|
"fastforge package --platform=linux --targets=deb,appimage",
|
||||||
);
|
);
|
||||||
|
|
||||||
if (architecture == "x86") {
|
if (architecture == "x86") {
|
||||||
await shell.run(
|
await shell.run(
|
||||||
"flutter_distributor package --platform=linux --targets=rpm",
|
"fastforge package --platform=linux --targets=rpm",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +115,23 @@ class LinuxBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
await ogRpm.delete();
|
await ogRpm.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ogAppImage = File(
|
||||||
|
join(
|
||||||
|
cwd.path,
|
||||||
|
"dist",
|
||||||
|
pubspec.version.toString(),
|
||||||
|
"spotube-${pubspec.version}-linux.AppImage",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await ogAppImage.copy(
|
||||||
|
join(
|
||||||
|
cwd.path,
|
||||||
|
"dist",
|
||||||
|
"Spotube-linux-$bundleArchName.AppImage",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await ogAppImage.delete();
|
||||||
|
|
||||||
stdout.writeln("✅ Linux building done");
|
stdout.writeln("✅ Linux building done");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ class MacosBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
"""
|
"""
|
||||||
flutter build macos
|
flutter build macos
|
||||||
appdmg appdmg.json ${join(cwd.path, "build", "Spotube-macos-universal.dmg")}
|
appdmg appdmg.json ${join(cwd.path, "build", "Spotube-macos-universal.dmg")}
|
||||||
flutter_distributor package --platform=macos --targets pkg --skip-clean
|
fastforge package --platform=macos --targets pkg --skip-clean
|
||||||
""",
|
""",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,7 @@ class WindowsBuildCommand extends Command with BuildCommandCommonSteps {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await shell.run(
|
await shell.run(
|
||||||
"flutter_distributor package --platform=windows --targets=exe --skip-clean",
|
"fastforge package --platform=windows --targets=exe --skip-clean",
|
||||||
);
|
);
|
||||||
|
|
||||||
final ogExe = File(
|
final ogExe = File(
|
||||||
|
|||||||
@ -37,14 +37,24 @@ class InstallDependenciesCommand extends Command {
|
|||||||
FutureOr? run() async {
|
FutureOr? run() async {
|
||||||
final shell = Shell();
|
final shell = Shell();
|
||||||
|
|
||||||
|
final arch = argResults?.option("arch") == "x86" ? "x86_64" : "aarch64";
|
||||||
|
|
||||||
switch (argResults!.option("platform")) {
|
switch (argResults!.option("platform")) {
|
||||||
case "windows":
|
case "windows":
|
||||||
|
await shell.run(
|
||||||
|
"""
|
||||||
|
choco install innosetup -y
|
||||||
|
""",
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case "linux":
|
case "linux":
|
||||||
await shell.run(
|
await shell.run(
|
||||||
"""
|
"""
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install -y tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp25 libsecret-1-dev libjsoncpp-dev libnotify-bin libnotify-dev mpv libmpv-dev libwebkit2gtk-4.1-0 libwebkit2gtk-4.1-dev libsoup-3.0-0 libsoup-3.0-dev
|
sudo apt-get install -y wget tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp25 libsecret-1-dev libjsoncpp-dev libnotify-bin libnotify-dev mpv libmpv-dev libwebkit2gtk-4.1-0 libwebkit2gtk-4.1-dev libsoup-3.0-0 libsoup-3.0-dev
|
||||||
|
wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-$arch.AppImage"
|
||||||
|
chmod +x appimagetool
|
||||||
|
sudo mv appimagetool /usr/local/bin/
|
||||||
""",
|
""",
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|||||||
1
drift_schemas/app_db/drift_schema_v10.json
Normal file
1
drift_schemas/app_db/drift_schema_v10.json
Normal file
File diff suppressed because one or more lines are too long
1
drift_schemas/app_db/drift_schema_v9.json
Normal file
1
drift_schemas/app_db/drift_schema_v9.json
Normal file
File diff suppressed because one or more lines are too long
@ -1,3 +1,5 @@
|
|||||||
|
// dart format width=80
|
||||||
|
|
||||||
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
/// *****************************************************
|
/// *****************************************************
|
||||||
/// FlutterGen
|
/// FlutterGen
|
||||||
@ -5,7 +7,7 @@
|
|||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use
|
// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import
|
||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
@ -64,9 +66,26 @@ class $AssetsImagesGen {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class $AssetsPluginsGen {
|
||||||
|
const $AssetsPluginsGen();
|
||||||
|
|
||||||
|
/// Directory path: assets/plugins/spotube-plugin-musicbrainz-listenbrainz
|
||||||
|
$AssetsPluginsSpotubePluginMusicbrainzListenbrainzGen
|
||||||
|
get spotubePluginMusicbrainzListenbrainz =>
|
||||||
|
const $AssetsPluginsSpotubePluginMusicbrainzListenbrainzGen();
|
||||||
|
|
||||||
|
/// Directory path: assets/plugins/spotube-plugin-youtube-audio
|
||||||
|
$AssetsPluginsSpotubePluginYoutubeAudioGen get spotubePluginYoutubeAudio =>
|
||||||
|
const $AssetsPluginsSpotubePluginYoutubeAudioGen();
|
||||||
|
}
|
||||||
|
|
||||||
class $AssetsImagesLogosGen {
|
class $AssetsImagesLogosGen {
|
||||||
const $AssetsImagesLogosGen();
|
const $AssetsImagesLogosGen();
|
||||||
|
|
||||||
|
/// File path: assets/images/logos/dab-music.png
|
||||||
|
AssetGenImage get dabMusic =>
|
||||||
|
const AssetGenImage('assets/images/logos/dab-music.png');
|
||||||
|
|
||||||
/// File path: assets/images/logos/invidious.jpg
|
/// File path: assets/images/logos/invidious.jpg
|
||||||
AssetGenImage get invidious =>
|
AssetGenImage get invidious =>
|
||||||
const AssetGenImage('assets/images/logos/invidious.jpg');
|
const AssetGenImage('assets/images/logos/invidious.jpg');
|
||||||
@ -75,20 +94,39 @@ class $AssetsImagesLogosGen {
|
|||||||
AssetGenImage get jiosaavn =>
|
AssetGenImage get jiosaavn =>
|
||||||
const AssetGenImage('assets/images/logos/jiosaavn.png');
|
const AssetGenImage('assets/images/logos/jiosaavn.png');
|
||||||
|
|
||||||
/// File path: assets/images/logos/songlink-transparent.png
|
/// List of all assets
|
||||||
AssetGenImage get songlinkTransparent =>
|
List<AssetGenImage> get values => [dabMusic, invidious, jiosaavn];
|
||||||
const AssetGenImage('assets/images/logos/songlink-transparent.png');
|
}
|
||||||
|
|
||||||
|
class $AssetsPluginsSpotubePluginMusicbrainzListenbrainzGen {
|
||||||
|
const $AssetsPluginsSpotubePluginMusicbrainzListenbrainzGen();
|
||||||
|
|
||||||
|
/// File path: assets/plugins/spotube-plugin-musicbrainz-listenbrainz/plugin.smplug
|
||||||
|
String get plugin =>
|
||||||
|
'assets/plugins/spotube-plugin-musicbrainz-listenbrainz/plugin.smplug';
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
List<AssetGenImage> get values => [invidious, jiosaavn, songlinkTransparent];
|
List<String> get values => [plugin];
|
||||||
|
}
|
||||||
|
|
||||||
|
class $AssetsPluginsSpotubePluginYoutubeAudioGen {
|
||||||
|
const $AssetsPluginsSpotubePluginYoutubeAudioGen();
|
||||||
|
|
||||||
|
/// File path: assets/plugins/spotube-plugin-youtube-audio/plugin.smplug
|
||||||
|
String get plugin =>
|
||||||
|
'assets/plugins/spotube-plugin-youtube-audio/plugin.smplug';
|
||||||
|
|
||||||
|
/// List of all assets
|
||||||
|
List<String> get values => [plugin];
|
||||||
}
|
}
|
||||||
|
|
||||||
class Assets {
|
class Assets {
|
||||||
Assets._();
|
const Assets._();
|
||||||
|
|
||||||
static const String license = 'LICENSE';
|
static const String license = 'LICENSE';
|
||||||
static const $AssetsBrandingGen branding = $AssetsBrandingGen();
|
static const $AssetsBrandingGen branding = $AssetsBrandingGen();
|
||||||
static const $AssetsImagesGen images = $AssetsImagesGen();
|
static const $AssetsImagesGen images = $AssetsImagesGen();
|
||||||
|
static const $AssetsPluginsGen plugins = $AssetsPluginsGen();
|
||||||
|
|
||||||
/// List of all assets
|
/// List of all assets
|
||||||
static List<String> get values => [license];
|
static List<String> get values => [license];
|
||||||
@ -99,12 +137,14 @@ class AssetGenImage {
|
|||||||
this._assetName, {
|
this._assetName, {
|
||||||
this.size,
|
this.size,
|
||||||
this.flavors = const {},
|
this.flavors = const {},
|
||||||
|
this.animation,
|
||||||
});
|
});
|
||||||
|
|
||||||
final String _assetName;
|
final String _assetName;
|
||||||
|
|
||||||
final Size? size;
|
final Size? size;
|
||||||
final Set<String> flavors;
|
final Set<String> flavors;
|
||||||
|
final AssetGenImageAnimation? animation;
|
||||||
|
|
||||||
Image image({
|
Image image({
|
||||||
Key? key,
|
Key? key,
|
||||||
@ -127,7 +167,7 @@ class AssetGenImage {
|
|||||||
bool gaplessPlayback = true,
|
bool gaplessPlayback = true,
|
||||||
bool isAntiAlias = false,
|
bool isAntiAlias = false,
|
||||||
String? package,
|
String? package,
|
||||||
FilterQuality filterQuality = FilterQuality.low,
|
FilterQuality filterQuality = FilterQuality.medium,
|
||||||
int? cacheWidth,
|
int? cacheWidth,
|
||||||
int? cacheHeight,
|
int? cacheHeight,
|
||||||
}) {
|
}) {
|
||||||
@ -174,3 +214,15 @@ class AssetGenImage {
|
|||||||
|
|
||||||
String get keyName => _assetName;
|
String get keyName => _assetName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AssetGenImageAnimation {
|
||||||
|
const AssetGenImageAnimation({
|
||||||
|
required this.isAnimation,
|
||||||
|
required this.duration,
|
||||||
|
required this.frames,
|
||||||
|
});
|
||||||
|
|
||||||
|
final bool isAnimation;
|
||||||
|
final Duration duration;
|
||||||
|
final int frames;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
// dart format width=80
|
||||||
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
/// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
/// *****************************************************
|
/// *****************************************************
|
||||||
/// FlutterGen
|
/// FlutterGen
|
||||||
@ -5,7 +6,7 @@
|
|||||||
|
|
||||||
// coverage:ignore-file
|
// coverage:ignore-file
|
||||||
// ignore_for_file: type=lint
|
// ignore_for_file: type=lint
|
||||||
// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use
|
// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import
|
||||||
|
|
||||||
class FontFamily {
|
class FontFamily {
|
||||||
FontFamily._();
|
FontFamily._();
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
// dart format width=80
|
||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
@ -59,10 +60,7 @@ import 'package:spotube/pages/track/track.dart' as _i35;
|
|||||||
/// [_i1.AboutSpotubePage]
|
/// [_i1.AboutSpotubePage]
|
||||||
class AboutSpotubeRoute extends _i41.PageRouteInfo<void> {
|
class AboutSpotubeRoute extends _i41.PageRouteInfo<void> {
|
||||||
const AboutSpotubeRoute({List<_i41.PageRouteInfo>? children})
|
const AboutSpotubeRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(AboutSpotubeRoute.name, initialChildren: children);
|
||||||
AboutSpotubeRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'AboutSpotubeRoute';
|
static const String name = 'AboutSpotubeRoute';
|
||||||
|
|
||||||
@ -83,15 +81,11 @@ class AlbumRoute extends _i41.PageRouteInfo<AlbumRouteArgs> {
|
|||||||
required _i43.SpotubeSimpleAlbumObject album,
|
required _i43.SpotubeSimpleAlbumObject album,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
AlbumRoute.name,
|
AlbumRoute.name,
|
||||||
args: AlbumRouteArgs(
|
args: AlbumRouteArgs(key: key, id: id, album: album),
|
||||||
key: key,
|
rawPathParams: {'id': id},
|
||||||
id: id,
|
initialChildren: children,
|
||||||
album: album,
|
);
|
||||||
),
|
|
||||||
rawPathParams: {'id': id},
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'AlbumRoute';
|
static const String name = 'AlbumRoute';
|
||||||
|
|
||||||
@ -99,21 +93,13 @@ class AlbumRoute extends _i41.PageRouteInfo<AlbumRouteArgs> {
|
|||||||
name,
|
name,
|
||||||
builder: (data) {
|
builder: (data) {
|
||||||
final args = data.argsAs<AlbumRouteArgs>();
|
final args = data.argsAs<AlbumRouteArgs>();
|
||||||
return _i2.AlbumPage(
|
return _i2.AlbumPage(key: args.key, id: args.id, album: args.album);
|
||||||
key: args.key,
|
|
||||||
id: args.id,
|
|
||||||
album: args.album,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class AlbumRouteArgs {
|
class AlbumRouteArgs {
|
||||||
const AlbumRouteArgs({
|
const AlbumRouteArgs({this.key, required this.id, required this.album});
|
||||||
this.key,
|
|
||||||
required this.id,
|
|
||||||
required this.album,
|
|
||||||
});
|
|
||||||
|
|
||||||
final _i42.Key? key;
|
final _i42.Key? key;
|
||||||
|
|
||||||
@ -135,14 +121,11 @@ class ArtistRoute extends _i41.PageRouteInfo<ArtistRouteArgs> {
|
|||||||
_i42.Key? key,
|
_i42.Key? key,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
ArtistRoute.name,
|
ArtistRoute.name,
|
||||||
args: ArtistRouteArgs(
|
args: ArtistRouteArgs(artistId: artistId, key: key),
|
||||||
artistId: artistId,
|
rawPathParams: {'id': artistId},
|
||||||
key: key,
|
initialChildren: children,
|
||||||
),
|
);
|
||||||
rawPathParams: {'id': artistId},
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'ArtistRoute';
|
static const String name = 'ArtistRoute';
|
||||||
|
|
||||||
@ -151,20 +134,15 @@ class ArtistRoute extends _i41.PageRouteInfo<ArtistRouteArgs> {
|
|||||||
builder: (data) {
|
builder: (data) {
|
||||||
final pathParams = data.inheritedPathParams;
|
final pathParams = data.inheritedPathParams;
|
||||||
final args = data.argsAs<ArtistRouteArgs>(
|
final args = data.argsAs<ArtistRouteArgs>(
|
||||||
orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id')));
|
orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id')),
|
||||||
return _i3.ArtistPage(
|
|
||||||
args.artistId,
|
|
||||||
key: args.key,
|
|
||||||
);
|
);
|
||||||
|
return _i3.ArtistPage(args.artistId, key: args.key);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ArtistRouteArgs {
|
class ArtistRouteArgs {
|
||||||
const ArtistRouteArgs({
|
const ArtistRouteArgs({required this.artistId, this.key});
|
||||||
required this.artistId,
|
|
||||||
this.key,
|
|
||||||
});
|
|
||||||
|
|
||||||
final String artistId;
|
final String artistId;
|
||||||
|
|
||||||
@ -180,10 +158,7 @@ class ArtistRouteArgs {
|
|||||||
/// [_i4.BlackListPage]
|
/// [_i4.BlackListPage]
|
||||||
class BlackListRoute extends _i41.PageRouteInfo<void> {
|
class BlackListRoute extends _i41.PageRouteInfo<void> {
|
||||||
const BlackListRoute({List<_i41.PageRouteInfo>? children})
|
const BlackListRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(BlackListRoute.name, initialChildren: children);
|
||||||
BlackListRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'BlackListRoute';
|
static const String name = 'BlackListRoute';
|
||||||
|
|
||||||
@ -199,10 +174,7 @@ class BlackListRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i5.ConnectControlPage]
|
/// [_i5.ConnectControlPage]
|
||||||
class ConnectControlRoute extends _i41.PageRouteInfo<void> {
|
class ConnectControlRoute extends _i41.PageRouteInfo<void> {
|
||||||
const ConnectControlRoute({List<_i41.PageRouteInfo>? children})
|
const ConnectControlRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(ConnectControlRoute.name, initialChildren: children);
|
||||||
ConnectControlRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'ConnectControlRoute';
|
static const String name = 'ConnectControlRoute';
|
||||||
|
|
||||||
@ -218,10 +190,7 @@ class ConnectControlRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i6.ConnectPage]
|
/// [_i6.ConnectPage]
|
||||||
class ConnectRoute extends _i41.PageRouteInfo<void> {
|
class ConnectRoute extends _i41.PageRouteInfo<void> {
|
||||||
const ConnectRoute({List<_i41.PageRouteInfo>? children})
|
const ConnectRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(ConnectRoute.name, initialChildren: children);
|
||||||
ConnectRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'ConnectRoute';
|
static const String name = 'ConnectRoute';
|
||||||
|
|
||||||
@ -237,10 +206,7 @@ class ConnectRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i7.GettingStartedPage]
|
/// [_i7.GettingStartedPage]
|
||||||
class GettingStartedRoute extends _i41.PageRouteInfo<void> {
|
class GettingStartedRoute extends _i41.PageRouteInfo<void> {
|
||||||
const GettingStartedRoute({List<_i41.PageRouteInfo>? children})
|
const GettingStartedRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(GettingStartedRoute.name, initialChildren: children);
|
||||||
GettingStartedRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'GettingStartedRoute';
|
static const String name = 'GettingStartedRoute';
|
||||||
|
|
||||||
@ -262,15 +228,15 @@ class HomeBrowseSectionItemsRoute
|
|||||||
required _i43.SpotubeBrowseSectionObject<Object> section,
|
required _i43.SpotubeBrowseSectionObject<Object> section,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
HomeBrowseSectionItemsRoute.name,
|
HomeBrowseSectionItemsRoute.name,
|
||||||
args: HomeBrowseSectionItemsRouteArgs(
|
args: HomeBrowseSectionItemsRouteArgs(
|
||||||
key: key,
|
key: key,
|
||||||
sectionId: sectionId,
|
sectionId: sectionId,
|
||||||
section: section,
|
section: section,
|
||||||
),
|
),
|
||||||
rawPathParams: {'sectionId': sectionId},
|
rawPathParams: {'sectionId': sectionId},
|
||||||
initialChildren: children,
|
initialChildren: children,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const String name = 'HomeBrowseSectionItemsRoute';
|
static const String name = 'HomeBrowseSectionItemsRoute';
|
||||||
|
|
||||||
@ -310,10 +276,7 @@ class HomeBrowseSectionItemsRouteArgs {
|
|||||||
/// [_i9.HomePage]
|
/// [_i9.HomePage]
|
||||||
class HomeRoute extends _i41.PageRouteInfo<void> {
|
class HomeRoute extends _i41.PageRouteInfo<void> {
|
||||||
const HomeRoute({List<_i41.PageRouteInfo>? children})
|
const HomeRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(HomeRoute.name, initialChildren: children);
|
||||||
HomeRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'HomeRoute';
|
static const String name = 'HomeRoute';
|
||||||
|
|
||||||
@ -329,10 +292,7 @@ class HomeRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i10.LastFMLoginPage]
|
/// [_i10.LastFMLoginPage]
|
||||||
class LastFMLoginRoute extends _i41.PageRouteInfo<void> {
|
class LastFMLoginRoute extends _i41.PageRouteInfo<void> {
|
||||||
const LastFMLoginRoute({List<_i41.PageRouteInfo>? children})
|
const LastFMLoginRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(LastFMLoginRoute.name, initialChildren: children);
|
||||||
LastFMLoginRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'LastFMLoginRoute';
|
static const String name = 'LastFMLoginRoute';
|
||||||
|
|
||||||
@ -348,10 +308,7 @@ class LastFMLoginRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i11.LibraryPage]
|
/// [_i11.LibraryPage]
|
||||||
class LibraryRoute extends _i41.PageRouteInfo<void> {
|
class LibraryRoute extends _i41.PageRouteInfo<void> {
|
||||||
const LibraryRoute({List<_i41.PageRouteInfo>? children})
|
const LibraryRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(LibraryRoute.name, initialChildren: children);
|
||||||
LibraryRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'LibraryRoute';
|
static const String name = 'LibraryRoute';
|
||||||
|
|
||||||
@ -371,13 +328,10 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo<LikedPlaylistRouteArgs> {
|
|||||||
required _i43.SpotubeSimplePlaylistObject playlist,
|
required _i43.SpotubeSimplePlaylistObject playlist,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
LikedPlaylistRoute.name,
|
LikedPlaylistRoute.name,
|
||||||
args: LikedPlaylistRouteArgs(
|
args: LikedPlaylistRouteArgs(key: key, playlist: playlist),
|
||||||
key: key,
|
initialChildren: children,
|
||||||
playlist: playlist,
|
);
|
||||||
),
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'LikedPlaylistRoute';
|
static const String name = 'LikedPlaylistRoute';
|
||||||
|
|
||||||
@ -385,19 +339,13 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo<LikedPlaylistRouteArgs> {
|
|||||||
name,
|
name,
|
||||||
builder: (data) {
|
builder: (data) {
|
||||||
final args = data.argsAs<LikedPlaylistRouteArgs>();
|
final args = data.argsAs<LikedPlaylistRouteArgs>();
|
||||||
return _i12.LikedPlaylistPage(
|
return _i12.LikedPlaylistPage(key: args.key, playlist: args.playlist);
|
||||||
key: args.key,
|
|
||||||
playlist: args.playlist,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class LikedPlaylistRouteArgs {
|
class LikedPlaylistRouteArgs {
|
||||||
const LikedPlaylistRouteArgs({
|
const LikedPlaylistRouteArgs({this.key, required this.playlist});
|
||||||
this.key,
|
|
||||||
required this.playlist,
|
|
||||||
});
|
|
||||||
|
|
||||||
final _i42.Key? key;
|
final _i42.Key? key;
|
||||||
|
|
||||||
@ -419,15 +367,15 @@ class LocalLibraryRoute extends _i41.PageRouteInfo<LocalLibraryRouteArgs> {
|
|||||||
bool isCache = false,
|
bool isCache = false,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
LocalLibraryRoute.name,
|
LocalLibraryRoute.name,
|
||||||
args: LocalLibraryRouteArgs(
|
args: LocalLibraryRouteArgs(
|
||||||
location: location,
|
location: location,
|
||||||
key: key,
|
key: key,
|
||||||
isDownloads: isDownloads,
|
isDownloads: isDownloads,
|
||||||
isCache: isCache,
|
isCache: isCache,
|
||||||
),
|
),
|
||||||
initialChildren: children,
|
initialChildren: children,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const String name = 'LocalLibraryRoute';
|
static const String name = 'LocalLibraryRoute';
|
||||||
|
|
||||||
@ -471,10 +419,7 @@ class LocalLibraryRouteArgs {
|
|||||||
/// [_i14.LogsPage]
|
/// [_i14.LogsPage]
|
||||||
class LogsRoute extends _i41.PageRouteInfo<void> {
|
class LogsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const LogsRoute({List<_i41.PageRouteInfo>? children})
|
const LogsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(LogsRoute.name, initialChildren: children);
|
||||||
LogsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'LogsRoute';
|
static const String name = 'LogsRoute';
|
||||||
|
|
||||||
@ -490,10 +435,7 @@ class LogsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i15.LyricsPage]
|
/// [_i15.LyricsPage]
|
||||||
class LyricsRoute extends _i41.PageRouteInfo<void> {
|
class LyricsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const LyricsRoute({List<_i41.PageRouteInfo>? children})
|
const LyricsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(LyricsRoute.name, initialChildren: children);
|
||||||
LyricsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'LyricsRoute';
|
static const String name = 'LyricsRoute';
|
||||||
|
|
||||||
@ -513,13 +455,10 @@ class MiniLyricsRoute extends _i41.PageRouteInfo<MiniLyricsRouteArgs> {
|
|||||||
required _i44.Size prevSize,
|
required _i44.Size prevSize,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
MiniLyricsRoute.name,
|
MiniLyricsRoute.name,
|
||||||
args: MiniLyricsRouteArgs(
|
args: MiniLyricsRouteArgs(key: key, prevSize: prevSize),
|
||||||
key: key,
|
initialChildren: children,
|
||||||
prevSize: prevSize,
|
);
|
||||||
),
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'MiniLyricsRoute';
|
static const String name = 'MiniLyricsRoute';
|
||||||
|
|
||||||
@ -527,19 +466,13 @@ class MiniLyricsRoute extends _i41.PageRouteInfo<MiniLyricsRouteArgs> {
|
|||||||
name,
|
name,
|
||||||
builder: (data) {
|
builder: (data) {
|
||||||
final args = data.argsAs<MiniLyricsRouteArgs>();
|
final args = data.argsAs<MiniLyricsRouteArgs>();
|
||||||
return _i16.MiniLyricsPage(
|
return _i16.MiniLyricsPage(key: args.key, prevSize: args.prevSize);
|
||||||
key: args.key,
|
|
||||||
prevSize: args.prevSize,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MiniLyricsRouteArgs {
|
class MiniLyricsRouteArgs {
|
||||||
const MiniLyricsRouteArgs({
|
const MiniLyricsRouteArgs({this.key, required this.prevSize});
|
||||||
this.key,
|
|
||||||
required this.prevSize,
|
|
||||||
});
|
|
||||||
|
|
||||||
final _i44.Key? key;
|
final _i44.Key? key;
|
||||||
|
|
||||||
@ -555,10 +488,7 @@ class MiniLyricsRouteArgs {
|
|||||||
/// [_i17.PlayerLyricsPage]
|
/// [_i17.PlayerLyricsPage]
|
||||||
class PlayerLyricsRoute extends _i41.PageRouteInfo<void> {
|
class PlayerLyricsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const PlayerLyricsRoute({List<_i41.PageRouteInfo>? children})
|
const PlayerLyricsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(PlayerLyricsRoute.name, initialChildren: children);
|
||||||
PlayerLyricsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'PlayerLyricsRoute';
|
static const String name = 'PlayerLyricsRoute';
|
||||||
|
|
||||||
@ -574,10 +504,7 @@ class PlayerLyricsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i18.PlayerQueuePage]
|
/// [_i18.PlayerQueuePage]
|
||||||
class PlayerQueueRoute extends _i41.PageRouteInfo<void> {
|
class PlayerQueueRoute extends _i41.PageRouteInfo<void> {
|
||||||
const PlayerQueueRoute({List<_i41.PageRouteInfo>? children})
|
const PlayerQueueRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(PlayerQueueRoute.name, initialChildren: children);
|
||||||
PlayerQueueRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'PlayerQueueRoute';
|
static const String name = 'PlayerQueueRoute';
|
||||||
|
|
||||||
@ -593,10 +520,7 @@ class PlayerQueueRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i19.PlayerTrackSourcesPage]
|
/// [_i19.PlayerTrackSourcesPage]
|
||||||
class PlayerTrackSourcesRoute extends _i41.PageRouteInfo<void> {
|
class PlayerTrackSourcesRoute extends _i41.PageRouteInfo<void> {
|
||||||
const PlayerTrackSourcesRoute({List<_i41.PageRouteInfo>? children})
|
const PlayerTrackSourcesRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(PlayerTrackSourcesRoute.name, initialChildren: children);
|
||||||
PlayerTrackSourcesRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'PlayerTrackSourcesRoute';
|
static const String name = 'PlayerTrackSourcesRoute';
|
||||||
|
|
||||||
@ -617,15 +541,11 @@ class PlaylistRoute extends _i41.PageRouteInfo<PlaylistRouteArgs> {
|
|||||||
required _i43.SpotubeSimplePlaylistObject playlist,
|
required _i43.SpotubeSimplePlaylistObject playlist,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
PlaylistRoute.name,
|
PlaylistRoute.name,
|
||||||
args: PlaylistRouteArgs(
|
args: PlaylistRouteArgs(key: key, id: id, playlist: playlist),
|
||||||
key: key,
|
rawPathParams: {'id': id},
|
||||||
id: id,
|
initialChildren: children,
|
||||||
playlist: playlist,
|
);
|
||||||
),
|
|
||||||
rawPathParams: {'id': id},
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'PlaylistRoute';
|
static const String name = 'PlaylistRoute';
|
||||||
|
|
||||||
@ -643,11 +563,7 @@ class PlaylistRoute extends _i41.PageRouteInfo<PlaylistRouteArgs> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class PlaylistRouteArgs {
|
class PlaylistRouteArgs {
|
||||||
const PlaylistRouteArgs({
|
const PlaylistRouteArgs({this.key, required this.id, required this.playlist});
|
||||||
this.key,
|
|
||||||
required this.id,
|
|
||||||
required this.playlist,
|
|
||||||
});
|
|
||||||
|
|
||||||
final _i42.Key? key;
|
final _i42.Key? key;
|
||||||
|
|
||||||
@ -665,10 +581,7 @@ class PlaylistRouteArgs {
|
|||||||
/// [_i21.ProfilePage]
|
/// [_i21.ProfilePage]
|
||||||
class ProfileRoute extends _i41.PageRouteInfo<void> {
|
class ProfileRoute extends _i41.PageRouteInfo<void> {
|
||||||
const ProfileRoute({List<_i41.PageRouteInfo>? children})
|
const ProfileRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(ProfileRoute.name, initialChildren: children);
|
||||||
ProfileRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'ProfileRoute';
|
static const String name = 'ProfileRoute';
|
||||||
|
|
||||||
@ -684,10 +597,7 @@ class ProfileRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i22.RootAppPage]
|
/// [_i22.RootAppPage]
|
||||||
class RootAppRoute extends _i41.PageRouteInfo<void> {
|
class RootAppRoute extends _i41.PageRouteInfo<void> {
|
||||||
const RootAppRoute({List<_i41.PageRouteInfo>? children})
|
const RootAppRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(RootAppRoute.name, initialChildren: children);
|
||||||
RootAppRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'RootAppRoute';
|
static const String name = 'RootAppRoute';
|
||||||
|
|
||||||
@ -703,10 +613,7 @@ class RootAppRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i23.SearchPage]
|
/// [_i23.SearchPage]
|
||||||
class SearchRoute extends _i41.PageRouteInfo<void> {
|
class SearchRoute extends _i41.PageRouteInfo<void> {
|
||||||
const SearchRoute({List<_i41.PageRouteInfo>? children})
|
const SearchRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(SearchRoute.name, initialChildren: children);
|
||||||
SearchRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'SearchRoute';
|
static const String name = 'SearchRoute';
|
||||||
|
|
||||||
@ -728,14 +635,14 @@ class SettingsMetadataProviderFormRoute
|
|||||||
required List<_i43.MetadataFormFieldObject> fields,
|
required List<_i43.MetadataFormFieldObject> fields,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
SettingsMetadataProviderFormRoute.name,
|
SettingsMetadataProviderFormRoute.name,
|
||||||
args: SettingsMetadataProviderFormRouteArgs(
|
args: SettingsMetadataProviderFormRouteArgs(
|
||||||
key: key,
|
key: key,
|
||||||
title: title,
|
title: title,
|
||||||
fields: fields,
|
fields: fields,
|
||||||
),
|
),
|
||||||
initialChildren: children,
|
initialChildren: children,
|
||||||
);
|
);
|
||||||
|
|
||||||
static const String name = 'SettingsMetadataProviderFormRoute';
|
static const String name = 'SettingsMetadataProviderFormRoute';
|
||||||
|
|
||||||
@ -775,10 +682,7 @@ class SettingsMetadataProviderFormRouteArgs {
|
|||||||
/// [_i25.SettingsMetadataProviderPage]
|
/// [_i25.SettingsMetadataProviderPage]
|
||||||
class SettingsMetadataProviderRoute extends _i41.PageRouteInfo<void> {
|
class SettingsMetadataProviderRoute extends _i41.PageRouteInfo<void> {
|
||||||
const SettingsMetadataProviderRoute({List<_i41.PageRouteInfo>? children})
|
const SettingsMetadataProviderRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(SettingsMetadataProviderRoute.name, initialChildren: children);
|
||||||
SettingsMetadataProviderRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'SettingsMetadataProviderRoute';
|
static const String name = 'SettingsMetadataProviderRoute';
|
||||||
|
|
||||||
@ -794,10 +698,7 @@ class SettingsMetadataProviderRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i26.SettingsPage]
|
/// [_i26.SettingsPage]
|
||||||
class SettingsRoute extends _i41.PageRouteInfo<void> {
|
class SettingsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const SettingsRoute({List<_i41.PageRouteInfo>? children})
|
const SettingsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(SettingsRoute.name, initialChildren: children);
|
||||||
SettingsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'SettingsRoute';
|
static const String name = 'SettingsRoute';
|
||||||
|
|
||||||
@ -813,10 +714,7 @@ class SettingsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i27.SettingsScrobblingPage]
|
/// [_i27.SettingsScrobblingPage]
|
||||||
class SettingsScrobblingRoute extends _i41.PageRouteInfo<void> {
|
class SettingsScrobblingRoute extends _i41.PageRouteInfo<void> {
|
||||||
const SettingsScrobblingRoute({List<_i41.PageRouteInfo>? children})
|
const SettingsScrobblingRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(SettingsScrobblingRoute.name, initialChildren: children);
|
||||||
SettingsScrobblingRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'SettingsScrobblingRoute';
|
static const String name = 'SettingsScrobblingRoute';
|
||||||
|
|
||||||
@ -832,10 +730,7 @@ class SettingsScrobblingRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i28.StatsAlbumsPage]
|
/// [_i28.StatsAlbumsPage]
|
||||||
class StatsAlbumsRoute extends _i41.PageRouteInfo<void> {
|
class StatsAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
const StatsAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsAlbumsRoute.name, initialChildren: children);
|
||||||
StatsAlbumsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsAlbumsRoute';
|
static const String name = 'StatsAlbumsRoute';
|
||||||
|
|
||||||
@ -851,10 +746,7 @@ class StatsAlbumsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i29.StatsArtistsPage]
|
/// [_i29.StatsArtistsPage]
|
||||||
class StatsArtistsRoute extends _i41.PageRouteInfo<void> {
|
class StatsArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsArtistsRoute({List<_i41.PageRouteInfo>? children})
|
const StatsArtistsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsArtistsRoute.name, initialChildren: children);
|
||||||
StatsArtistsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsArtistsRoute';
|
static const String name = 'StatsArtistsRoute';
|
||||||
|
|
||||||
@ -870,10 +762,7 @@ class StatsArtistsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i30.StatsMinutesPage]
|
/// [_i30.StatsMinutesPage]
|
||||||
class StatsMinutesRoute extends _i41.PageRouteInfo<void> {
|
class StatsMinutesRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsMinutesRoute({List<_i41.PageRouteInfo>? children})
|
const StatsMinutesRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsMinutesRoute.name, initialChildren: children);
|
||||||
StatsMinutesRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsMinutesRoute';
|
static const String name = 'StatsMinutesRoute';
|
||||||
|
|
||||||
@ -889,10 +778,7 @@ class StatsMinutesRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i31.StatsPage]
|
/// [_i31.StatsPage]
|
||||||
class StatsRoute extends _i41.PageRouteInfo<void> {
|
class StatsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsRoute({List<_i41.PageRouteInfo>? children})
|
const StatsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsRoute.name, initialChildren: children);
|
||||||
StatsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsRoute';
|
static const String name = 'StatsRoute';
|
||||||
|
|
||||||
@ -908,10 +794,7 @@ class StatsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i32.StatsPlaylistsPage]
|
/// [_i32.StatsPlaylistsPage]
|
||||||
class StatsPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
class StatsPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
const StatsPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsPlaylistsRoute.name, initialChildren: children);
|
||||||
StatsPlaylistsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsPlaylistsRoute';
|
static const String name = 'StatsPlaylistsRoute';
|
||||||
|
|
||||||
@ -927,10 +810,7 @@ class StatsPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i33.StatsStreamFeesPage]
|
/// [_i33.StatsStreamFeesPage]
|
||||||
class StatsStreamFeesRoute extends _i41.PageRouteInfo<void> {
|
class StatsStreamFeesRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsStreamFeesRoute({List<_i41.PageRouteInfo>? children})
|
const StatsStreamFeesRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsStreamFeesRoute.name, initialChildren: children);
|
||||||
StatsStreamFeesRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsStreamFeesRoute';
|
static const String name = 'StatsStreamFeesRoute';
|
||||||
|
|
||||||
@ -946,10 +826,7 @@ class StatsStreamFeesRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i34.StatsStreamsPage]
|
/// [_i34.StatsStreamsPage]
|
||||||
class StatsStreamsRoute extends _i41.PageRouteInfo<void> {
|
class StatsStreamsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const StatsStreamsRoute({List<_i41.PageRouteInfo>? children})
|
const StatsStreamsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(StatsStreamsRoute.name, initialChildren: children);
|
||||||
StatsStreamsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'StatsStreamsRoute';
|
static const String name = 'StatsStreamsRoute';
|
||||||
|
|
||||||
@ -969,14 +846,11 @@ class TrackRoute extends _i41.PageRouteInfo<TrackRouteArgs> {
|
|||||||
required String trackId,
|
required String trackId,
|
||||||
List<_i41.PageRouteInfo>? children,
|
List<_i41.PageRouteInfo>? children,
|
||||||
}) : super(
|
}) : super(
|
||||||
TrackRoute.name,
|
TrackRoute.name,
|
||||||
args: TrackRouteArgs(
|
args: TrackRouteArgs(key: key, trackId: trackId),
|
||||||
key: key,
|
rawPathParams: {'id': trackId},
|
||||||
trackId: trackId,
|
initialChildren: children,
|
||||||
),
|
);
|
||||||
rawPathParams: {'id': trackId},
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'TrackRoute';
|
static const String name = 'TrackRoute';
|
||||||
|
|
||||||
@ -985,20 +859,15 @@ class TrackRoute extends _i41.PageRouteInfo<TrackRouteArgs> {
|
|||||||
builder: (data) {
|
builder: (data) {
|
||||||
final pathParams = data.inheritedPathParams;
|
final pathParams = data.inheritedPathParams;
|
||||||
final args = data.argsAs<TrackRouteArgs>(
|
final args = data.argsAs<TrackRouteArgs>(
|
||||||
orElse: () => TrackRouteArgs(trackId: pathParams.getString('id')));
|
orElse: () => TrackRouteArgs(trackId: pathParams.getString('id')),
|
||||||
return _i35.TrackPage(
|
|
||||||
key: args.key,
|
|
||||||
trackId: args.trackId,
|
|
||||||
);
|
);
|
||||||
|
return _i35.TrackPage(key: args.key, trackId: args.trackId);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TrackRouteArgs {
|
class TrackRouteArgs {
|
||||||
const TrackRouteArgs({
|
const TrackRouteArgs({this.key, required this.trackId});
|
||||||
this.key,
|
|
||||||
required this.trackId,
|
|
||||||
});
|
|
||||||
|
|
||||||
final _i44.Key? key;
|
final _i44.Key? key;
|
||||||
|
|
||||||
@ -1014,10 +883,7 @@ class TrackRouteArgs {
|
|||||||
/// [_i36.UserAlbumsPage]
|
/// [_i36.UserAlbumsPage]
|
||||||
class UserAlbumsRoute extends _i41.PageRouteInfo<void> {
|
class UserAlbumsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const UserAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
const UserAlbumsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(UserAlbumsRoute.name, initialChildren: children);
|
||||||
UserAlbumsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'UserAlbumsRoute';
|
static const String name = 'UserAlbumsRoute';
|
||||||
|
|
||||||
@ -1033,10 +899,7 @@ class UserAlbumsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i37.UserArtistsPage]
|
/// [_i37.UserArtistsPage]
|
||||||
class UserArtistsRoute extends _i41.PageRouteInfo<void> {
|
class UserArtistsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const UserArtistsRoute({List<_i41.PageRouteInfo>? children})
|
const UserArtistsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(UserArtistsRoute.name, initialChildren: children);
|
||||||
UserArtistsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'UserArtistsRoute';
|
static const String name = 'UserArtistsRoute';
|
||||||
|
|
||||||
@ -1052,10 +915,7 @@ class UserArtistsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i38.UserDownloadsPage]
|
/// [_i38.UserDownloadsPage]
|
||||||
class UserDownloadsRoute extends _i41.PageRouteInfo<void> {
|
class UserDownloadsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const UserDownloadsRoute({List<_i41.PageRouteInfo>? children})
|
const UserDownloadsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(UserDownloadsRoute.name, initialChildren: children);
|
||||||
UserDownloadsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'UserDownloadsRoute';
|
static const String name = 'UserDownloadsRoute';
|
||||||
|
|
||||||
@ -1071,10 +931,7 @@ class UserDownloadsRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i39.UserLocalLibraryPage]
|
/// [_i39.UserLocalLibraryPage]
|
||||||
class UserLocalLibraryRoute extends _i41.PageRouteInfo<void> {
|
class UserLocalLibraryRoute extends _i41.PageRouteInfo<void> {
|
||||||
const UserLocalLibraryRoute({List<_i41.PageRouteInfo>? children})
|
const UserLocalLibraryRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(UserLocalLibraryRoute.name, initialChildren: children);
|
||||||
UserLocalLibraryRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'UserLocalLibraryRoute';
|
static const String name = 'UserLocalLibraryRoute';
|
||||||
|
|
||||||
@ -1090,10 +947,7 @@ class UserLocalLibraryRoute extends _i41.PageRouteInfo<void> {
|
|||||||
/// [_i40.UserPlaylistsPage]
|
/// [_i40.UserPlaylistsPage]
|
||||||
class UserPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
class UserPlaylistsRoute extends _i41.PageRouteInfo<void> {
|
||||||
const UserPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
const UserPlaylistsRoute({List<_i41.PageRouteInfo>? children})
|
||||||
: super(
|
: super(UserPlaylistsRoute.name, initialChildren: children);
|
||||||
UserPlaylistsRoute.name,
|
|
||||||
initialChildren: children,
|
|
||||||
);
|
|
||||||
|
|
||||||
static const String name = 'UserPlaylistsRoute';
|
static const String name = 'UserPlaylistsRoute';
|
||||||
|
|
||||||
|
|||||||
@ -80,6 +80,7 @@ abstract class SpotubeIcons {
|
|||||||
static const hoverOff = Icons.back_hand_outlined;
|
static const hoverOff = Icons.back_hand_outlined;
|
||||||
static const dragHandle = Icons.drag_indicator;
|
static const dragHandle = Icons.drag_indicator;
|
||||||
static const lightning = Icons.flash_on_rounded;
|
static const lightning = Icons.flash_on_rounded;
|
||||||
|
static const lightningOutlined = FeatherIcons.zap;
|
||||||
static const colorSync = FeatherIcons.activity;
|
static const colorSync = FeatherIcons.activity;
|
||||||
static const language = FeatherIcons.globe;
|
static const language = FeatherIcons.globe;
|
||||||
static const error = FeatherIcons.alertTriangle;
|
static const error = FeatherIcons.alertTriangle;
|
||||||
@ -134,7 +135,7 @@ abstract class SpotubeIcons {
|
|||||||
static const list = FeatherIcons.list;
|
static const list = FeatherIcons.list;
|
||||||
static const device = FeatherIcons.smartphone;
|
static const device = FeatherIcons.smartphone;
|
||||||
static const engine = FeatherIcons.server;
|
static const engine = FeatherIcons.server;
|
||||||
static const extensions = FeatherIcons.package;
|
static const extensions = Icons.extension_rounded;
|
||||||
static const message = FeatherIcons.send;
|
static const message = FeatherIcons.send;
|
||||||
static const upload = FeatherIcons.uploadCloud;
|
static const upload = FeatherIcons.uploadCloud;
|
||||||
static const plugin = Icons.extension_outlined;
|
static const plugin = Icons.extension_outlined;
|
||||||
|
|||||||
69
lib/components/dialogs/link_open_permission_dialog.dart
Normal file
69
lib/components/dialogs/link_open_permission_dialog.dart
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
|
import 'package:spotube/extensions/context.dart';
|
||||||
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
|
class LinkOpenPermissionDialog extends StatelessWidget {
|
||||||
|
final String? href;
|
||||||
|
const LinkOpenPermissionDialog({super.key, this.href});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 450),
|
||||||
|
child: AlertDialog(
|
||||||
|
title: Row(
|
||||||
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
const Icon(SpotubeIcons.warning),
|
||||||
|
Text(context.l10n.open_link_in_browser),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
content: Text.rich(
|
||||||
|
TextSpan(
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text:
|
||||||
|
"${context.l10n.do_you_want_to_open_the_following_link}:\n",
|
||||||
|
),
|
||||||
|
if (href != null)
|
||||||
|
TextSpan(
|
||||||
|
text: "$href\n\n",
|
||||||
|
style: const TextStyle(color: Colors.blue),
|
||||||
|
),
|
||||||
|
TextSpan(text: context.l10n.unsafe_url_warning),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
Button.ghost(
|
||||||
|
onPressed: () => Navigator.of(context).pop(false),
|
||||||
|
child: Text(context.l10n.cancel),
|
||||||
|
),
|
||||||
|
Button.ghost(
|
||||||
|
onPressed: () {
|
||||||
|
if (href != null) {
|
||||||
|
Clipboard.setData(ClipboardData(text: href!));
|
||||||
|
}
|
||||||
|
Navigator.of(context).pop(false);
|
||||||
|
},
|
||||||
|
child: Text(context.l10n.copy_link),
|
||||||
|
),
|
||||||
|
Button.destructive(
|
||||||
|
onPressed: () {
|
||||||
|
if (href != null) {
|
||||||
|
launchUrlString(
|
||||||
|
href!,
|
||||||
|
mode: LaunchMode.externalApplication,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Navigator.of(context).pop(true);
|
||||||
|
},
|
||||||
|
child: Text(context.l10n.open),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,13 +12,12 @@ class ReplaceDownloadedDialog extends ConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final groupValue = ref.watch(replaceDownloadedFileState);
|
|
||||||
final replaceAll = ref.watch(replaceDownloadedFileState);
|
final replaceAll = ref.watch(replaceDownloadedFileState);
|
||||||
|
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: Text(context.l10n.track_exists(track.name)),
|
title: Text(context.l10n.track_exists(track.name)),
|
||||||
content: RadioGroup(
|
content: RadioGroup(
|
||||||
value: groupValue,
|
value: replaceAll,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
ref.read(replaceDownloadedFileState.notifier).state = value;
|
ref.read(replaceDownloadedFileState.notifier).state = value;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -7,8 +7,7 @@ import 'package:spotube/extensions/constrains.dart';
|
|||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/extensions/duration.dart';
|
import 'package:spotube/extensions/duration.dart';
|
||||||
import 'package:spotube/models/metadata/metadata.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/models/playback/track_sources.dart';
|
import 'package:spotube/provider/server/sourced_track_provider.dart';
|
||||||
import 'package:spotube/provider/server/track_sources.dart';
|
|
||||||
|
|
||||||
class TrackDetailsDialog extends HookConsumerWidget {
|
class TrackDetailsDialog extends HookConsumerWidget {
|
||||||
final SpotubeFullTrackObject track;
|
final SpotubeFullTrackObject track;
|
||||||
@ -21,8 +20,7 @@ class TrackDetailsDialog extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
final mediaQuery = MediaQuery.of(context);
|
final mediaQuery = MediaQuery.of(context);
|
||||||
final sourcedTrack =
|
final sourcedTrack = ref.read(sourcedTrackProvider(track));
|
||||||
ref.read(trackSourcesProvider(TrackSourceQuery.fromTrack(track)));
|
|
||||||
|
|
||||||
final detailsMap = {
|
final detailsMap = {
|
||||||
context.l10n.title: track.name,
|
context.l10n.title: track.name,
|
||||||
@ -39,8 +37,7 @@ class TrackDetailsDialog extends HookConsumerWidget {
|
|||||||
// style: const TextStyle(color: Colors.blue),
|
// style: const TextStyle(color: Colors.blue),
|
||||||
// ),
|
// ),
|
||||||
context.l10n.duration: sourcedTrack.asData != null
|
context.l10n.duration: sourcedTrack.asData != null
|
||||||
? Duration(milliseconds: sourcedTrack.asData!.value.info.durationMs)
|
? sourcedTrack.asData!.value.info.duration.toHumanReadableString()
|
||||||
.toHumanReadableString()
|
|
||||||
: Duration(milliseconds: track.durationMs).toHumanReadableString(),
|
: Duration(milliseconds: track.durationMs).toHumanReadableString(),
|
||||||
if (track.album.releaseDate != null)
|
if (track.album.releaseDate != null)
|
||||||
context.l10n.released: track.album.releaseDate,
|
context.l10n.released: track.album.releaseDate,
|
||||||
@ -57,7 +54,7 @@ class TrackDetailsDialog extends HookConsumerWidget {
|
|||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
context.l10n.channel: Text(sourceInfo.artists),
|
context.l10n.channel: Text(sourceInfo.artists.join(", ")),
|
||||||
if (sourcedTrack.asData?.value.url != null)
|
if (sourcedTrack.asData?.value.url != null)
|
||||||
context.l10n.streamUrl: Hyperlink(
|
context.l10n.streamUrl: Hyperlink(
|
||||||
sourcedTrack.asData!.value.url ?? "",
|
sourcedTrack.asData!.value.url ?? "",
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
|
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/components/dialogs/link_open_permission_dialog.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
class AppMarkdown extends StatelessWidget {
|
class AppMarkdown extends StatelessWidget {
|
||||||
@ -28,61 +26,7 @@ class AppMarkdown extends StatelessWidget {
|
|||||||
final allowOpeningLink = await showDialog<bool>(
|
final allowOpeningLink = await showDialog<bool>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return ConstrainedBox(
|
return LinkOpenPermissionDialog(href: href);
|
||||||
constraints: const BoxConstraints(maxWidth: 450),
|
|
||||||
child: AlertDialog(
|
|
||||||
title: Row(
|
|
||||||
spacing: 8,
|
|
||||||
children: [
|
|
||||||
const Icon(SpotubeIcons.warning),
|
|
||||||
Text(context.l10n.open_link_in_browser),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
content: Text.rich(
|
|
||||||
TextSpan(
|
|
||||||
children: [
|
|
||||||
TextSpan(
|
|
||||||
text:
|
|
||||||
"${context.l10n.do_you_want_to_open_the_following_link}:\n",
|
|
||||||
),
|
|
||||||
if (href != null)
|
|
||||||
TextSpan(
|
|
||||||
text: "$href\n\n",
|
|
||||||
style: const TextStyle(color: Colors.blue),
|
|
||||||
),
|
|
||||||
TextSpan(text: context.l10n.unsafe_url_warning),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
actions: [
|
|
||||||
Button.ghost(
|
|
||||||
onPressed: () => Navigator.of(context).pop(false),
|
|
||||||
child: Text(context.l10n.cancel),
|
|
||||||
),
|
|
||||||
Button.ghost(
|
|
||||||
onPressed: () {
|
|
||||||
if (href != null) {
|
|
||||||
Clipboard.setData(ClipboardData(text: href));
|
|
||||||
}
|
|
||||||
Navigator.of(context).pop(false);
|
|
||||||
},
|
|
||||||
child: Text(context.l10n.copy_link),
|
|
||||||
),
|
|
||||||
Button.destructive(
|
|
||||||
onPressed: () {
|
|
||||||
if (href != null) {
|
|
||||||
launchUrlString(
|
|
||||||
href,
|
|
||||||
mode: LaunchMode.externalApplication,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Navigator.of(context).pop(true);
|
|
||||||
},
|
|
||||||
child: Text(context.l10n.open),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -8,12 +8,10 @@ import 'package:spotube/components/dialogs/playlist_add_track_dialog.dart';
|
|||||||
import 'package:spotube/components/track_presentation/presentation_props.dart';
|
import 'package:spotube/components/track_presentation/presentation_props.dart';
|
||||||
import 'package:spotube/components/track_presentation/presentation_state.dart';
|
import 'package:spotube/components/track_presentation/presentation_state.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/models/database/database.dart';
|
|
||||||
import 'package:spotube/models/metadata/metadata.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/provider/download_manager_provider.dart';
|
import 'package:spotube/provider/download_manager_provider.dart';
|
||||||
import 'package:spotube/provider/history/history.dart';
|
import 'package:spotube/provider/history/history.dart';
|
||||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||||
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
|
|
||||||
|
|
||||||
ToastOverlay showToastForAction(
|
ToastOverlay showToastForAction(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
@ -70,8 +68,6 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
|
|||||||
final downloader = ref.watch(downloadManagerProvider.notifier);
|
final downloader = ref.watch(downloadManagerProvider.notifier);
|
||||||
final playlistNotifier = ref.watch(audioPlayerProvider.notifier);
|
final playlistNotifier = ref.watch(audioPlayerProvider.notifier);
|
||||||
final historyNotifier = ref.watch(playbackHistoryActionsProvider);
|
final historyNotifier = ref.watch(playbackHistoryActionsProvider);
|
||||||
final audioSource =
|
|
||||||
ref.watch(userPreferencesProvider.select((s) => s.audioSource));
|
|
||||||
|
|
||||||
final state = ref.watch(presentationStateProvider(options.collection));
|
final state = ref.watch(presentationStateProvider(options.collection));
|
||||||
final notifier =
|
final notifier =
|
||||||
@ -85,16 +81,15 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
|
|||||||
}) async {
|
}) async {
|
||||||
final fullTrackObjects =
|
final fullTrackObjects =
|
||||||
tracks.whereType<SpotubeFullTrackObject>().toList();
|
tracks.whereType<SpotubeFullTrackObject>().toList();
|
||||||
final confirmed = audioSource == AudioSource.piped ||
|
final confirmed = await showDialog<bool>(
|
||||||
(await showDialog<bool>(
|
context: context,
|
||||||
context: context,
|
builder: (context) {
|
||||||
builder: (context) {
|
return const ConfirmDownloadDialog();
|
||||||
return const ConfirmDownloadDialog();
|
},
|
||||||
},
|
) ??
|
||||||
) ??
|
false;
|
||||||
false);
|
|
||||||
if (confirmed != true) return;
|
if (confirmed != true) return;
|
||||||
downloader.batchAddToQueue(fullTrackObjects);
|
downloader.addAllToQueue(fullTrackObjects);
|
||||||
notifier.deselectAllTracks();
|
notifier.deselectAllTracks();
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
showToastForAction(context, action, fullTrackObjects.length);
|
showToastForAction(context, action, fullTrackObjects.length);
|
||||||
|
|||||||
@ -1,10 +1,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:shadcn_flutter/shadcn_flutter_extension.dart';
|
||||||
import 'package:spotube/collections/assets.gen.dart';
|
import 'package:spotube/collections/routes.dart';
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/ui/button_tile.dart';
|
import 'package:spotube/components/ui/button_tile.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
@ -35,7 +33,6 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final mediaQuery = MediaQuery.of(context);
|
final mediaQuery = MediaQuery.of(context);
|
||||||
final ThemeData(:colorScheme) = Theme.of(context);
|
|
||||||
|
|
||||||
final trackOptionActions = ref.watch(trackOptionActionsProvider(track));
|
final trackOptionActions = ref.watch(trackOptionActionsProvider(track));
|
||||||
final (
|
final (
|
||||||
@ -45,7 +42,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
:isActiveTrack,
|
:isActiveTrack,
|
||||||
:isAuthenticated,
|
:isAuthenticated,
|
||||||
:isLiked,
|
:isLiked,
|
||||||
:progressNotifier
|
:downloadTask
|
||||||
) = ref.watch(trackOptionsStateProvider(track));
|
) = ref.watch(trackOptionsStateProvider(track));
|
||||||
final isLocalTrack = track is SpotubeLocalTrackObject;
|
final isLocalTrack = track is SpotubeLocalTrackObject;
|
||||||
|
|
||||||
@ -59,7 +56,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.delete,
|
TrackOptionValue.delete,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -73,7 +70,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.album,
|
TrackOptionValue.album,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -97,7 +94,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.addToQueue,
|
TrackOptionValue.addToQueue,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -110,7 +107,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.playNext,
|
TrackOptionValue.playNext,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -124,7 +121,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.removeFromQueue,
|
TrackOptionValue.removeFromQueue,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -139,7 +136,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.favorite,
|
TrackOptionValue.favorite,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -162,7 +159,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.startRadio,
|
TrackOptionValue.startRadio,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -175,7 +172,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.addToPlaylist,
|
TrackOptionValue.addToPlaylist,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -190,7 +187,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.removeFromPlaylist,
|
TrackOptionValue.removeFromPlaylist,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -204,7 +201,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.download,
|
TrackOptionValue.download,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -212,12 +209,19 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
enabled: !isInDownloadQueue,
|
enabled: !isInDownloadQueue,
|
||||||
leading: isInDownloadQueue
|
leading: isInDownloadQueue
|
||||||
? HookBuilder(builder: (context) {
|
? StreamBuilder(
|
||||||
final progress = useListenable(progressNotifier);
|
stream: downloadTask?.downloadedBytesStream,
|
||||||
return CircularProgressIndicator(
|
builder: (context, snapshot) {
|
||||||
value: progress?.value,
|
final progress = downloadTask?.totalSizeBytes == null ||
|
||||||
);
|
downloadTask?.totalSizeBytes == 0
|
||||||
})
|
? 0
|
||||||
|
: (snapshot.data ?? 0) /
|
||||||
|
downloadTask!.totalSizeBytes!;
|
||||||
|
return CircularProgressIndicator(
|
||||||
|
value: progress.toDouble(),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
: const Icon(SpotubeIcons.download),
|
: const Icon(SpotubeIcons.download),
|
||||||
title: Text(context.l10n.download_track),
|
title: Text(context.l10n.download_track),
|
||||||
),
|
),
|
||||||
@ -226,7 +230,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.blacklist,
|
TrackOptionValue.blacklist,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -250,7 +254,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.share,
|
TrackOptionValue.share,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
@ -264,25 +268,7 @@ class TrackOptions extends HookConsumerWidget {
|
|||||||
style: ButtonVariance.menu,
|
style: ButtonVariance.menu,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await trackOptionActions.action(
|
await trackOptionActions.action(
|
||||||
context,
|
rootNavigatorKey.currentContext!,
|
||||||
TrackOptionValue.songlink,
|
|
||||||
playlistId,
|
|
||||||
);
|
|
||||||
onTapItem?.call();
|
|
||||||
},
|
|
||||||
leading: Assets.images.logos.songlinkTransparent.image(
|
|
||||||
width: 22,
|
|
||||||
height: 22,
|
|
||||||
color: colorScheme.foreground.withValues(alpha: 0.5),
|
|
||||||
),
|
|
||||||
title: Text(context.l10n.song_link),
|
|
||||||
),
|
|
||||||
if (!isLocalTrack)
|
|
||||||
ButtonTile(
|
|
||||||
style: ButtonVariance.menu,
|
|
||||||
onPressed: () async {
|
|
||||||
await trackOptionActions.action(
|
|
||||||
context,
|
|
||||||
TrackOptionValue.details,
|
TrackOptionValue.details,
|
||||||
playlistId,
|
playlistId,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -39,6 +39,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
final int? index;
|
final int? index;
|
||||||
final SpotubeTrackObject track;
|
final SpotubeTrackObject track;
|
||||||
final bool selected;
|
final bool selected;
|
||||||
|
final bool selectionMode;
|
||||||
final ValueChanged<bool?>? onChanged;
|
final ValueChanged<bool?>? onChanged;
|
||||||
final Future<void> Function()? onTap;
|
final Future<void> Function()? onTap;
|
||||||
final VoidCallback? onLongPress;
|
final VoidCallback? onLongPress;
|
||||||
@ -53,6 +54,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
this.index,
|
this.index,
|
||||||
required this.track,
|
required this.track,
|
||||||
this.selected = false,
|
this.selected = false,
|
||||||
|
this.selectionMode = false,
|
||||||
required this.playlist,
|
required this.playlist,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
this.onLongPress,
|
this.onLongPress,
|
||||||
@ -81,6 +83,12 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
[track.album.images],
|
[track.album.images],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Treat either explicit selectionMode or presence of onChanged as selection
|
||||||
|
// context. Some lists enable selection by providing `onChanged` without
|
||||||
|
// toggling a dedicated `selectionMode` flag (e.g. playlists), so we must
|
||||||
|
// disable inner navigation in both cases.
|
||||||
|
final effectiveSelection = selectionMode || onChanged != null;
|
||||||
|
|
||||||
return LayoutBuilder(builder: (context, constrains) {
|
return LayoutBuilder(builder: (context, constrains) {
|
||||||
return Listener(
|
return Listener(
|
||||||
onPointerDown: (event) {
|
onPointerDown: (event) {
|
||||||
@ -222,7 +230,9 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: 6,
|
flex: 6,
|
||||||
child: switch (track) {
|
child: AbsorbPointer(
|
||||||
|
absorbing: selectionMode,
|
||||||
|
child: switch (track) {
|
||||||
SpotubeLocalTrackObject() => Text(
|
SpotubeLocalTrackObject() => Text(
|
||||||
track.name,
|
track.name,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@ -232,15 +242,17 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Button(
|
child: Button(
|
||||||
style: ButtonVariance.link.copyWith(
|
style: ButtonVariance.link.copyWith(
|
||||||
padding: (context, states, value) =>
|
padding: (context, states, value) =>
|
||||||
EdgeInsets.zero,
|
EdgeInsets.zero,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: effectiveSelection
|
||||||
context
|
? null
|
||||||
.navigateTo(TrackRoute(trackId: track.id));
|
: () {
|
||||||
},
|
context
|
||||||
|
.navigateTo(TrackRoute(trackId: track.id));
|
||||||
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
track.name,
|
track.name,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@ -251,6 +263,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
if (constrains.mdAndUp) ...[
|
if (constrains.mdAndUp) ...[
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
@ -281,20 +294,25 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
subtitle: Align(
|
subtitle: Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: track is SpotubeLocalTrackObject
|
child: track is SpotubeLocalTrackObject
|
||||||
? Text(
|
? Text(
|
||||||
track.artists.asString(),
|
track.artists.asString(),
|
||||||
)
|
)
|
||||||
: ClipRect(
|
: ClipRect(
|
||||||
child: ConstrainedBox(
|
child: ConstrainedBox(
|
||||||
constraints: const BoxConstraints(maxHeight: 40),
|
constraints: const BoxConstraints(maxHeight: 40),
|
||||||
child: ArtistLink(
|
child: AbsorbPointer(
|
||||||
artists: track.artists,
|
absorbing: effectiveSelection,
|
||||||
onOverflowArtistClick: () {
|
child: ArtistLink(
|
||||||
context.navigateTo(
|
artists: track.artists,
|
||||||
TrackRoute(trackId: track.id),
|
onOverflowArtistClick: effectiveSelection
|
||||||
);
|
? () {}
|
||||||
},
|
: () {
|
||||||
|
context.navigateTo(
|
||||||
|
TrackRoute(trackId: track.id),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
168
lib/extensions/dio.dart
Normal file
168
lib/extensions/dio.dart
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:path/path.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
|
extension ChunkDownloaderDioExtension on Dio {
|
||||||
|
Future<Response> chunkDownload(
|
||||||
|
String urlPath,
|
||||||
|
dynamic savePath, {
|
||||||
|
ProgressCallback? onReceiveProgress,
|
||||||
|
Map<String, dynamic>? queryParameters,
|
||||||
|
CancelToken? cancelToken,
|
||||||
|
bool deleteOnError = true,
|
||||||
|
FileAccessMode fileAccessMode = FileAccessMode.write,
|
||||||
|
String lengthHeader = Headers.contentLengthHeader,
|
||||||
|
Object? data,
|
||||||
|
Options? options,
|
||||||
|
int connections = 4,
|
||||||
|
}) async {
|
||||||
|
final targetFile = File(savePath.toString());
|
||||||
|
final tempRootDir = await getTemporaryDirectory();
|
||||||
|
final tempSaveDir = Directory(
|
||||||
|
join(
|
||||||
|
tempRootDir.path,
|
||||||
|
'Spotube',
|
||||||
|
'.chunk_dl_${targetFile.uri.pathSegments.last}',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
if (await tempSaveDir.exists()) await tempSaveDir.delete(recursive: true);
|
||||||
|
await tempSaveDir.create(recursive: true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
int? totalLength;
|
||||||
|
bool supportsRange = false;
|
||||||
|
|
||||||
|
Response? headResp;
|
||||||
|
try {
|
||||||
|
headResp = await head(
|
||||||
|
urlPath,
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
options: Options(
|
||||||
|
headers: {'Range': 'bytes=0-0'},
|
||||||
|
followRedirects: true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} catch (_) {
|
||||||
|
// Some servers reject HEAD -> ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
final lengthStr = headResp?.headers[lengthHeader]?.first;
|
||||||
|
if (lengthStr != null) {
|
||||||
|
final parsed = int.tryParse(lengthStr);
|
||||||
|
if (parsed != null && parsed > 1) {
|
||||||
|
totalLength = parsed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
supportsRange = headResp?.statusCode == 206 ||
|
||||||
|
headResp?.headers.value(HttpHeaders.acceptRangesHeader) == 'bytes';
|
||||||
|
|
||||||
|
if (totalLength == null || totalLength <= 1) {
|
||||||
|
final resp = await get<ResponseBody>(
|
||||||
|
urlPath,
|
||||||
|
options: Options(
|
||||||
|
responseType: ResponseType.stream,
|
||||||
|
),
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
cancelToken: cancelToken,
|
||||||
|
);
|
||||||
|
|
||||||
|
final len = int.tryParse(resp.headers[lengthHeader]?.first ?? '');
|
||||||
|
if (len == null || len <= 1) {
|
||||||
|
// can’t safely chunk — fallback
|
||||||
|
return download(
|
||||||
|
urlPath,
|
||||||
|
savePath,
|
||||||
|
onReceiveProgress: onReceiveProgress,
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
cancelToken: cancelToken,
|
||||||
|
deleteOnError: deleteOnError,
|
||||||
|
options: options,
|
||||||
|
data: data,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
totalLength = len;
|
||||||
|
supportsRange =
|
||||||
|
resp.headers.value(HttpHeaders.acceptRangesHeader)?.toLowerCase() ==
|
||||||
|
'bytes';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!supportsRange || connections <= 1) {
|
||||||
|
return download(
|
||||||
|
urlPath,
|
||||||
|
savePath,
|
||||||
|
onReceiveProgress: onReceiveProgress,
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
cancelToken: cancelToken,
|
||||||
|
deleteOnError: deleteOnError,
|
||||||
|
options: options,
|
||||||
|
data: data,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final chunkSize = (totalLength / connections).ceil();
|
||||||
|
int downloaded = 0;
|
||||||
|
|
||||||
|
final partFiles = List.generate(
|
||||||
|
connections,
|
||||||
|
(i) => File(join(tempSaveDir.path, 'part_$i')),
|
||||||
|
);
|
||||||
|
|
||||||
|
final futures = List.generate(connections, (i) async {
|
||||||
|
final start = i * chunkSize;
|
||||||
|
final end = (i + 1) * chunkSize - 1;
|
||||||
|
if (start >= totalLength!) return;
|
||||||
|
|
||||||
|
final resp = await get<ResponseBody>(
|
||||||
|
urlPath,
|
||||||
|
options: Options(
|
||||||
|
responseType: ResponseType.stream,
|
||||||
|
headers: {'Range': 'bytes=$start-$end'},
|
||||||
|
),
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
cancelToken: cancelToken,
|
||||||
|
);
|
||||||
|
|
||||||
|
final file = partFiles[i];
|
||||||
|
if (await file.exists()) await file.delete();
|
||||||
|
await file.create(recursive: true);
|
||||||
|
final sink = file.openWrite();
|
||||||
|
|
||||||
|
await for (final chunk in resp.data!.stream) {
|
||||||
|
sink.add(chunk);
|
||||||
|
downloaded += chunk.length;
|
||||||
|
onReceiveProgress?.call(downloaded, totalLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
await sink.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
await Future.wait(futures);
|
||||||
|
|
||||||
|
final targetSink = targetFile.openWrite();
|
||||||
|
for (final f in partFiles) {
|
||||||
|
await targetSink.addStream(f.openRead());
|
||||||
|
}
|
||||||
|
await targetSink.close();
|
||||||
|
|
||||||
|
await tempSaveDir.delete(recursive: true);
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
requestOptions: RequestOptions(path: urlPath),
|
||||||
|
data: targetFile,
|
||||||
|
statusCode: 200,
|
||||||
|
statusMessage: 'Chunked download completed ($connections connections)',
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
if (deleteOnError) {
|
||||||
|
if (await targetFile.exists()) await targetFile.delete();
|
||||||
|
if (await tempSaveDir.exists()) {
|
||||||
|
await tempSaveDir.delete(recursive: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "الإضافات المتوفّرة",
|
"available_plugins": "الإضافات المتوفّرة",
|
||||||
"configure_your_own_metadata_plugin": "تهيئة مزوّد بيانات للقائمة/الألبوم/الفنان/المصدر خاص بك",
|
"configure_your_own_metadata_plugin": "تهيئة مزوّد بيانات للقائمة/الألبوم/الفنان/المصدر خاص بك",
|
||||||
"audio_scrobblers": "أجهزة تتبع الصوت",
|
"audio_scrobblers": "أجهزة تتبع الصوت",
|
||||||
"scrobbling": "التتبع"
|
"scrobbling": "التتبع",
|
||||||
|
"download_music_format": "تنسيق تنزيل الموسيقى",
|
||||||
|
"streaming_music_format": "تنسيق بث الموسيقى",
|
||||||
|
"download_music_quality": "جودة تنزيل الموسيقى",
|
||||||
|
"streaming_music_quality": "جودة بث الموسيقى",
|
||||||
|
"default_metadata_source": "مصدر البيانات الوصفية الافتراضي",
|
||||||
|
"set_default_metadata_source": "تعيين مصدر البيانات الوصفية الافتراضي",
|
||||||
|
"default_audio_source": "مصدر الصوت الافتراضي",
|
||||||
|
"set_default_audio_source": "تعيين مصدر الصوت الافتراضي",
|
||||||
|
"plugins": "الإضافات",
|
||||||
|
"configure_plugins": "قم بتكوين مزود البيانات الوصفية ومكونات مصدر الصوت الخاصة بك",
|
||||||
|
"source": "المصدر: ",
|
||||||
|
"uncompressed": "غير مضغوط",
|
||||||
|
"dab_music_source_description": "لمحبي الصوتيات. يوفر تدفقات صوتية عالية الجودة/بدون فقدان. مطابقة دقيقة للمسارات بناءً على ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "উপলব্ধ প্লাগইনগুলো",
|
"available_plugins": "উপলব্ধ প্লাগইনগুলো",
|
||||||
"configure_your_own_metadata_plugin": "নিজস্ব প্লেলিস্ট/অ্যালবাম/শিল্পী/ফিড মেটাডেটা প্রদানকারী কনফিগার করুন",
|
"configure_your_own_metadata_plugin": "নিজস্ব প্লেলিস্ট/অ্যালবাম/শিল্পী/ফিড মেটাডেটা প্রদানকারী কনফিগার করুন",
|
||||||
"audio_scrobblers": "অডিও স্ক্রোব্বলার্স",
|
"audio_scrobblers": "অডিও স্ক্রোব্বলার্স",
|
||||||
"scrobbling": "স্ক্রোব্বলিং"
|
"scrobbling": "স্ক্রোব্বলিং",
|
||||||
|
"download_music_format": "গান ডাউনলোডের বিন্যাস",
|
||||||
|
"streaming_music_format": "গান স্ট্রিমিং এর বিন্যাস",
|
||||||
|
"download_music_quality": "গান ডাউনলোডের মান",
|
||||||
|
"streaming_music_quality": "গান স্ট্রিমিং এর মান",
|
||||||
|
"default_metadata_source": "ডিফল্ট মেটাডেটা উৎস",
|
||||||
|
"set_default_metadata_source": "ডিফল্ট মেটাডেটা উৎস সেট করুন",
|
||||||
|
"default_audio_source": "ডিফল্ট অডিও উৎস",
|
||||||
|
"set_default_audio_source": "ডিফল্ট অডিও উৎস সেট করুন",
|
||||||
|
"plugins": "প্লাগইন",
|
||||||
|
"configure_plugins": "আপনার নিজের মেটাডেটা প্রদানকারী এবং অডিও উৎস প্লাগইন কনফিগার করুন",
|
||||||
|
"source": "উৎস: ",
|
||||||
|
"uncompressed": "অ-সংকুচিত",
|
||||||
|
"dab_music_source_description": "অডিওফাইলদের জন্য। উচ্চ-মানের/লসলেস অডিও স্ট্রিম প্রদান করে। সঠিক ISRC ভিত্তিক ট্র্যাক ম্যাচিং।"
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Complements disponibles",
|
"available_plugins": "Complements disponibles",
|
||||||
"configure_your_own_metadata_plugin": "Configura el teu propi proveïdor de metadades per llistes/reproduccions àlbum/artista/flux",
|
"configure_your_own_metadata_plugin": "Configura el teu propi proveïdor de metadades per llistes/reproduccions àlbum/artista/flux",
|
||||||
"audio_scrobblers": "Scrobblers d’àudio",
|
"audio_scrobblers": "Scrobblers d’àudio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Format de descàrrega de música",
|
||||||
|
"streaming_music_format": "Format de reproducció de música en temps real",
|
||||||
|
"download_music_quality": "Qualitat de descàrrega de música",
|
||||||
|
"streaming_music_quality": "Qualitat de reproducció de música en temps real",
|
||||||
|
"default_metadata_source": "Font de metadades per defecte",
|
||||||
|
"set_default_metadata_source": "Estableix la font de metadades per defecte",
|
||||||
|
"default_audio_source": "Font d'àudio per defecte",
|
||||||
|
"set_default_audio_source": "Estableix la font d'àudio per defecte",
|
||||||
|
"plugins": "Connectors",
|
||||||
|
"configure_plugins": "Configura els teus propis connectors de proveïdor de metadades i de font d'àudio",
|
||||||
|
"source": "Font: ",
|
||||||
|
"uncompressed": "Sense comprimir",
|
||||||
|
"dab_music_source_description": "Per als audiòfils. Ofereix fluxos d'àudio d'alta qualitat/sense pèrdua. Coincidència precisa de pistes basada en ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Dostupné pluginy",
|
"available_plugins": "Dostupné pluginy",
|
||||||
"configure_your_own_metadata_plugin": "Nakonfigurujte si vlastního poskytovatele metadat pro playlist/album/umělec/fid",
|
"configure_your_own_metadata_plugin": "Nakonfigurujte si vlastního poskytovatele metadat pro playlist/album/umělec/fid",
|
||||||
"audio_scrobblers": "Audio scrobblers",
|
"audio_scrobblers": "Audio scrobblers",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Formát stahování hudby",
|
||||||
|
"streaming_music_format": "Formát streamování hudby",
|
||||||
|
"download_music_quality": "Kvalita stahování hudby",
|
||||||
|
"streaming_music_quality": "Kvalita streamování hudby",
|
||||||
|
"default_metadata_source": "Výchozí zdroj metadat",
|
||||||
|
"set_default_metadata_source": "Nastavit výchozí zdroj metadat",
|
||||||
|
"default_audio_source": "Výchozí zdroj zvuku",
|
||||||
|
"set_default_audio_source": "Nastavit výchozí zdroj zvuku",
|
||||||
|
"plugins": "Pluginy",
|
||||||
|
"configure_plugins": "Konfigurujte své vlastní pluginy poskytovatele metadat a zdroje zvuku",
|
||||||
|
"source": "Zdroj: ",
|
||||||
|
"uncompressed": "Nekomprimováno",
|
||||||
|
"dab_music_source_description": "Pro audiofily. Poskytuje vysoce kvalitní/bezztrátové zvukové toky. Přesná shoda skladeb na základě ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Verfügbare Plugins",
|
"available_plugins": "Verfügbare Plugins",
|
||||||
"configure_your_own_metadata_plugin": "Eigenen Anbieter für Playlist-/Album-/Künstler-/Feed-Metadaten konfigurieren",
|
"configure_your_own_metadata_plugin": "Eigenen Anbieter für Playlist-/Album-/Künstler-/Feed-Metadaten konfigurieren",
|
||||||
"audio_scrobblers": "Audio-Scrobbler",
|
"audio_scrobblers": "Audio-Scrobbler",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Musik-Downloadformat",
|
||||||
|
"streaming_music_format": "Musik-Streamingformat",
|
||||||
|
"download_music_quality": "Musik-Downloadqualität",
|
||||||
|
"streaming_music_quality": "Musik-Streamingqualität",
|
||||||
|
"default_metadata_source": "Standard-Metadatenquelle",
|
||||||
|
"set_default_metadata_source": "Standard-Metadatenquelle festlegen",
|
||||||
|
"default_audio_source": "Standard-Audioquelle",
|
||||||
|
"set_default_audio_source": "Standard-Audioquelle festlegen",
|
||||||
|
"plugins": "Plugins",
|
||||||
|
"configure_plugins": "Richte deine eigenen Metadatenanbieter- und Audioquellen-Plugins ein",
|
||||||
|
"source": "Quelle: ",
|
||||||
|
"uncompressed": "Unkomprimiert",
|
||||||
|
"dab_music_source_description": "Für Audiophile. Bietet hochwertige/verlustfreie Audiostreams. Präzises ISRC-basiertes Track-Matching."
|
||||||
}
|
}
|
||||||
@ -264,8 +264,10 @@
|
|||||||
"change_cover": "Change cover",
|
"change_cover": "Change cover",
|
||||||
"add_cover": "Add cover",
|
"add_cover": "Add cover",
|
||||||
"restore_defaults": "Restore defaults",
|
"restore_defaults": "Restore defaults",
|
||||||
"download_music_codec": "Download music codec",
|
"download_music_format": "Download music format",
|
||||||
"streaming_music_codec": "Streaming music codec",
|
"streaming_music_format": "Streaming music format",
|
||||||
|
"download_music_quality": "Download music quality",
|
||||||
|
"streaming_music_quality": "Streaming music quality",
|
||||||
"login_with_lastfm": "Login with Last.fm",
|
"login_with_lastfm": "Login with Last.fm",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
"disconnect_lastfm": "Disconnect Last.fm",
|
"disconnect_lastfm": "Disconnect Last.fm",
|
||||||
@ -434,7 +436,10 @@
|
|||||||
"update_available": "Update available",
|
"update_available": "Update available",
|
||||||
"supports_scrobbling": "Supports scrobbling",
|
"supports_scrobbling": "Supports scrobbling",
|
||||||
"plugin_scrobbling_info": "This plugin scrobbles your music to generate your listening history.",
|
"plugin_scrobbling_info": "This plugin scrobbles your music to generate your listening history.",
|
||||||
"default_plugin": "Default",
|
"default_metadata_source": "Default metadata source",
|
||||||
|
"set_default_metadata_source": "Set default metadata source",
|
||||||
|
"default_audio_source": "Default audio source",
|
||||||
|
"set_default_audio_source": "Set default audio source",
|
||||||
"set_default": "Set default",
|
"set_default": "Set default",
|
||||||
"support": "Support",
|
"support": "Support",
|
||||||
"support_plugin_development": "Support plugin development",
|
"support_plugin_development": "Support plugin development",
|
||||||
@ -452,14 +457,17 @@
|
|||||||
"disclaimer": "Disclaimer",
|
"disclaimer": "Disclaimer",
|
||||||
"third_party_plugin_dmca_notice": "The Spotube team does not hold any responsibility (including legal) for any \"Third-party\" plugins.\nPlease use them at your own risk. For any bugs/issues, please report them to the plugin repository.\n\nIf any \"Third-party\" plugin is breaking ToS/DMCA of any service/legal entity, please ask the \"Third-party\" plugin author or the hosting platform .e.g GitHub/Codeberg to take action. Above listed (\"Third-party\" labelled) are all public/community maintained plugins. We're not curating them, so we cannot take any action on them.\n\n",
|
"third_party_plugin_dmca_notice": "The Spotube team does not hold any responsibility (including legal) for any \"Third-party\" plugins.\nPlease use them at your own risk. For any bugs/issues, please report them to the plugin repository.\n\nIf any \"Third-party\" plugin is breaking ToS/DMCA of any service/legal entity, please ask the \"Third-party\" plugin author or the hosting platform .e.g GitHub/Codeberg to take action. Above listed (\"Third-party\" labelled) are all public/community maintained plugins. We're not curating them, so we cannot take any action on them.\n\n",
|
||||||
"input_does_not_match_format": "Input doesn't match the required format",
|
"input_does_not_match_format": "Input doesn't match the required format",
|
||||||
"metadata_provider_plugins": "Metadata Provider Plugins",
|
"plugins": "Plugins",
|
||||||
"paste_plugin_download_url": "Paste download url or GitHub/Codeberg repo url or direct link to .smplug file",
|
"paste_plugin_download_url": "Paste download url or GitHub/Codeberg repo url or direct link to .smplug file",
|
||||||
"download_and_install_plugin_from_url": "Download and install plugin from url",
|
"download_and_install_plugin_from_url": "Download and install plugin from url",
|
||||||
"failed_to_add_plugin_error": "Failed to add plugin: {error}",
|
"failed_to_add_plugin_error": "Failed to add plugin: {error}",
|
||||||
"upload_plugin_from_file": "Upload plugin from file",
|
"upload_plugin_from_file": "Upload plugin from file",
|
||||||
"installed": "Installed",
|
"installed": "Installed",
|
||||||
"available_plugins": "Available plugins",
|
"available_plugins": "Available plugins",
|
||||||
"configure_your_own_metadata_plugin": "Configure your own playlist/album/artist/feed metadata provider",
|
"configure_plugins": "Configure your own metadata provider and audio source plugins",
|
||||||
"audio_scrobblers": "Audio Scrobblers",
|
"audio_scrobblers": "Audio Scrobblers",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"source": "Source: ",
|
||||||
|
"uncompressed": "Uncompressed",
|
||||||
|
"dab_music_source_description": "For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Complementos disponibles",
|
"available_plugins": "Complementos disponibles",
|
||||||
"configure_your_own_metadata_plugin": "Configura tu propio proveedor de metadatos para listas/álbum/artista/feeds",
|
"configure_your_own_metadata_plugin": "Configura tu propio proveedor de metadatos para listas/álbum/artista/feeds",
|
||||||
"audio_scrobblers": "Scrobblers de audio",
|
"audio_scrobblers": "Scrobblers de audio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Formato de descarga de música",
|
||||||
|
"streaming_music_format": "Formato de transmisión de música",
|
||||||
|
"download_music_quality": "Calidad de descarga de música",
|
||||||
|
"streaming_music_quality": "Calidad de transmisión de música",
|
||||||
|
"default_metadata_source": "Fuente de metadatos predeterminada",
|
||||||
|
"set_default_metadata_source": "Establecer fuente de metadatos predeterminada",
|
||||||
|
"default_audio_source": "Fuente de audio predeterminada",
|
||||||
|
"set_default_audio_source": "Establecer fuente de audio predeterminada",
|
||||||
|
"plugins": "Plugins",
|
||||||
|
"configure_plugins": "Configura tus propios plugins de proveedor de metadatos y fuente de audio",
|
||||||
|
"source": "Fuente: ",
|
||||||
|
"uncompressed": "Sin comprimir",
|
||||||
|
"dab_music_source_description": "Para audiófilos. Proporciona transmisiones de audio de alta calidad/sin pérdida. Coincidencia precisa de pistas basada en ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Eskaintzen diren pluginak",
|
"available_plugins": "Eskaintzen diren pluginak",
|
||||||
"configure_your_own_metadata_plugin": "Konfiguratu zureko playlists-/album-/artista-/feed-metadaten hornitzailea",
|
"configure_your_own_metadata_plugin": "Konfiguratu zureko playlists-/album-/artista-/feed-metadaten hornitzailea",
|
||||||
"audio_scrobblers": "Audio scrobbler-ak",
|
"audio_scrobblers": "Audio scrobbler-ak",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Musika deskargatzeko formatua",
|
||||||
|
"streaming_music_format": "Musika streaming bidezko formatua",
|
||||||
|
"download_music_quality": "Musika deskargaren kalitatea",
|
||||||
|
"streaming_music_quality": "Streaming bidezko musika kalitatea",
|
||||||
|
"default_metadata_source": "Metadatu-iturburu lehenetsia",
|
||||||
|
"set_default_metadata_source": "Ezarri metadatu-iturburu lehenetsia",
|
||||||
|
"default_audio_source": "Audio-iturburu lehenetsia",
|
||||||
|
"set_default_audio_source": "Ezarri audio-iturburu lehenetsia",
|
||||||
|
"plugins": "Pluginak",
|
||||||
|
"configure_plugins": "Konfiguratu zure metadatu-hornitzaile eta audio-iturburu pluginak",
|
||||||
|
"source": "Iturburua: ",
|
||||||
|
"uncompressed": "Konprimitu gabea",
|
||||||
|
"dab_music_source_description": "Audiozaleentzat. Kalitate handiko/galerarik gabeko audio-streamak eskaintzen ditu. ISRC oinarritutako pistaren parekatze zehatza."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "افزونههای موجود",
|
"available_plugins": "افزونههای موجود",
|
||||||
"configure_your_own_metadata_plugin": "پیکربندی ارائهدهندهٔ متادیتا برای پلیلیست/آلبوم/هنرمند/فید بهصورت سفارشی",
|
"configure_your_own_metadata_plugin": "پیکربندی ارائهدهندهٔ متادیتا برای پلیلیست/آلبوم/هنرمند/فید بهصورت سفارشی",
|
||||||
"audio_scrobblers": "اسکراببلرهای صوتی",
|
"audio_scrobblers": "اسکراببلرهای صوتی",
|
||||||
"scrobbling": "اسکراببلینگ"
|
"scrobbling": "اسکراببلینگ",
|
||||||
|
"download_music_format": "فرمت دانلود موسیقی",
|
||||||
|
"streaming_music_format": "فرمت پخش آنلاین موسیقی",
|
||||||
|
"download_music_quality": "کیفیت دانلود موسیقی",
|
||||||
|
"streaming_music_quality": "کیفیت پخش آنلاین موسیقی",
|
||||||
|
"default_metadata_source": "منبع پیشفرض فراداده",
|
||||||
|
"set_default_metadata_source": "تنظیم منبع پیشفرض فراداده",
|
||||||
|
"default_audio_source": "منبع پیشفرض صوت",
|
||||||
|
"set_default_audio_source": "تنظیم منبع پیشفرض صوت",
|
||||||
|
"plugins": "افزونهها",
|
||||||
|
"configure_plugins": "افزونههای منبع صوت و ارائهدهنده فراداده خود را پیکربندی کنید",
|
||||||
|
"source": "منبع: ",
|
||||||
|
"uncompressed": "بدون فشردهسازی",
|
||||||
|
"dab_music_source_description": "مخصوص علاقهمندان صدا. ارائهدهنده استریمهای باکیفیت/بدون افت. تطبیق دقیق آهنگ بر اساس ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Saatavilla olevat lisäosat",
|
"available_plugins": "Saatavilla olevat lisäosat",
|
||||||
"configure_your_own_metadata_plugin": "Määritä oma soittolistan/albumin/artistin/syötteen metatietojen tarjoaja",
|
"configure_your_own_metadata_plugin": "Määritä oma soittolistan/albumin/artistin/syötteen metatietojen tarjoaja",
|
||||||
"audio_scrobblers": "Äänen scrobblerit",
|
"audio_scrobblers": "Äänen scrobblerit",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Musiikin latausmuoto",
|
||||||
|
"streaming_music_format": "Musiikin suoratoistomuoto",
|
||||||
|
"download_music_quality": "Musiikin latauslaatu",
|
||||||
|
"streaming_music_quality": "Musiikin suoratoistolaadun",
|
||||||
|
"default_metadata_source": "Oletusarvoinen metatietolähde",
|
||||||
|
"set_default_metadata_source": "Aseta oletusmetatietolähde",
|
||||||
|
"default_audio_source": "Oletusarvoinen äänilähde",
|
||||||
|
"set_default_audio_source": "Aseta oletusäänilähde",
|
||||||
|
"plugins": "Laajennukset",
|
||||||
|
"configure_plugins": "Määritä omat metatietojen tarjoaja- ja äänilähdelaajennukset",
|
||||||
|
"source": "Lähde: ",
|
||||||
|
"uncompressed": "Pakkaamaton",
|
||||||
|
"dab_music_source_description": "Audiofiileille. Tarjoaa korkealaatuisia/häviöttömiä äänivirtoja. Tarkka ISRC-pohjainen kappaleiden tunnistus."
|
||||||
}
|
}
|
||||||
@ -478,5 +478,18 @@
|
|||||||
"available_plugins": "Plugins disponibles",
|
"available_plugins": "Plugins disponibles",
|
||||||
"configure_your_own_metadata_plugin": "Configurer votre propre fournisseur de métadonnées de playlist/album/artiste/flux",
|
"configure_your_own_metadata_plugin": "Configurer votre propre fournisseur de métadonnées de playlist/album/artiste/flux",
|
||||||
"audio_scrobblers": "Scrobblers audio",
|
"audio_scrobblers": "Scrobblers audio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Format de téléchargement de musique",
|
||||||
|
"streaming_music_format": "Format de streaming de musique",
|
||||||
|
"download_music_quality": "Qualité de téléchargement de musique",
|
||||||
|
"streaming_music_quality": "Qualité de streaming de musique",
|
||||||
|
"default_metadata_source": "Source de métadonnées par défaut",
|
||||||
|
"set_default_metadata_source": "Définir la source de métadonnées par défaut",
|
||||||
|
"default_audio_source": "Source audio par défaut",
|
||||||
|
"set_default_audio_source": "Définir la source audio par défaut",
|
||||||
|
"plugins": "Plugins",
|
||||||
|
"configure_plugins": "Configurez vos propres plugins de fournisseur de métadonnées et de source audio",
|
||||||
|
"source": "Source : ",
|
||||||
|
"uncompressed": "Non compressé",
|
||||||
|
"dab_music_source_description": "Pour les audiophiles. Fournit des flux audio de haute qualité/sans perte. Correspondance précise des pistes basée sur ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "उपलब्ध प्लगइन",
|
"available_plugins": "उपलब्ध प्लगइन",
|
||||||
"configure_your_own_metadata_plugin": "अपनी खुद की प्लेलिस्ट/एल्बम/कलाकार/फ़ीड मेटाडेटा प्रदाता कॉन्फ़िगर करें",
|
"configure_your_own_metadata_plugin": "अपनी खुद की प्लेलिस्ट/एल्बम/कलाकार/फ़ीड मेटाडेटा प्रदाता कॉन्फ़िगर करें",
|
||||||
"audio_scrobblers": "ऑडियो स्क्रॉबलर्स",
|
"audio_scrobblers": "ऑडियो स्क्रॉबलर्स",
|
||||||
"scrobbling": "स्क्रॉबलिंग"
|
"scrobbling": "स्क्रॉबलिंग",
|
||||||
|
"download_music_format": "संगीत डाउनलोड प्रारूप",
|
||||||
|
"streaming_music_format": "संगीत स्ट्रीमिंग प्रारूप",
|
||||||
|
"download_music_quality": "संगीत डाउनलोड गुणवत्ता",
|
||||||
|
"streaming_music_quality": "संगीत स्ट्रीमिंग गुणवत्ता",
|
||||||
|
"default_metadata_source": "डिफ़ॉल्ट मेटाडेटा स्रोत",
|
||||||
|
"set_default_metadata_source": "डिफ़ॉल्ट मेटाडेटा स्रोत सेट करें",
|
||||||
|
"default_audio_source": "डिफ़ॉल्ट ऑडियो स्रोत",
|
||||||
|
"set_default_audio_source": "डिफ़ॉल्ट ऑडियो स्रोत सेट करें",
|
||||||
|
"plugins": "प्लगइन्स",
|
||||||
|
"configure_plugins": "अपने स्वयं के मेटाडेटा प्रदाता और ऑडियो स्रोत प्लगइन्स कॉन्फ़िगर करें",
|
||||||
|
"source": "स्रोत: ",
|
||||||
|
"uncompressed": "असंपीड़ित",
|
||||||
|
"dab_music_source_description": "ऑडियोफाइलों के लिए। उच्च-गुणवत्ता/बिना हानि वाले ऑडियो स्ट्रीम प्रदान करता है। सटीक ISRC आधारित ट्रैक मिलान।"
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Plugin yang tersedia",
|
"available_plugins": "Plugin yang tersedia",
|
||||||
"configure_your_own_metadata_plugin": "Konfigurasi penyedia metadata playlist/album/artis/feed Anda sendiri",
|
"configure_your_own_metadata_plugin": "Konfigurasi penyedia metadata playlist/album/artis/feed Anda sendiri",
|
||||||
"audio_scrobblers": "Scrobblers Audio",
|
"audio_scrobblers": "Scrobblers Audio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Format unduh musik",
|
||||||
|
"streaming_music_format": "Format streaming musik",
|
||||||
|
"download_music_quality": "Kualitas unduh musik",
|
||||||
|
"streaming_music_quality": "Kualitas streaming musik",
|
||||||
|
"default_metadata_source": "Sumber metadata default",
|
||||||
|
"set_default_metadata_source": "Atur sumber metadata default",
|
||||||
|
"default_audio_source": "Sumber audio default",
|
||||||
|
"set_default_audio_source": "Atur sumber audio default",
|
||||||
|
"plugins": "Plugin",
|
||||||
|
"configure_plugins": "Konfigurasi plugin penyedia metadata dan sumber audio Anda sendiri",
|
||||||
|
"source": "Sumber: ",
|
||||||
|
"uncompressed": "Tidak terkompresi",
|
||||||
|
"dab_music_source_description": "Untuk audiophile. Menyediakan aliran audio berkualitas tinggi/tanpa kehilangan. Pencocokkan trek yang akurat berdasarkan ISRC."
|
||||||
}
|
}
|
||||||
@ -478,5 +478,18 @@
|
|||||||
"available_plugins": "Plugin disponibili",
|
"available_plugins": "Plugin disponibili",
|
||||||
"configure_your_own_metadata_plugin": "Configura il tuo provider di metadati per playlist/album/artista/feed",
|
"configure_your_own_metadata_plugin": "Configura il tuo provider di metadati per playlist/album/artista/feed",
|
||||||
"audio_scrobblers": "Scrobbler audio",
|
"audio_scrobblers": "Scrobbler audio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Formato download musica",
|
||||||
|
"streaming_music_format": "Formato streaming musica",
|
||||||
|
"download_music_quality": "Qualità download musica",
|
||||||
|
"streaming_music_quality": "Qualità streaming musica",
|
||||||
|
"default_metadata_source": "Fonte metadati predefinita",
|
||||||
|
"set_default_metadata_source": "Imposta fonte metadati predefinita",
|
||||||
|
"default_audio_source": "Fonte audio predefinita",
|
||||||
|
"set_default_audio_source": "Imposta fonte audio predefinita",
|
||||||
|
"plugins": "Plugin",
|
||||||
|
"configure_plugins": "Configura i tuoi plugin per fornitore metadati e fonte audio",
|
||||||
|
"source": "Fonte: ",
|
||||||
|
"uncompressed": "Non compresso",
|
||||||
|
"dab_music_source_description": "Per audiophile. Fornisce flussi audio di alta qualità/senza perdita. Abbinamento traccia accurato basato su ISRC."
|
||||||
}
|
}
|
||||||
@ -476,5 +476,18 @@
|
|||||||
"available_plugins": "利用可能なプラグイン",
|
"available_plugins": "利用可能なプラグイン",
|
||||||
"configure_your_own_metadata_plugin": "独自のプレイリスト/アルバム/アーティスト/フィードのメタデータプロバイダーを構成",
|
"configure_your_own_metadata_plugin": "独自のプレイリスト/アルバム/アーティスト/フィードのメタデータプロバイダーを構成",
|
||||||
"audio_scrobblers": "オーディオスクロッブラー",
|
"audio_scrobblers": "オーディオスクロッブラー",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
}
|
"download_music_format": "音楽ダウンロード形式",
|
||||||
|
"streaming_music_format": "音楽ストリーミング形式",
|
||||||
|
"download_music_quality": "音楽ダウンロード品質",
|
||||||
|
"streaming_music_quality": "音楽ストリーミング品質",
|
||||||
|
"default_metadata_source": "デフォルトメタデータソース",
|
||||||
|
"set_default_metadata_source": "デフォルトメタデータソースを設定",
|
||||||
|
"default_audio_source": "デフォルトオーディオソース",
|
||||||
|
"set_default_audio_source": "デフォルトオーディオソースを設定",
|
||||||
|
"plugins": "プラグイン",
|
||||||
|
"configure_plugins": "独自のメタデータプロバイダーとオーディオソースプラグインを設定",
|
||||||
|
"source": "ソース: ",
|
||||||
|
"uncompressed": "非圧縮",
|
||||||
|
"dab_music_source_description": "オーディオファイル向け。高品質/ロスレスオーディオストリームを提供。正確なISRCベースのトラックマッチング。"
|
||||||
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "ხელმისაწვდომი პლაგინები",
|
"available_plugins": "ხელმისაწვდომი პლაგინები",
|
||||||
"configure_your_own_metadata_plugin": "დააყენეთ თქვენი საკუთარი პლეილისტის/ალბომის/არტისტის/ფიდის მეტამონაცემების პროვაიდერი",
|
"configure_your_own_metadata_plugin": "დააყენეთ თქვენი საკუთარი პლეილისტის/ალბომის/არტისტის/ფიდის მეტამონაცემების პროვაიდერი",
|
||||||
"audio_scrobblers": "აუდიო სქრობლერები",
|
"audio_scrobblers": "აუდიო სქრობლერები",
|
||||||
"scrobbling": "სქრობლინგი"
|
"scrobbling": "სქრობლინგი",
|
||||||
|
"download_music_format": "მუსიკის ჩამოტვირთვის ფორმატი",
|
||||||
|
"streaming_music_format": "სტრიმინგის მუსიკის ფორმატი",
|
||||||
|
"download_music_quality": "ჩამოტვირთვის ხარისხი",
|
||||||
|
"streaming_music_quality": "სტრიმინგის ხარისხი",
|
||||||
|
"default_metadata_source": "ნაგულისხმევი მეტამონაცემების წყარო",
|
||||||
|
"set_default_metadata_source": "ნაგულისხმევი მეტამონაცემების წყაროს დაყენება",
|
||||||
|
"default_audio_source": "ნაგულისხმევი აუდიო წყარო",
|
||||||
|
"set_default_audio_source": "ნაგულისხმევი აუდიო წყაროს დაყენება",
|
||||||
|
"plugins": "პლაგინები",
|
||||||
|
"configure_plugins": "თქვენი საკუთარი მეტამონაცემებისა და აუდიო წყაროს პლაგინების კონფიგურაცია",
|
||||||
|
"source": "წყარო: ",
|
||||||
|
"uncompressed": "შეუკუმშავი",
|
||||||
|
"dab_music_source_description": "აუდიოფილებისთვის. უზრუნველყოფს მაღალი ხარისხის/უკომპრესო აუდიო სტრიმებს. ზუსტი შესაბამისობა ISRC-ის მიხედვით."
|
||||||
}
|
}
|
||||||
@ -478,5 +478,18 @@
|
|||||||
"available_plugins": "사용 가능한 플러그인",
|
"available_plugins": "사용 가능한 플러그인",
|
||||||
"configure_your_own_metadata_plugin": "자신만의 플레이리스트/앨범/아티스트/피드 메타데이터 제공자 구성",
|
"configure_your_own_metadata_plugin": "자신만의 플레이리스트/앨범/아티스트/피드 메타데이터 제공자 구성",
|
||||||
"audio_scrobblers": "오디오 스크로블러",
|
"audio_scrobblers": "오디오 스크로블러",
|
||||||
"scrobbling": "스크로블링"
|
"scrobbling": "스크로블링",
|
||||||
|
"download_music_format": "다운로드 음악 포맷",
|
||||||
|
"streaming_music_format": "스트리밍 음악 포맷",
|
||||||
|
"download_music_quality": "다운로드 음질",
|
||||||
|
"streaming_music_quality": "스트리밍 음질",
|
||||||
|
"default_metadata_source": "기본 메타데이터 소스",
|
||||||
|
"set_default_metadata_source": "기본 메타데이터 소스 설정",
|
||||||
|
"default_audio_source": "기본 오디오 소스",
|
||||||
|
"set_default_audio_source": "기본 오디오 소스 설정",
|
||||||
|
"plugins": "플러그인",
|
||||||
|
"configure_plugins": "직접 메타데이터 제공자와 오디오 소스 플러그인을 구성하세요",
|
||||||
|
"source": "출처: ",
|
||||||
|
"uncompressed": "비압축",
|
||||||
|
"dab_music_source_description": "오디오파일을 위한 소스입니다. 고음질/무손실 오디오 스트림을 제공하며 ISRC 기반으로 정확한 트랙 매칭을 지원합니다."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "उपलब्ध प्लगइनहरू",
|
"available_plugins": "उपलब्ध प्लगइनहरू",
|
||||||
"configure_your_own_metadata_plugin": "तपाईंको आफ्नै प्लेलिस्ट/एल्बम/कलाकार/फिड मेटाडेटा प्रदायक कन्फिगर गर्नुहोस्",
|
"configure_your_own_metadata_plugin": "तपाईंको आफ्नै प्लेलिस्ट/एल्बम/कलाकार/फिड मेटाडेटा प्रदायक कन्फिगर गर्नुहोस्",
|
||||||
"audio_scrobblers": "अडियो स्क्रब्बलरहरू",
|
"audio_scrobblers": "अडियो स्क्रब्बलरहरू",
|
||||||
"scrobbling": "स्क्रब्बलिंग"
|
"scrobbling": "स्क्रब्बलिंग",
|
||||||
|
"download_music_format": "सङ्गीत डाउनलोड ढाँचा",
|
||||||
|
"streaming_music_format": "स्ट्रिमिङ सङ्गीत ढाँचा",
|
||||||
|
"download_music_quality": "डाउनलोड गुणस्तर",
|
||||||
|
"streaming_music_quality": "स्ट्रिमिङ गुणस्तर",
|
||||||
|
"default_metadata_source": "पूर्वनिर्धारित मेटाडाटा स्रोत",
|
||||||
|
"set_default_metadata_source": "पूर्वनिर्धारित मेटाडाटा स्रोत सेट गर्नुहोस्",
|
||||||
|
"default_audio_source": "पूर्वनिर्धारित अडियो स्रोत",
|
||||||
|
"set_default_audio_source": "पूर्वनिर्धारित अडियो स्रोत सेट गर्नुहोस्",
|
||||||
|
"plugins": "प्लगइनहरू",
|
||||||
|
"configure_plugins": "आफ्नै मेटाडाटा प्रदायक र अडियो स्रोत प्लगइनहरू कन्फिगर गर्नुहोस्",
|
||||||
|
"source": "स्रोत: ",
|
||||||
|
"uncompressed": "असंक्षिप्त",
|
||||||
|
"dab_music_source_description": "अडियोप्रेमीहरूका लागि। उच्च गुणस्तर/लसलेस अडियो स्ट्रिमहरू उपलब्ध गराउँछ। ISRC-मा आधारित सटीक ट्र्याक मिलान।"
|
||||||
}
|
}
|
||||||
@ -477,5 +477,19 @@
|
|||||||
"available_plugins": "Beschikbare plugins",
|
"available_plugins": "Beschikbare plugins",
|
||||||
"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",
|
||||||
}
|
"download_music_format": "Download muziekformaat",
|
||||||
|
"streaming_music_format": "Streaming muziekformaat",
|
||||||
|
"download_music_quality": "Downloadkwaliteit",
|
||||||
|
"streaming_music_quality": "Streamingkwaliteit",
|
||||||
|
"default_metadata_source": "Standaard metadata-bron",
|
||||||
|
"set_default_metadata_source": "Standaard metadata-bron instellen",
|
||||||
|
"default_audio_source": "Standaard audiobron",
|
||||||
|
"set_default_audio_source": "Standaard audiobron instellen",
|
||||||
|
"plugins": "Plug-ins",
|
||||||
|
"configure_plugins": "Configureer je eigen metadata- en audiobron-plug-ins",
|
||||||
|
"source": "Bron: ",
|
||||||
|
"uncompressed": "Ongecomprimeerd",
|
||||||
|
"dab_music_source_description": "Voor audiofielen. Biedt hoge kwaliteit/lossless audiostreams. Nauwkeurige trackmatching op basis van ISRC.",
|
||||||
|
"audio_source": "Audiobron"
|
||||||
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Dostępne wtyczki",
|
"available_plugins": "Dostępne wtyczki",
|
||||||
"configure_your_own_metadata_plugin": "Skonfiguruj własnego dostawcę metadanych dla playlisty/albumu/artysty/kanału",
|
"configure_your_own_metadata_plugin": "Skonfiguruj własnego dostawcę metadanych dla playlisty/albumu/artysty/kanału",
|
||||||
"audio_scrobblers": "Scrobblery audio",
|
"audio_scrobblers": "Scrobblery audio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Format pobierania muzyki",
|
||||||
|
"streaming_music_format": "Format strumieniowania muzyki",
|
||||||
|
"download_music_quality": "Jakość pobierania",
|
||||||
|
"streaming_music_quality": "Jakość strumieniowania",
|
||||||
|
"default_metadata_source": "Domyślne źródło metadanych",
|
||||||
|
"set_default_metadata_source": "Ustaw domyślne źródło metadanych",
|
||||||
|
"default_audio_source": "Domyślne źródło audio",
|
||||||
|
"set_default_audio_source": "Ustaw domyślne źródło audio",
|
||||||
|
"plugins": "Wtyczki",
|
||||||
|
"configure_plugins": "Skonfiguruj własne wtyczki dostawców metadanych i źródeł audio",
|
||||||
|
"source": "Źródło: ",
|
||||||
|
"uncompressed": "Nieskompresowany",
|
||||||
|
"dab_music_source_description": "Dla audiofilów. Oferuje strumienie audio wysokiej jakości/lossless. Precyzyjne dopasowanie utworów na podstawie ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Plugins disponíveis",
|
"available_plugins": "Plugins disponíveis",
|
||||||
"configure_your_own_metadata_plugin": "Configure seu próprio provedor de metadados de playlist/álbum/artista/feed",
|
"configure_your_own_metadata_plugin": "Configure seu próprio provedor de metadados de playlist/álbum/artista/feed",
|
||||||
"audio_scrobblers": "Scrobblers de áudio",
|
"audio_scrobblers": "Scrobblers de áudio",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Formato de download de música",
|
||||||
|
"streaming_music_format": "Formato de streaming de música",
|
||||||
|
"download_music_quality": "Qualidade de download",
|
||||||
|
"streaming_music_quality": "Qualidade de streaming",
|
||||||
|
"default_metadata_source": "Fonte padrão de metadados",
|
||||||
|
"set_default_metadata_source": "Definir fonte padrão de metadados",
|
||||||
|
"default_audio_source": "Fonte de áudio padrão",
|
||||||
|
"set_default_audio_source": "Definir fonte de áudio padrão",
|
||||||
|
"plugins": "Plugins",
|
||||||
|
"configure_plugins": "Configure seus próprios plugins de provedores de metadados e fontes de áudio",
|
||||||
|
"source": "Fonte: ",
|
||||||
|
"uncompressed": "Não comprimido",
|
||||||
|
"dab_music_source_description": "Para audiófilos. Fornece streams de áudio de alta qualidade/sem perdas. Correspondência precisa de faixas baseada em ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Доступные плагины",
|
"available_plugins": "Доступные плагины",
|
||||||
"configure_your_own_metadata_plugin": "Настройте свой собственный поставщик метаданных для плейлиста/альбома/артиста/ленты",
|
"configure_your_own_metadata_plugin": "Настройте свой собственный поставщик метаданных для плейлиста/альбома/артиста/ленты",
|
||||||
"audio_scrobblers": "Аудио скробблеры",
|
"audio_scrobblers": "Аудио скробблеры",
|
||||||
"scrobbling": "Скробблинг"
|
"scrobbling": "Скробблинг",
|
||||||
|
"download_music_format": "Формат загрузки музыки",
|
||||||
|
"streaming_music_format": "Формат потоковой музыки",
|
||||||
|
"download_music_quality": "Качество загрузки",
|
||||||
|
"streaming_music_quality": "Качество стриминга",
|
||||||
|
"default_metadata_source": "Источник метаданных по умолчанию",
|
||||||
|
"set_default_metadata_source": "Задать источник метаданных по умолчанию",
|
||||||
|
"default_audio_source": "Источник аудио по умолчанию",
|
||||||
|
"set_default_audio_source": "Задать источник аудио по умолчанию",
|
||||||
|
"plugins": "Плагины",
|
||||||
|
"configure_plugins": "Настройте собственные плагины провайдеров метаданных и источников аудио",
|
||||||
|
"source": "Источник: ",
|
||||||
|
"uncompressed": "Несжатый",
|
||||||
|
"dab_music_source_description": "Для аудиофилов. Предоставляет высококачественные/lossless аудиопотоки. Точное совпадение треков по ISRC."
|
||||||
}
|
}
|
||||||
@ -475,5 +475,18 @@
|
|||||||
"available_plugins": "கிடைக்கக்கூடிய பிளகின்கள்",
|
"available_plugins": "கிடைக்கக்கூடிய பிளகின்கள்",
|
||||||
"configure_your_own_metadata_plugin": "உங்கள் சொந்த பிளேலிஸ்ட்/ஆல்பம்/கலைஞர்/ஊட்ட மெட்டாடேட்டா வழங்குநரை உள்ளமைக்கவும்",
|
"configure_your_own_metadata_plugin": "உங்கள் சொந்த பிளேலிஸ்ட்/ஆல்பம்/கலைஞர்/ஊட்ட மெட்டாடேட்டா வழங்குநரை உள்ளமைக்கவும்",
|
||||||
"audio_scrobblers": "ஆடியோ ஸ்க்ரோப்ளர்கள்",
|
"audio_scrobblers": "ஆடியோ ஸ்க்ரோப்ளர்கள்",
|
||||||
"scrobbling": "ஸ்க்ரோப்ளிங்"
|
"scrobbling": "ஸ்க்ரோப்ளிங்",
|
||||||
|
"download_music_format": "இசை பதிவிறக்க வடிவம்",
|
||||||
|
"streaming_music_format": "இசை ஸ்ட்ரீமிங் வடிவம்",
|
||||||
|
"download_music_quality": "பதிவிறக்க தரம்",
|
||||||
|
"streaming_music_quality": "ஸ்ட்ரீமிங் தரம்",
|
||||||
|
"default_metadata_source": "இயல்புநிலை மெட்டாடேட்டா மூலம்",
|
||||||
|
"set_default_metadata_source": "இயல்புநிலை மெட்டாடேட்டா மூலத்தை அமை",
|
||||||
|
"default_audio_source": "இயல்புநிலை ஆடியோ மூலம்",
|
||||||
|
"set_default_audio_source": "இயல்புநிலை ஆடியோ மூலத்தை அமை",
|
||||||
|
"plugins": "செருகுநிரல்கள்",
|
||||||
|
"configure_plugins": "உங்கள் சொந்த மெட்டாடேட்டா வழங்குநர் மற்றும் ஆடியோ மூல செருகுநிரல்களை அமைக்கவும்",
|
||||||
|
"source": "மூலம்: ",
|
||||||
|
"uncompressed": "அழுத்தப்படாத",
|
||||||
|
"dab_music_source_description": "ஆடியோஃபைல்களுக்காக. உயர்தர/லாஸ்லெஸ் ஆடியோ ஸ்ட்ரீம்களை வழங்குகிறது. ISRC அடிப்படையில் துல்லியமான பாடல் பொருத்தம்."
|
||||||
}
|
}
|
||||||
@ -478,5 +478,18 @@
|
|||||||
"available_plugins": "ปลั๊กอินที่มีอยู่",
|
"available_plugins": "ปลั๊กอินที่มีอยู่",
|
||||||
"configure_your_own_metadata_plugin": "กำหนดค่าผู้ให้บริการเมตาดาต้าเพลย์ลิสต์/อัลบั้ม/ศิลปิน/ฟีดของคุณเอง",
|
"configure_your_own_metadata_plugin": "กำหนดค่าผู้ให้บริการเมตาดาต้าเพลย์ลิสต์/อัลบั้ม/ศิลปิน/ฟีดของคุณเอง",
|
||||||
"audio_scrobblers": "เครื่อง scrobbler เสียง",
|
"audio_scrobblers": "เครื่อง scrobbler เสียง",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "รูปแบบการดาวน์โหลดเพลง",
|
||||||
|
"streaming_music_format": "รูปแบบการสตรีมเพลง",
|
||||||
|
"download_music_quality": "คุณภาพการดาวน์โหลด",
|
||||||
|
"streaming_music_quality": "คุณภาพการสตรีม",
|
||||||
|
"default_metadata_source": "แหล่งเมตาดาต้าพื้นฐาน",
|
||||||
|
"set_default_metadata_source": "ตั้งค่าแหล่งเมตาดาต้าพื้นฐาน",
|
||||||
|
"default_audio_source": "แหล่งเสียงพื้นฐาน",
|
||||||
|
"set_default_audio_source": "ตั้งค่าแหล่งเสียงพื้นฐาน",
|
||||||
|
"plugins": "ปลั๊กอิน",
|
||||||
|
"configure_plugins": "กำหนดค่าปลั๊กอินผู้ให้บริการเมตาดาต้าและแหล่งเสียงของคุณเอง",
|
||||||
|
"source": "แหล่งที่มา: ",
|
||||||
|
"uncompressed": "ไม่บีบอัด",
|
||||||
|
"dab_music_source_description": "สำหรับคนรักเสียงเพลง ให้สตรีมเสียงคุณภาพสูง/ไร้การสูญเสียการบีบอัด การจับคู่แทร็กแม่นยำตาม ISRC"
|
||||||
}
|
}
|
||||||
@ -475,5 +475,18 @@
|
|||||||
"available_plugins": "Mga available na plugin",
|
"available_plugins": "Mga available na plugin",
|
||||||
"configure_your_own_metadata_plugin": "I-configure ang iyong sariling playlist/album/artist/feed metadata provider",
|
"configure_your_own_metadata_plugin": "I-configure ang iyong sariling playlist/album/artist/feed metadata provider",
|
||||||
"audio_scrobblers": "Mga Audio Scrobbler",
|
"audio_scrobblers": "Mga Audio Scrobbler",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "I-download na format ng musika",
|
||||||
|
"streaming_music_format": "Format ng streaming ng musika",
|
||||||
|
"download_music_quality": "Kalidad ng i-download na musika",
|
||||||
|
"streaming_music_quality": "Kalidad ng streaming ng musika",
|
||||||
|
"default_metadata_source": "Default na pinagmulan ng metadata",
|
||||||
|
"set_default_metadata_source": "Itakda ang default na pinagmulan ng metadata",
|
||||||
|
"default_audio_source": "Default na pinagmulan ng audio",
|
||||||
|
"set_default_audio_source": "Itakda ang default na pinagmulan ng audio",
|
||||||
|
"plugins": "Mga plugin",
|
||||||
|
"configure_plugins": "I-configure ang sarili mong metadata provider at mga audio source plugin",
|
||||||
|
"source": "Pinagmulan: ",
|
||||||
|
"uncompressed": "Hindi naka-compress",
|
||||||
|
"dab_music_source_description": "Para sa mga audiophile. Nagbibigay ng de-kalidad/walang loss na audio streams. Tumpak na pagtutugma ng track batay sa ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Mevcut eklentiler",
|
"available_plugins": "Mevcut eklentiler",
|
||||||
"configure_your_own_metadata_plugin": "Kendi çalma listenizi/albümünüzü/sanatçınızı/akış meta veri sağlayıcınızı yapılandırın",
|
"configure_your_own_metadata_plugin": "Kendi çalma listenizi/albümünüzü/sanatçınızı/akış meta veri sağlayıcınızı yapılandırın",
|
||||||
"audio_scrobblers": "Ses Scrobbler'lar",
|
"audio_scrobblers": "Ses Scrobbler'lar",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Müzik indirme formatı",
|
||||||
|
"streaming_music_format": "Müzik akış formatı",
|
||||||
|
"download_music_quality": "İndirilen müzik kalitesi",
|
||||||
|
"streaming_music_quality": "Yayınlanan müzik kalitesi",
|
||||||
|
"default_metadata_source": "Varsayılan meta veri kaynağı",
|
||||||
|
"set_default_metadata_source": "Varsayılan meta veri kaynağını ayarla",
|
||||||
|
"default_audio_source": "Varsayılan ses kaynağı",
|
||||||
|
"set_default_audio_source": "Varsayılan ses kaynağını ayarla",
|
||||||
|
"plugins": "Eklentiler",
|
||||||
|
"configure_plugins": "Kendi meta veri sağlayıcı ve ses kaynağı eklentilerinizi yapılandırın",
|
||||||
|
"source": "Kaynak: ",
|
||||||
|
"uncompressed": "Sıkıştırılmamış",
|
||||||
|
"dab_music_source_description": "Audiophile'ler için. Yüksek kaliteli/kayıpsız ses akışları sağlar. Doğru ISRC tabanlı parça eşleştirme."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Доступні плагіни",
|
"available_plugins": "Доступні плагіни",
|
||||||
"configure_your_own_metadata_plugin": "Налаштуйте свій власний провайдер метаданих для плейлиста/альбому/виконавця/стрічки",
|
"configure_your_own_metadata_plugin": "Налаштуйте свій власний провайдер метаданих для плейлиста/альбому/виконавця/стрічки",
|
||||||
"audio_scrobblers": "Аудіо скробблери",
|
"audio_scrobblers": "Аудіо скробблери",
|
||||||
"scrobbling": "Скроблінг"
|
"scrobbling": "Скроблінг",
|
||||||
|
"download_music_format": "Формат завантаження музики",
|
||||||
|
"streaming_music_format": "Формат потокової музики",
|
||||||
|
"download_music_quality": "Якість завантаженої музики",
|
||||||
|
"streaming_music_quality": "Якість потокової музики",
|
||||||
|
"default_metadata_source": "Джерело метаданих за замовчуванням",
|
||||||
|
"set_default_metadata_source": "Встановити джерело метаданих за замовчуванням",
|
||||||
|
"default_audio_source": "Джерело аудіо за замовчуванням",
|
||||||
|
"set_default_audio_source": "Встановити джерело аудіо за замовчуванням",
|
||||||
|
"plugins": "Плагіни",
|
||||||
|
"configure_plugins": "Налаштуйте власні плагіни метаданих і аудіоджерела",
|
||||||
|
"source": "Джерело: ",
|
||||||
|
"uncompressed": "Без стиснення",
|
||||||
|
"dab_music_source_description": "Для аудіофілів. Забезпечує високоякісні/без втрат аудіопотоки. Точна відповідність треків на основі ISRC."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "Các plugin có sẵn",
|
"available_plugins": "Các plugin có sẵn",
|
||||||
"configure_your_own_metadata_plugin": "Cấu hình nhà cung cấp siêu dữ liệu danh sách phát/album/nghệ sĩ/nguồn cấp dữ liệu của riêng bạn",
|
"configure_your_own_metadata_plugin": "Cấu hình nhà cung cấp siêu dữ liệu danh sách phát/album/nghệ sĩ/nguồn cấp dữ liệu của riêng bạn",
|
||||||
"audio_scrobblers": "Bộ scrobbler âm thanh",
|
"audio_scrobblers": "Bộ scrobbler âm thanh",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "Định dạng nhạc tải về",
|
||||||
|
"streaming_music_format": "Định dạng nhạc phát trực tuyến",
|
||||||
|
"download_music_quality": "Chất lượng nhạc tải về",
|
||||||
|
"streaming_music_quality": "Chất lượng nhạc phát trực tuyến",
|
||||||
|
"default_metadata_source": "Nguồn siêu dữ liệu mặc định",
|
||||||
|
"set_default_metadata_source": "Đặt nguồn siêu dữ liệu mặc định",
|
||||||
|
"default_audio_source": "Nguồn âm thanh mặc định",
|
||||||
|
"set_default_audio_source": "Đặt nguồn âm thanh mặc định",
|
||||||
|
"plugins": "Tiện ích bổ sung",
|
||||||
|
"configure_plugins": "Cấu hình nhà cung cấp siêu dữ liệu và tiện ích nguồn âm thanh riêng",
|
||||||
|
"source": "Nguồn: ",
|
||||||
|
"uncompressed": "Không nén",
|
||||||
|
"dab_music_source_description": "Dành cho người yêu âm nhạc chất lượng cao. Cung cấp luồng âm thanh chất lượng cao/không nén. Phù hợp bài hát dựa trên ISRC chính xác."
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "可用插件",
|
"available_plugins": "可用插件",
|
||||||
"configure_your_own_metadata_plugin": "配置您自己的播放列表/专辑/艺人/订阅元数据提供者",
|
"configure_your_own_metadata_plugin": "配置您自己的播放列表/专辑/艺人/订阅元数据提供者",
|
||||||
"audio_scrobblers": "音频 Scrobblers",
|
"audio_scrobblers": "音频 Scrobblers",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "下载音乐格式",
|
||||||
|
"streaming_music_format": "流媒体音乐格式",
|
||||||
|
"download_music_quality": "下载音乐质量",
|
||||||
|
"streaming_music_quality": "流媒体音乐质量",
|
||||||
|
"default_metadata_source": "默认元数据源",
|
||||||
|
"set_default_metadata_source": "设置默认元数据源",
|
||||||
|
"default_audio_source": "默认音频源",
|
||||||
|
"set_default_audio_source": "设置默认音频源",
|
||||||
|
"plugins": "插件",
|
||||||
|
"configure_plugins": "配置您自己的元数据提供者和音频源插件",
|
||||||
|
"source": "来源:",
|
||||||
|
"uncompressed": "无损",
|
||||||
|
"dab_music_source_description": "适合发烧友。提供高质量/无损音频流。基于 ISRC 的精确曲目匹配。"
|
||||||
}
|
}
|
||||||
@ -477,5 +477,18 @@
|
|||||||
"available_plugins": "可用的外掛程式",
|
"available_plugins": "可用的外掛程式",
|
||||||
"configure_your_own_metadata_plugin": "設定您自己的播放清單/專輯/藝人/動態中繼資料供應商",
|
"configure_your_own_metadata_plugin": "設定您自己的播放清單/專輯/藝人/動態中繼資料供應商",
|
||||||
"audio_scrobblers": "音訊 Scrobblers",
|
"audio_scrobblers": "音訊 Scrobblers",
|
||||||
"scrobbling": "Scrobbling"
|
"scrobbling": "Scrobbling",
|
||||||
|
"download_music_format": "下載音樂格式",
|
||||||
|
"streaming_music_format": "串流音樂格式",
|
||||||
|
"download_music_quality": "下載音樂品質",
|
||||||
|
"streaming_music_quality": "串流音樂品質",
|
||||||
|
"default_metadata_source": "預設中繼資料來源",
|
||||||
|
"set_default_metadata_source": "設定預設中繼資料來源",
|
||||||
|
"default_audio_source": "預設音訊來源",
|
||||||
|
"set_default_audio_source": "設定預設音訊來源",
|
||||||
|
"plugins": "外掛程式",
|
||||||
|
"configure_plugins": "配置您自己的中繼資料提供者和音訊來源外掛程式",
|
||||||
|
"source": "來源:",
|
||||||
|
"uncompressed": "未壓縮",
|
||||||
|
"dab_music_source_description": "適合音響發燒友。提供高品質/無損音訊串流。精確的 ISRC 曲目比對。"
|
||||||
}
|
}
|
||||||
@ -1743,17 +1743,29 @@ abstract class AppLocalizations {
|
|||||||
/// **'Restore defaults'**
|
/// **'Restore defaults'**
|
||||||
String get restore_defaults;
|
String get restore_defaults;
|
||||||
|
|
||||||
/// No description provided for @download_music_codec.
|
/// No description provided for @download_music_format.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Download music codec'**
|
/// **'Download music format'**
|
||||||
String get download_music_codec;
|
String get download_music_format;
|
||||||
|
|
||||||
/// No description provided for @streaming_music_codec.
|
/// No description provided for @streaming_music_format.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Streaming music codec'**
|
/// **'Streaming music format'**
|
||||||
String get streaming_music_codec;
|
String get streaming_music_format;
|
||||||
|
|
||||||
|
/// No description provided for @download_music_quality.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Download music quality'**
|
||||||
|
String get download_music_quality;
|
||||||
|
|
||||||
|
/// No description provided for @streaming_music_quality.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Streaming music quality'**
|
||||||
|
String get streaming_music_quality;
|
||||||
|
|
||||||
/// No description provided for @login_with_lastfm.
|
/// No description provided for @login_with_lastfm.
|
||||||
///
|
///
|
||||||
@ -2763,11 +2775,29 @@ abstract class AppLocalizations {
|
|||||||
/// **'This plugin scrobbles your music to generate your listening history.'**
|
/// **'This plugin scrobbles your music to generate your listening history.'**
|
||||||
String get plugin_scrobbling_info;
|
String get plugin_scrobbling_info;
|
||||||
|
|
||||||
/// No description provided for @default_plugin.
|
/// No description provided for @default_metadata_source.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Default'**
|
/// **'Default metadata source'**
|
||||||
String get default_plugin;
|
String get default_metadata_source;
|
||||||
|
|
||||||
|
/// No description provided for @set_default_metadata_source.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Set default metadata source'**
|
||||||
|
String get set_default_metadata_source;
|
||||||
|
|
||||||
|
/// No description provided for @default_audio_source.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Default audio source'**
|
||||||
|
String get default_audio_source;
|
||||||
|
|
||||||
|
/// No description provided for @set_default_audio_source.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Set default audio source'**
|
||||||
|
String get set_default_audio_source;
|
||||||
|
|
||||||
/// No description provided for @set_default.
|
/// No description provided for @set_default.
|
||||||
///
|
///
|
||||||
@ -2871,11 +2901,11 @@ abstract class AppLocalizations {
|
|||||||
/// **'Input doesn\'t match the required format'**
|
/// **'Input doesn\'t match the required format'**
|
||||||
String get input_does_not_match_format;
|
String get input_does_not_match_format;
|
||||||
|
|
||||||
/// No description provided for @metadata_provider_plugins.
|
/// No description provided for @plugins.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Metadata Provider Plugins'**
|
/// **'Plugins'**
|
||||||
String get metadata_provider_plugins;
|
String get plugins;
|
||||||
|
|
||||||
/// No description provided for @paste_plugin_download_url.
|
/// No description provided for @paste_plugin_download_url.
|
||||||
///
|
///
|
||||||
@ -2913,11 +2943,11 @@ abstract class AppLocalizations {
|
|||||||
/// **'Available plugins'**
|
/// **'Available plugins'**
|
||||||
String get available_plugins;
|
String get available_plugins;
|
||||||
|
|
||||||
/// No description provided for @configure_your_own_metadata_plugin.
|
/// No description provided for @configure_plugins.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Configure your own playlist/album/artist/feed metadata provider'**
|
/// **'Configure your own metadata provider and audio source plugins'**
|
||||||
String get configure_your_own_metadata_plugin;
|
String get configure_plugins;
|
||||||
|
|
||||||
/// No description provided for @audio_scrobblers.
|
/// No description provided for @audio_scrobblers.
|
||||||
///
|
///
|
||||||
@ -2930,6 +2960,24 @@ abstract class AppLocalizations {
|
|||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Scrobbling'**
|
/// **'Scrobbling'**
|
||||||
String get scrobbling;
|
String get scrobbling;
|
||||||
|
|
||||||
|
/// No description provided for @source.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Source: '**
|
||||||
|
String get source;
|
||||||
|
|
||||||
|
/// No description provided for @uncompressed.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Uncompressed'**
|
||||||
|
String get uncompressed;
|
||||||
|
|
||||||
|
/// No description provided for @dab_music_source_description.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'**
|
||||||
|
String get dab_music_source_description;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AppLocalizationsDelegate
|
class _AppLocalizationsDelegate
|
||||||
|
|||||||
@ -874,10 +874,16 @@ class AppLocalizationsAr extends AppLocalizations {
|
|||||||
String get restore_defaults => 'استعادة الإعدادات الافتراضية';
|
String get restore_defaults => 'استعادة الإعدادات الافتراضية';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'تنزيل ترميز الموسيقى';
|
String get download_music_format => 'تنسيق تنزيل الموسيقى';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'ترميز الموسيقى بالتدفق';
|
String get streaming_music_format => 'تنسيق بث الموسيقى';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'جودة تنزيل الموسيقى';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'جودة بث الموسيقى';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'تسجيل الدخول باستخدام Last.fm';
|
String get login_with_lastfm => 'تسجيل الدخول باستخدام Last.fm';
|
||||||
@ -1443,7 +1449,17 @@ class AppLocalizationsAr extends AppLocalizations {
|
|||||||
'تقوم هذه الإضافة بتتبع مقاطعك الموسيقية لإنشاء سجل الاستماع الخاص بك.';
|
'تقوم هذه الإضافة بتتبع مقاطعك الموسيقية لإنشاء سجل الاستماع الخاص بك.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'الافتراضي';
|
String get default_metadata_source => 'مصدر البيانات الوصفية الافتراضي';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'تعيين مصدر البيانات الوصفية الافتراضي';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'مصدر الصوت الافتراضي';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'تعيين مصدر الصوت الافتراضي';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'تعيين كافتراضي';
|
String get set_default => 'تعيين كافتراضي';
|
||||||
@ -1504,7 +1520,7 @@ class AppLocalizationsAr extends AppLocalizations {
|
|||||||
'المدخل لا يتوافق مع التنسيق المطلوب';
|
'المدخل لا يتوافق مع التنسيق المطلوب';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'إضافات مزود البيانات';
|
String get plugins => 'الإضافات';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1529,12 +1545,22 @@ class AppLocalizationsAr extends AppLocalizations {
|
|||||||
String get available_plugins => 'الإضافات المتوفّرة';
|
String get available_plugins => 'الإضافات المتوفّرة';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'تهيئة مزوّد بيانات للقائمة/الألبوم/الفنان/المصدر خاص بك';
|
'قم بتكوين مزود البيانات الوصفية ومكونات مصدر الصوت الخاصة بك';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'أجهزة تتبع الصوت';
|
String get audio_scrobblers => 'أجهزة تتبع الصوت';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'التتبع';
|
String get scrobbling => 'التتبع';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'المصدر: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'غير مضغوط';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'لمحبي الصوتيات. يوفر تدفقات صوتية عالية الجودة/بدون فقدان. مطابقة دقيقة للمسارات بناءً على ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -873,10 +873,16 @@ class AppLocalizationsBn extends AppLocalizations {
|
|||||||
String get restore_defaults => 'ডিফল্ট সেটিংস পুনরুদ্ধার করুন';
|
String get restore_defaults => 'ডিফল্ট সেটিংস পুনরুদ্ধার করুন';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'সঙ্গীত কোডেক ডাউনলোড করুন';
|
String get download_music_format => 'গান ডাউনলোডের বিন্যাস';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'স্ট্রিমিং সঙ্গীত কোডেক';
|
String get streaming_music_format => 'গান স্ট্রিমিং এর বিন্যাস';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'গান ডাউনলোডের মান';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'গান স্ট্রিমিং এর মান';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm দিয়ে লগইন করুন';
|
String get login_with_lastfm => 'Last.fm দিয়ে লগইন করুন';
|
||||||
@ -1443,7 +1449,16 @@ class AppLocalizationsBn extends AppLocalizations {
|
|||||||
'এই প্লাগইনটি আপনার সঙ্গীত স্ক্রোব্বল করে আপনার শোনা ইতিহাস তৈরি করে।';
|
'এই প্লাগইনটি আপনার সঙ্গীত স্ক্রোব্বল করে আপনার শোনা ইতিহাস তৈরি করে।';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'ডিফল্ট';
|
String get default_metadata_source => 'ডিফল্ট মেটাডেটা উৎস';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'ডিফল্ট মেটাডেটা উৎস সেট করুন';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'ডিফল্ট অডিও উৎস';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'ডিফল্ট অডিও উৎস সেট করুন';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'ডিফল্ট হিসাবে নির্ধারণ করুন';
|
String get set_default => 'ডিফল্ট হিসাবে নির্ধারণ করুন';
|
||||||
@ -1505,7 +1520,7 @@ class AppLocalizationsBn extends AppLocalizations {
|
|||||||
'ইনপুট প্রয়োজনীয় ফরম্যাটের সাথে মেলে না';
|
'ইনপুট প্রয়োজনীয় ফরম্যাটের সাথে মেলে না';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'মেটাডেটা প্রদানকারী প্লাগইনসমূহ';
|
String get plugins => 'প্লাগইন';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1530,12 +1545,22 @@ class AppLocalizationsBn extends AppLocalizations {
|
|||||||
String get available_plugins => 'উপলব্ধ প্লাগইনগুলো';
|
String get available_plugins => 'উপলব্ধ প্লাগইনগুলো';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'নিজস্ব প্লেলিস্ট/অ্যালবাম/শিল্পী/ফিড মেটাডেটা প্রদানকারী কনফিগার করুন';
|
'আপনার নিজের মেটাডেটা প্রদানকারী এবং অডিও উৎস প্লাগইন কনফিগার করুন';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'অডিও স্ক্রোব্বলার্স';
|
String get audio_scrobblers => 'অডিও স্ক্রোব্বলার্স';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'স্ক্রোব্বলিং';
|
String get scrobbling => 'স্ক্রোব্বলিং';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'উৎস: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'অ-সংকুচিত';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'অডিওফাইলদের জন্য। উচ্চ-মানের/লসলেস অডিও স্ট্রিম প্রদান করে। সঠিক ISRC ভিত্তিক ট্র্যাক ম্যাচিং।';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -876,10 +876,18 @@ class AppLocalizationsCa extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Restaura els valors per defecte';
|
String get restore_defaults => 'Restaura els valors per defecte';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Descarrega el codec de música';
|
String get download_music_format => 'Format de descàrrega de música';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Codec de música en streaming';
|
String get streaming_music_format =>
|
||||||
|
'Format de reproducció de música en temps real';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Qualitat de descàrrega de música';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality =>
|
||||||
|
'Qualitat de reproducció de música en temps real';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Inicia la sessió amb Last.fm';
|
String get login_with_lastfm => 'Inicia la sessió amb Last.fm';
|
||||||
@ -1450,7 +1458,18 @@ class AppLocalizationsCa extends AppLocalizations {
|
|||||||
'Aquest complement fa scrobbling de la teva música per generar l’historial d’escoltes.';
|
'Aquest complement fa scrobbling de la teva música per generar l’historial d’escoltes.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Predeterminat';
|
String get default_metadata_source => 'Font de metadades per defecte';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Estableix la font de metadades per defecte';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Font d\'àudio per defecte';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source =>
|
||||||
|
'Estableix la font d\'àudio per defecte';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Establir com a predeterminat';
|
String get set_default => 'Establir com a predeterminat';
|
||||||
@ -1514,8 +1533,7 @@ class AppLocalizationsCa extends AppLocalizations {
|
|||||||
'L’entrada no coincideix amb el format requerit';
|
'L’entrada no coincideix amb el format requerit';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins =>
|
String get plugins => 'Connectors';
|
||||||
'Complements de proveïdor de metadades';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1540,12 +1558,22 @@ class AppLocalizationsCa extends AppLocalizations {
|
|||||||
String get available_plugins => 'Complements disponibles';
|
String get available_plugins => 'Complements disponibles';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configura el teu propi proveïdor de metadades per llistes/reproduccions àlbum/artista/flux';
|
'Configura els teus propis connectors de proveïdor de metadades i de font d\'àudio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblers d’àudio';
|
String get audio_scrobblers => 'Scrobblers d’àudio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Font: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Sense comprimir';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Per als audiòfils. Ofereix fluxos d\'àudio d\'alta qualitat/sense pèrdua. Coincidència precisa de pistes basada en ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -869,10 +869,16 @@ class AppLocalizationsCs extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Obnovit výchozí';
|
String get restore_defaults => 'Obnovit výchozí';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Kodek pro stahování';
|
String get download_music_format => 'Formát stahování hudby';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Kodek pro streamování';
|
String get streaming_music_format => 'Formát streamování hudby';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Kvalita stahování hudby';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Kvalita streamování hudby';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Přihlásit se pomocí Last.fm';
|
String get login_with_lastfm => 'Přihlásit se pomocí Last.fm';
|
||||||
@ -1442,7 +1448,16 @@ class AppLocalizationsCs extends AppLocalizations {
|
|||||||
'Tento plugin scrobbles vaši hudbu pro vytvoření historie poslechů.';
|
'Tento plugin scrobbles vaši hudbu pro vytvoření historie poslechů.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Výchozí';
|
String get default_metadata_source => 'Výchozí zdroj metadat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Nastavit výchozí zdroj metadat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Výchozí zdroj zvuku';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Nastavit výchozí zdroj zvuku';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Nastavit jako výchozí';
|
String get set_default => 'Nastavit jako výchozí';
|
||||||
@ -1505,7 +1520,7 @@ class AppLocalizationsCs extends AppLocalizations {
|
|||||||
'Vstup neodpovídá požadovanému formátu';
|
'Vstup neodpovídá požadovanému formátu';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Pluginy poskytovatelů metadat';
|
String get plugins => 'Pluginy';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1530,12 +1545,22 @@ class AppLocalizationsCs extends AppLocalizations {
|
|||||||
String get available_plugins => 'Dostupné pluginy';
|
String get available_plugins => 'Dostupné pluginy';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Nakonfigurujte si vlastního poskytovatele metadat pro playlist/album/umělec/fid';
|
'Konfigurujte své vlastní pluginy poskytovatele metadat a zdroje zvuku';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Audio scrobblers';
|
String get audio_scrobblers => 'Audio scrobblers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Zdroj: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Nekomprimováno';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Pro audiofily. Poskytuje vysoce kvalitní/bezztrátové zvukové toky. Přesná shoda skladeb na základě ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -879,10 +879,16 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Standardeinstellungen wiederherstellen';
|
String get restore_defaults => 'Standardeinstellungen wiederherstellen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Musik-Codec herunterladen';
|
String get download_music_format => 'Musik-Downloadformat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Streaming-Musik-Codec';
|
String get streaming_music_format => 'Musik-Streamingformat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Musik-Downloadqualität';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Musik-Streamingqualität';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Mit Last.fm anmelden';
|
String get login_with_lastfm => 'Mit Last.fm anmelden';
|
||||||
@ -1455,7 +1461,17 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
'Dieses Plugin scrobbelt Ihre Musik, um Ihre Hörhistorie zu erstellen.';
|
'Dieses Plugin scrobbelt Ihre Musik, um Ihre Hörhistorie zu erstellen.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Standard';
|
String get default_metadata_source => 'Standard-Metadatenquelle';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Standard-Metadatenquelle festlegen';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Standard-Audioquelle';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Standard-Audioquelle festlegen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Als Standard festlegen';
|
String get set_default => 'Als Standard festlegen';
|
||||||
@ -1517,7 +1533,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
'Eingabe entspricht nicht dem geforderten Format';
|
'Eingabe entspricht nicht dem geforderten Format';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Plugins für Metadatenanbieter';
|
String get plugins => 'Plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1542,12 +1558,22 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
String get available_plugins => 'Verfügbare Plugins';
|
String get available_plugins => 'Verfügbare Plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Eigenen Anbieter für Playlist-/Album-/Künstler-/Feed-Metadaten konfigurieren';
|
'Richte deine eigenen Metadatenanbieter- und Audioquellen-Plugins ein';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Audio-Scrobbler';
|
String get audio_scrobblers => 'Audio-Scrobbler';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Quelle: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Unkomprimiert';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Für Audiophile. Bietet hochwertige/verlustfreie Audiostreams. Präzises ISRC-basiertes Track-Matching.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -871,10 +871,16 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Restore defaults';
|
String get restore_defaults => 'Restore defaults';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Download music codec';
|
String get download_music_format => 'Download music format';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Streaming music codec';
|
String get streaming_music_format => 'Streaming music format';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Download music quality';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Streaming music quality';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Login with Last.fm';
|
String get login_with_lastfm => 'Login with Last.fm';
|
||||||
@ -1442,7 +1448,16 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
'This plugin scrobbles your music to generate your listening history.';
|
'This plugin scrobbles your music to generate your listening history.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Default';
|
String get default_metadata_source => 'Default metadata source';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Set default metadata source';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Default audio source';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Set default audio source';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Set default';
|
String get set_default => 'Set default';
|
||||||
@ -1503,7 +1518,7 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
'Input doesn\'t match the required format';
|
'Input doesn\'t match the required format';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Metadata Provider Plugins';
|
String get plugins => 'Plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1528,12 +1543,22 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
String get available_plugins => 'Available plugins';
|
String get available_plugins => 'Available plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configure your own playlist/album/artist/feed metadata provider';
|
'Configure your own metadata provider and audio source plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Audio Scrobblers';
|
String get audio_scrobblers => 'Audio Scrobblers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Source: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Uncompressed';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -876,10 +876,16 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Restaurar valores predeterminados';
|
String get restore_defaults => 'Restaurar valores predeterminados';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Descargar códec de música';
|
String get download_music_format => 'Formato de descarga de música';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Códec de música en streaming';
|
String get streaming_music_format => 'Formato de transmisión de música';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Calidad de descarga de música';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Calidad de transmisión de música';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Iniciar sesión con Last.fm';
|
String get login_with_lastfm => 'Iniciar sesión con Last.fm';
|
||||||
@ -1452,7 +1458,18 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
'Este complemento scrobblea tu música para generar tu historial de reproducción.';
|
'Este complemento scrobblea tu música para generar tu historial de reproducción.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Predeterminado';
|
String get default_metadata_source => 'Fuente de metadatos predeterminada';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Establecer fuente de metadatos predeterminada';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Fuente de audio predeterminada';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source =>
|
||||||
|
'Establecer fuente de audio predeterminada';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Establecer como predeterminado';
|
String get set_default => 'Establecer como predeterminado';
|
||||||
@ -1517,8 +1534,7 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
'La entrada no coincide con el formato requerido';
|
'La entrada no coincide con el formato requerido';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins =>
|
String get plugins => 'Plugins';
|
||||||
'Complementos de proveedor de metadatos';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1543,12 +1559,22 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
String get available_plugins => 'Complementos disponibles';
|
String get available_plugins => 'Complementos disponibles';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configura tu propio proveedor de metadatos para listas/álbum/artista/feeds';
|
'Configura tus propios plugins de proveedor de metadatos y fuente de audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblers de audio';
|
String get audio_scrobblers => 'Scrobblers de audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Fuente: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Sin comprimir';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Para audiófilos. Proporciona transmisiones de audio de alta calidad/sin pérdida. Coincidencia precisa de pistas basada en ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -876,10 +876,16 @@ class AppLocalizationsEu extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Berrezarri berezko balioak';
|
String get restore_defaults => 'Berrezarri berezko balioak';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Deskargatutako musikaren codec-a';
|
String get download_music_format => 'Musika deskargatzeko formatua';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Streaming musikaren codec-a';
|
String get streaming_music_format => 'Musika streaming bidezko formatua';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Musika deskargaren kalitatea';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Streaming bidezko musika kalitatea';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Hasi saioa Last.fm-n';
|
String get login_with_lastfm => 'Hasi saioa Last.fm-n';
|
||||||
@ -1451,7 +1457,17 @@ class AppLocalizationsEu extends AppLocalizations {
|
|||||||
'Plugin honek zure musika scrobbled egiten du zure entzuteen historia sortzeko.';
|
'Plugin honek zure musika scrobbled egiten du zure entzuteen historia sortzeko.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Lehenetsia';
|
String get default_metadata_source => 'Metadatu-iturburu lehenetsia';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Ezarri metadatu-iturburu lehenetsia';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Audio-iturburu lehenetsia';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Ezarri audio-iturburu lehenetsia';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Lehenetsi gisa ezarri';
|
String get set_default => 'Lehenetsi gisa ezarri';
|
||||||
@ -1515,7 +1531,7 @@ class AppLocalizationsEu extends AppLocalizations {
|
|||||||
'Sarrera ezin da beharrezko formatutik desberdina izan';
|
'Sarrera ezin da beharrezko formatutik desberdina izan';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Metadaten hornitzailearen pluginak';
|
String get plugins => 'Pluginak';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1540,12 +1556,22 @@ class AppLocalizationsEu extends AppLocalizations {
|
|||||||
String get available_plugins => 'Eskaintzen diren pluginak';
|
String get available_plugins => 'Eskaintzen diren pluginak';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Konfiguratu zureko playlists-/album-/artista-/feed-metadaten hornitzailea';
|
'Konfiguratu zure metadatu-hornitzaile eta audio-iturburu pluginak';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Audio scrobbler-ak';
|
String get audio_scrobblers => 'Audio scrobbler-ak';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Iturburua: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Konprimitu gabea';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Audiozaleentzat. Kalitate handiko/galerarik gabeko audio-streamak eskaintzen ditu. ISRC oinarritutako pistaren parekatze zehatza.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -870,10 +870,16 @@ class AppLocalizationsFa extends AppLocalizations {
|
|||||||
String get restore_defaults => 'بازیابی پیش فرض ها';
|
String get restore_defaults => 'بازیابی پیش فرض ها';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'دانلود کدک موسیقی';
|
String get download_music_format => 'فرمت دانلود موسیقی';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'کدک موسیقی استریمینگ';
|
String get streaming_music_format => 'فرمت پخش آنلاین موسیقی';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'کیفیت دانلود موسیقی';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'کیفیت پخش آنلاین موسیقی';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'ورود با Last.fm';
|
String get login_with_lastfm => 'ورود با Last.fm';
|
||||||
@ -1441,7 +1447,16 @@ class AppLocalizationsFa extends AppLocalizations {
|
|||||||
'این افزونه موسیقی شما را اسکراب میکند تا تاریخچهٔ شنیداریتان را تولید کند.';
|
'این افزونه موسیقی شما را اسکراب میکند تا تاریخچهٔ شنیداریتان را تولید کند.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'پیشفرض';
|
String get default_metadata_source => 'منبع پیشفرض فراداده';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'تنظیم منبع پیشفرض فراداده';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'منبع پیشفرض صوت';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'تنظیم منبع پیشفرض صوت';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'تنظیم به عنوان پیشفرض';
|
String get set_default => 'تنظیم به عنوان پیشفرض';
|
||||||
@ -1503,7 +1518,7 @@ class AppLocalizationsFa extends AppLocalizations {
|
|||||||
'ورودی با قالب مورد نیاز تطابق ندارد';
|
'ورودی با قالب مورد نیاز تطابق ندارد';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'افزونههای ارائهدهندهٔ متادیتا';
|
String get plugins => 'افزونهها';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1528,12 +1543,22 @@ class AppLocalizationsFa extends AppLocalizations {
|
|||||||
String get available_plugins => 'افزونههای موجود';
|
String get available_plugins => 'افزونههای موجود';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'پیکربندی ارائهدهندهٔ متادیتا برای پلیلیست/آلبوم/هنرمند/فید بهصورت سفارشی';
|
'افزونههای منبع صوت و ارائهدهنده فراداده خود را پیکربندی کنید';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'اسکراببلرهای صوتی';
|
String get audio_scrobblers => 'اسکراببلرهای صوتی';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'اسکراببلینگ';
|
String get scrobbling => 'اسکراببلینگ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'منبع: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'بدون فشردهسازی';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'مخصوص علاقهمندان صدا. ارائهدهنده استریمهای باکیفیت/بدون افت. تطبیق دقیق آهنگ بر اساس ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -872,10 +872,16 @@ class AppLocalizationsFi extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Palauta oletukset';
|
String get restore_defaults => 'Palauta oletukset';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Ladatun musiikin codefc';
|
String get download_music_format => 'Musiikin latausmuoto';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Suoratoistetun musiikin codec';
|
String get streaming_music_format => 'Musiikin suoratoistomuoto';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Musiikin latauslaatu';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Musiikin suoratoistolaadun';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Kirjaudu sisään Last.fm:llä';
|
String get login_with_lastfm => 'Kirjaudu sisään Last.fm:llä';
|
||||||
@ -1443,7 +1449,16 @@ class AppLocalizationsFi extends AppLocalizations {
|
|||||||
'Tämä lisäosa scrobblaa musiikkisi luodakseen kuunteluhistoriasi.';
|
'Tämä lisäosa scrobblaa musiikkisi luodakseen kuunteluhistoriasi.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Oletus';
|
String get default_metadata_source => 'Oletusarvoinen metatietolähde';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Aseta oletusmetatietolähde';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Oletusarvoinen äänilähde';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Aseta oletusäänilähde';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Aseta oletukseksi';
|
String get set_default => 'Aseta oletukseksi';
|
||||||
@ -1503,7 +1518,7 @@ class AppLocalizationsFi extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => 'Syöte ei vastaa vaadittua muotoa';
|
String get input_does_not_match_format => 'Syöte ei vastaa vaadittua muotoa';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Metatietojen tarjoajan lisäosat';
|
String get plugins => 'Laajennukset';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1528,12 +1543,22 @@ class AppLocalizationsFi extends AppLocalizations {
|
|||||||
String get available_plugins => 'Saatavilla olevat lisäosat';
|
String get available_plugins => 'Saatavilla olevat lisäosat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Määritä oma soittolistan/albumin/artistin/syötteen metatietojen tarjoaja';
|
'Määritä omat metatietojen tarjoaja- ja äänilähdelaajennukset';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Äänen scrobblerit';
|
String get audio_scrobblers => 'Äänen scrobblerit';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Lähde: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Pakkaamaton';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Audiofiileille. Tarjoaa korkealaatuisia/häviöttömiä äänivirtoja. Tarkka ISRC-pohjainen kappaleiden tunnistus.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -880,10 +880,16 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Restaurer les valeurs par défaut';
|
String get restore_defaults => 'Restaurer les valeurs par défaut';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Télécharger le codec musical';
|
String get download_music_format => 'Format de téléchargement de musique';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Codec de musique en streaming';
|
String get streaming_music_format => 'Format de streaming de musique';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Qualité de téléchargement de musique';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Qualité de streaming de musique';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Se connecter avec Last.fm';
|
String get login_with_lastfm => 'Se connecter avec Last.fm';
|
||||||
@ -1457,7 +1463,17 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
'Ce plugin scrobble votre musique pour générer votre historique d\'écoute.';
|
'Ce plugin scrobble votre musique pour générer votre historique d\'écoute.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Par défaut';
|
String get default_metadata_source => 'Source de métadonnées par défaut';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Définir la source de métadonnées par défaut';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Source audio par défaut';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Définir la source audio par défaut';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Définir par défaut';
|
String get set_default => 'Définir par défaut';
|
||||||
@ -1521,8 +1537,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
'L\'entrée ne correspond pas au format requis';
|
'L\'entrée ne correspond pas au format requis';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins =>
|
String get plugins => 'Plugins';
|
||||||
'Plugins de fournisseur de métadonnées';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1548,12 +1563,22 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
String get available_plugins => 'Plugins disponibles';
|
String get available_plugins => 'Plugins disponibles';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configurer votre propre fournisseur de métadonnées de playlist/album/artiste/flux';
|
'Configurez vos propres plugins de fournisseur de métadonnées et de source audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblers audio';
|
String get audio_scrobblers => 'Scrobblers audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Source : ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Non compressé';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Pour les audiophiles. Fournit des flux audio de haute qualité/sans perte. Correspondance précise des pistes basée sur ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -872,10 +872,16 @@ class AppLocalizationsHi extends AppLocalizations {
|
|||||||
String get restore_defaults => 'डिफ़ॉल्ट सेटिंग्स को बहाल करें';
|
String get restore_defaults => 'डिफ़ॉल्ट सेटिंग्स को बहाल करें';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'संगीत कोडेक डाउनलोड करें';
|
String get download_music_format => 'संगीत डाउनलोड प्रारूप';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'स्ट्रीमिंग संगीत कोडेक';
|
String get streaming_music_format => 'संगीत स्ट्रीमिंग प्रारूप';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'संगीत डाउनलोड गुणवत्ता';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'संगीत स्ट्रीमिंग गुणवत्ता';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm से लॉगिन करें';
|
String get login_with_lastfm => 'Last.fm से लॉगिन करें';
|
||||||
@ -1448,7 +1454,16 @@ class AppLocalizationsHi extends AppLocalizations {
|
|||||||
'यह प्लगइन आपके सुनने के इतिहास को उत्पन्न करने के लिए आपके संगीत को स्क्रॉबल करता है।';
|
'यह प्लगइन आपके सुनने के इतिहास को उत्पन्न करने के लिए आपके संगीत को स्क्रॉबल करता है।';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'डिफ़ॉल्ट';
|
String get default_metadata_source => 'डिफ़ॉल्ट मेटाडेटा स्रोत';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'डिफ़ॉल्ट मेटाडेटा स्रोत सेट करें';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'डिफ़ॉल्ट ऑडियो स्रोत';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'डिफ़ॉल्ट ऑडियो स्रोत सेट करें';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'डिफ़ॉल्ट सेट करें';
|
String get set_default => 'डिफ़ॉल्ट सेट करें';
|
||||||
@ -1509,7 +1524,7 @@ class AppLocalizationsHi extends AppLocalizations {
|
|||||||
'इनपुट आवश्यक प्रारूप से मेल नहीं खाता है';
|
'इनपुट आवश्यक प्रारूप से मेल नहीं खाता है';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'मेटाडेटा प्रदाता प्लगइन';
|
String get plugins => 'प्लगइन्स';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1534,12 +1549,22 @@ class AppLocalizationsHi extends AppLocalizations {
|
|||||||
String get available_plugins => 'उपलब्ध प्लगइन';
|
String get available_plugins => 'उपलब्ध प्लगइन';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'अपनी खुद की प्लेलिस्ट/एल्बम/कलाकार/फ़ीड मेटाडेटा प्रदाता कॉन्फ़िगर करें';
|
'अपने स्वयं के मेटाडेटा प्रदाता और ऑडियो स्रोत प्लगइन्स कॉन्फ़िगर करें';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'ऑडियो स्क्रॉबलर्स';
|
String get audio_scrobblers => 'ऑडियो स्क्रॉबलर्स';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'स्क्रॉबलिंग';
|
String get scrobbling => 'स्क्रॉबलिंग';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'स्रोत: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'असंपीड़ित';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'ऑडियोफाइलों के लिए। उच्च-गुणवत्ता/बिना हानि वाले ऑडियो स्ट्रीम प्रदान करता है। सटीक ISRC आधारित ट्रैक मिलान।';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -874,10 +874,16 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Kembalikan semula';
|
String get restore_defaults => 'Kembalikan semula';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Unduh codec musik';
|
String get download_music_format => 'Format unduh musik';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Streaming codec musik';
|
String get streaming_music_format => 'Format streaming musik';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Kualitas unduh musik';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Kualitas streaming musik';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Masuk dengan Last.fm';
|
String get login_with_lastfm => 'Masuk dengan Last.fm';
|
||||||
@ -1449,7 +1455,16 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
'Plugin ini scrobble musik Anda untuk menghasilkan riwayat mendengarkan Anda.';
|
'Plugin ini scrobble musik Anda untuk menghasilkan riwayat mendengarkan Anda.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Bawaan';
|
String get default_metadata_source => 'Sumber metadata default';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Atur sumber metadata default';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Sumber audio default';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Atur sumber audio default';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Atur sebagai bawaan';
|
String get set_default => 'Atur sebagai bawaan';
|
||||||
@ -1511,7 +1526,7 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
'Masukan tidak cocok dengan format yang diperlukan';
|
'Masukan tidak cocok dengan format yang diperlukan';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Plugin Penyedia Metadata';
|
String get plugins => 'Plugin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1536,12 +1551,22 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
String get available_plugins => 'Plugin yang tersedia';
|
String get available_plugins => 'Plugin yang tersedia';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Konfigurasi penyedia metadata playlist/album/artis/feed Anda sendiri';
|
'Konfigurasi plugin penyedia metadata dan sumber audio Anda sendiri';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblers Audio';
|
String get audio_scrobblers => 'Scrobblers Audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Sumber: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Tidak terkompresi';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Untuk audiophile. Menyediakan aliran audio berkualitas tinggi/tanpa kehilangan. Pencocokkan trek yang akurat berdasarkan ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -874,10 +874,16 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Ripristina default';
|
String get restore_defaults => 'Ripristina default';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Codec musicale scaricamento';
|
String get download_music_format => 'Formato download musica';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Codec musicale streaming';
|
String get streaming_music_format => 'Formato streaming musica';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Qualità download musica';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Qualità streaming musica';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Accesso a Last.fm';
|
String get login_with_lastfm => 'Accesso a Last.fm';
|
||||||
@ -1448,7 +1454,17 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||||||
'Questo plugin scrobbla la tua musica per generare la tua cronologia di ascolti.';
|
'Questo plugin scrobbla la tua musica per generare la tua cronologia di ascolti.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Predefinito';
|
String get default_metadata_source => 'Fonte metadati predefinita';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Imposta fonte metadati predefinita';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Fonte audio predefinita';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Imposta fonte audio predefinita';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Imposta come predefinito';
|
String get set_default => 'Imposta come predefinito';
|
||||||
@ -1510,7 +1526,7 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||||||
'L\'input non corrisponde al formato richiesto';
|
'L\'input non corrisponde al formato richiesto';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Plugin del provider di metadati';
|
String get plugins => 'Plugin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1535,12 +1551,22 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||||||
String get available_plugins => 'Plugin disponibili';
|
String get available_plugins => 'Plugin disponibili';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configura il tuo provider di metadati per playlist/album/artista/feed';
|
'Configura i tuoi plugin per fornitore metadati e fonte audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobbler audio';
|
String get audio_scrobblers => 'Scrobbler audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Fonte: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Non compresso';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Per audiophile. Fornisce flussi audio di alta qualità/senza perdita. Abbinamento traccia accurato basato su ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -861,10 +861,16 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
String get restore_defaults => '設定を初期化';
|
String get restore_defaults => '設定を初期化';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'ダウンロード用の音声コーデック';
|
String get download_music_format => '音楽ダウンロード形式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'ストリーミング用の音声コーデック';
|
String get streaming_music_format => '音楽ストリーミング形式';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => '音楽ダウンロード品質';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => '音楽ストリーミング品質';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fmでログイン';
|
String get login_with_lastfm => 'Last.fmでログイン';
|
||||||
@ -1416,7 +1422,16 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
String get plugin_scrobbling_info => 'このプラグインは、あなたの音楽をscrobbleして視聴履歴を生成します。';
|
String get plugin_scrobbling_info => 'このプラグインは、あなたの音楽をscrobbleして視聴履歴を生成します。';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'デフォルト';
|
String get default_metadata_source => 'デフォルトメタデータソース';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'デフォルトメタデータソースを設定';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'デフォルトオーディオソース';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'デフォルトオーディオソースを設定';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'デフォルトに設定';
|
String get set_default => 'デフォルトに設定';
|
||||||
@ -1474,7 +1489,7 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => '入力が必須フォーマットと一致しません';
|
String get input_does_not_match_format => '入力が必須フォーマットと一致しません';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'メタデータプロバイダープラグイン';
|
String get plugins => 'プラグイン';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1499,12 +1514,21 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
String get available_plugins => '利用可能なプラグイン';
|
String get available_plugins => '利用可能なプラグイン';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins => '独自のメタデータプロバイダーとオーディオソースプラグインを設定';
|
||||||
'独自のプレイリスト/アルバム/アーティスト/フィードのメタデータプロバイダーを構成';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'オーディオスクロッブラー';
|
String get audio_scrobblers => 'オーディオスクロッブラー';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'ソース: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => '非圧縮';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'オーディオファイル向け。高品質/ロスレスオーディオストリームを提供。正確なISRCベースのトラックマッチング。';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -872,10 +872,16 @@ class AppLocalizationsKa extends AppLocalizations {
|
|||||||
String get restore_defaults => 'ნაგულისხმევი პარამეტრების აღდგენა';
|
String get restore_defaults => 'ნაგულისხმევი პარამეტრების აღდგენა';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'მუსიკის კოდეკის გადმოწერა';
|
String get download_music_format => 'მუსიკის ჩამოტვირთვის ფორმატი';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'სტრიმინგ მუსიკის კოდეკი';
|
String get streaming_music_format => 'სტრიმინგის მუსიკის ფორმატი';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'ჩამოტვირთვის ხარისხი';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'სტრიმინგის ხარისხი';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm-ით შესვლა';
|
String get login_with_lastfm => 'Last.fm-ით შესვლა';
|
||||||
@ -1448,7 +1454,17 @@ class AppLocalizationsKa extends AppLocalizations {
|
|||||||
'ეს პლაგინი აწარმოებს თქვენი მუსიკის სქრობლინგს, რათა შექმნას თქვენი მოსმენის ისტორია.';
|
'ეს პლაგინი აწარმოებს თქვენი მუსიკის სქრობლინგს, რათა შექმნას თქვენი მოსმენის ისტორია.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'ნაგულისხმევი';
|
String get default_metadata_source => 'ნაგულისხმევი მეტამონაცემების წყარო';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'ნაგულისხმევი მეტამონაცემების წყაროს დაყენება';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'ნაგულისხმევი აუდიო წყარო';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'ნაგულისხმევი აუდიო წყაროს დაყენება';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'ნაგულისხმევად დაყენება';
|
String get set_default => 'ნაგულისხმევად დაყენება';
|
||||||
@ -1511,8 +1527,7 @@ class AppLocalizationsKa extends AppLocalizations {
|
|||||||
'შეყვანა არ ემთხვევა საჭირო ფორმატს';
|
'შეყვანა არ ემთხვევა საჭირო ფორმატს';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins =>
|
String get plugins => 'პლაგინები';
|
||||||
'მეტამონაცემების პროვაიდერების პლაგინები';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1537,12 +1552,22 @@ class AppLocalizationsKa extends AppLocalizations {
|
|||||||
String get available_plugins => 'ხელმისაწვდომი პლაგინები';
|
String get available_plugins => 'ხელმისაწვდომი პლაგინები';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'დააყენეთ თქვენი საკუთარი პლეილისტის/ალბომის/არტისტის/ფიდის მეტამონაცემების პროვაიდერი';
|
'თქვენი საკუთარი მეტამონაცემებისა და აუდიო წყაროს პლაგინების კონფიგურაცია';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'აუდიო სქრობლერები';
|
String get audio_scrobblers => 'აუდიო სქრობლერები';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'სქრობლინგი';
|
String get scrobbling => 'სქრობლინგი';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'წყარო: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'შეუკუმშავი';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'აუდიოფილებისთვის. უზრუნველყოფს მაღალი ხარისხის/უკომპრესო აუდიო სტრიმებს. ზუსტი შესაბამისობა ISRC-ის მიხედვით.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -862,10 +862,16 @@ class AppLocalizationsKo extends AppLocalizations {
|
|||||||
String get restore_defaults => '기본값으로 복원';
|
String get restore_defaults => '기본값으로 복원';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => '다운로드 음악 코덱';
|
String get download_music_format => '다운로드 음악 포맷';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => '스트리밍 음악 코덱';
|
String get streaming_music_format => '스트리밍 음악 포맷';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => '다운로드 음질';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => '스트리밍 음질';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm에 로그인';
|
String get login_with_lastfm => 'Last.fm에 로그인';
|
||||||
@ -1421,7 +1427,16 @@ class AppLocalizationsKo extends AppLocalizations {
|
|||||||
String get plugin_scrobbling_info => '이 플러그인은 음악을 스크로블하여 청취 기록을 생성합니다.';
|
String get plugin_scrobbling_info => '이 플러그인은 음악을 스크로블하여 청취 기록을 생성합니다.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => '기본';
|
String get default_metadata_source => '기본 메타데이터 소스';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => '기본 메타데이터 소스 설정';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => '기본 오디오 소스';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => '기본 오디오 소스 설정';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => '기본값으로 설정';
|
String get set_default => '기본값으로 설정';
|
||||||
@ -1479,7 +1494,7 @@ class AppLocalizationsKo extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => '입력이 필요한 형식과 일치하지 않습니다';
|
String get input_does_not_match_format => '입력이 필요한 형식과 일치하지 않습니다';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => '메타데이터 제공자 플러그인';
|
String get plugins => '플러그인';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1503,12 +1518,21 @@ class AppLocalizationsKo extends AppLocalizations {
|
|||||||
String get available_plugins => '사용 가능한 플러그인';
|
String get available_plugins => '사용 가능한 플러그인';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins => '직접 메타데이터 제공자와 오디오 소스 플러그인을 구성하세요';
|
||||||
'자신만의 플레이리스트/앨범/아티스트/피드 메타데이터 제공자 구성';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => '오디오 스크로블러';
|
String get audio_scrobblers => '오디오 스크로블러';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => '스크로블링';
|
String get scrobbling => '스크로블링';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => '출처: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => '비압축';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'오디오파일을 위한 소스입니다. 고음질/무손실 오디오 스트림을 제공하며 ISRC 기반으로 정확한 트랙 매칭을 지원합니다.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -880,10 +880,16 @@ class AppLocalizationsNe extends AppLocalizations {
|
|||||||
String get restore_defaults => 'पूर्वनिर्धारितहरू पुनः स्थापित गर्नुहोस्';
|
String get restore_defaults => 'पूर्वनिर्धारितहरू पुनः स्थापित गर्नुहोस्';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'साङ्गीत कोडेक डाउनलोड गर्नुहोस्';
|
String get download_music_format => 'सङ्गीत डाउनलोड ढाँचा';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'स्ट्रिमिङ साङ्गीत कोडेक';
|
String get streaming_music_format => 'स्ट्रिमिङ सङ्गीत ढाँचा';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'डाउनलोड गुणस्तर';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'स्ट्रिमिङ गुणस्तर';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'लास्ट.एफ.एम सँग लगइन गर्नुहोस्';
|
String get login_with_lastfm => 'लास्ट.एफ.एम सँग लगइन गर्नुहोस्';
|
||||||
@ -1454,7 +1460,18 @@ class AppLocalizationsNe extends AppLocalizations {
|
|||||||
'यो प्लगइनले तपाईंको सुन्ने इतिहास उत्पन्न गर्न तपाईंको संगीतलाई स्क्रब्बल गर्दछ।';
|
'यो प्लगइनले तपाईंको सुन्ने इतिहास उत्पन्न गर्न तपाईंको संगीतलाई स्क्रब्बल गर्दछ।';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'पूर्वनिर्धारित';
|
String get default_metadata_source => 'पूर्वनिर्धारित मेटाडाटा स्रोत';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'पूर्वनिर्धारित मेटाडाटा स्रोत सेट गर्नुहोस्';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'पूर्वनिर्धारित अडियो स्रोत';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source =>
|
||||||
|
'पूर्वनिर्धारित अडियो स्रोत सेट गर्नुहोस्';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'पूर्वनिर्धारित सेट गर्नुहोस्';
|
String get set_default => 'पूर्वनिर्धारित सेट गर्नुहोस्';
|
||||||
@ -1515,7 +1532,7 @@ class AppLocalizationsNe extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => 'इनपुट आवश्यक ढाँचासँग मेल खाँदैन';
|
String get input_does_not_match_format => 'इनपुट आवश्यक ढाँचासँग मेल खाँदैन';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'मेटाडेटा प्रदायक प्लगइनहरू';
|
String get plugins => 'प्लगइनहरू';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1540,12 +1557,22 @@ class AppLocalizationsNe extends AppLocalizations {
|
|||||||
String get available_plugins => 'उपलब्ध प्लगइनहरू';
|
String get available_plugins => 'उपलब्ध प्लगइनहरू';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'तपाईंको आफ्नै प्लेलिस्ट/एल्बम/कलाकार/फिड मेटाडेटा प्रदायक कन्फिगर गर्नुहोस्';
|
'आफ्नै मेटाडाटा प्रदायक र अडियो स्रोत प्लगइनहरू कन्फिगर गर्नुहोस्';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'अडियो स्क्रब्बलरहरू';
|
String get audio_scrobblers => 'अडियो स्क्रब्बलरहरू';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'स्क्रब्बलिंग';
|
String get scrobbling => 'स्क्रब्बलिंग';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'स्रोत: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'असंक्षिप्त';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'अडियोप्रेमीहरूका लागि। उच्च गुणस्तर/लसलेस अडियो स्ट्रिमहरू उपलब्ध गराउँछ। ISRC-मा आधारित सटीक ट्र्याक मिलान।';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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é';
|
||||||
@ -872,10 +872,16 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Standaardwaarden herstellen';
|
String get restore_defaults => 'Standaardwaarden herstellen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Download-codec';
|
String get download_music_format => 'Download muziekformaat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Streaming-codec';
|
String get streaming_music_format => 'Streaming muziekformaat';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Downloadkwaliteit';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Streamingkwaliteit';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Inloggen met Last.fm';
|
String get login_with_lastfm => 'Inloggen met Last.fm';
|
||||||
@ -1446,7 +1452,16 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
'Deze plugin scrobblet uw muziek om uw luistergeschiedenis te genereren.';
|
'Deze plugin scrobblet uw muziek om uw luistergeschiedenis te genereren.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Standaard';
|
String get default_metadata_source => 'Standaard metadata-bron';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Standaard metadata-bron instellen';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Standaard audiobron';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Standaard audiobron instellen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Instellen als standaard';
|
String get set_default => 'Instellen als standaard';
|
||||||
@ -1509,7 +1524,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
'Invoer komt niet overeen met het vereiste formaat';
|
'Invoer komt niet overeen met het vereiste formaat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Metadata-aanbieder Plugins';
|
String get plugins => 'Plug-ins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1534,12 +1549,22 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
String get available_plugins => 'Beschikbare plugins';
|
String get available_plugins => 'Beschikbare plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configureer uw eigen metadata-aanbieder voor afspeellijst/album/artiest/feed';
|
'Configureer je eigen metadata- en audiobron-plug-ins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Audioscrobblers';
|
String get audio_scrobblers => 'Audioscrobblers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Bron: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Ongecomprimeerd';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Voor audiofielen. Biedt hoge kwaliteit/lossless audiostreams. Nauwkeurige trackmatching op basis van ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -873,10 +873,16 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Przywróć domyślne';
|
String get restore_defaults => 'Przywróć domyślne';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Pobierz kodek muzyczny';
|
String get download_music_format => 'Format pobierania muzyki';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Kodek strumieniowy muzyki';
|
String get streaming_music_format => 'Format strumieniowania muzyki';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Jakość pobierania';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Jakość strumieniowania';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Zaloguj się z Last.fm';
|
String get login_with_lastfm => 'Zaloguj się z Last.fm';
|
||||||
@ -1449,7 +1455,16 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||||||
'Ta wtyczka scrobbluje Twoją muzykę, aby wygenerować historię odsłuchań.';
|
'Ta wtyczka scrobbluje Twoją muzykę, aby wygenerować historię odsłuchań.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Domyślna';
|
String get default_metadata_source => 'Domyślne źródło metadanych';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Ustaw domyślne źródło metadanych';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Domyślne źródło audio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Ustaw domyślne źródło audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Ustaw jako domyślną';
|
String get set_default => 'Ustaw jako domyślną';
|
||||||
@ -1511,7 +1526,7 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||||||
'Wprowadzony tekst nie pasuje do wymaganego formatu';
|
'Wprowadzony tekst nie pasuje do wymaganego formatu';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Wtyczki dostawców metadanych';
|
String get plugins => 'Wtyczki';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1536,12 +1551,22 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||||||
String get available_plugins => 'Dostępne wtyczki';
|
String get available_plugins => 'Dostępne wtyczki';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Skonfiguruj własnego dostawcę metadanych dla playlisty/albumu/artysty/kanału';
|
'Skonfiguruj własne wtyczki dostawców metadanych i źródeł audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblery audio';
|
String get audio_scrobblers => 'Scrobblery audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Źródło: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Nieskompresowany';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Dla audiofilów. Oferuje strumienie audio wysokiej jakości/lossless. Precyzyjne dopasowanie utworów na podstawie ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -873,10 +873,16 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Restaurar padrões';
|
String get restore_defaults => 'Restaurar padrões';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Descarregar codec de música';
|
String get download_music_format => 'Formato de download de música';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Codec de streaming de música';
|
String get streaming_music_format => 'Formato de streaming de música';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Qualidade de download';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Qualidade de streaming';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Iniciar sessão com o Last.fm';
|
String get login_with_lastfm => 'Iniciar sessão com o Last.fm';
|
||||||
@ -1446,7 +1452,16 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
'Este plugin faz o scrobbling de sua música para gerar seu histórico de audição.';
|
'Este plugin faz o scrobbling de sua música para gerar seu histórico de audição.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Padrão';
|
String get default_metadata_source => 'Fonte padrão de metadados';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Definir fonte padrão de metadados';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Fonte de áudio padrão';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Definir fonte de áudio padrão';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Definir como padrão';
|
String get set_default => 'Definir como padrão';
|
||||||
@ -1508,7 +1523,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
'A entrada não corresponde ao formato exigido';
|
'A entrada não corresponde ao formato exigido';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Plugins do provedor de metadados';
|
String get plugins => 'Plugins';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1533,12 +1548,22 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
String get available_plugins => 'Plugins disponíveis';
|
String get available_plugins => 'Plugins disponíveis';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Configure seu próprio provedor de metadados de playlist/álbum/artista/feed';
|
'Configure seus próprios plugins de provedores de metadados e fontes de áudio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Scrobblers de áudio';
|
String get audio_scrobblers => 'Scrobblers de áudio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Fonte: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Não comprimido';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Para audiófilos. Fornece streams de áudio de alta qualidade/sem perdas. Correspondência precisa de faixas baseada em ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -874,10 +874,16 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Восстановить настройки по умолчанию';
|
String get restore_defaults => 'Восстановить настройки по умолчанию';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Загрузить кодек для музыки';
|
String get download_music_format => 'Формат загрузки музыки';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Кодек потоковой передачи музыки';
|
String get streaming_music_format => 'Формат потоковой музыки';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Качество загрузки';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Качество стриминга';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Войти с помощью Last.fm';
|
String get login_with_lastfm => 'Войти с помощью Last.fm';
|
||||||
@ -1448,7 +1454,17 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
'Этот плагин скробблит вашу музыку для создания вашей истории прослушиваний.';
|
'Этот плагин скробблит вашу музыку для создания вашей истории прослушиваний.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'По умолчанию';
|
String get default_metadata_source => 'Источник метаданных по умолчанию';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Задать источник метаданных по умолчанию';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Источник аудио по умолчанию';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Задать источник аудио по умолчанию';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Установить по умолчанию';
|
String get set_default => 'Установить по умолчанию';
|
||||||
@ -1511,7 +1527,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
'Введенные данные не соответствуют требуемому формату';
|
'Введенные данные не соответствуют требуемому формату';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Плагины поставщика метаданных';
|
String get plugins => 'Плагины';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1536,12 +1552,22 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
String get available_plugins => 'Доступные плагины';
|
String get available_plugins => 'Доступные плагины';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Настройте свой собственный поставщик метаданных для плейлиста/альбома/артиста/ленты';
|
'Настройте собственные плагины провайдеров метаданных и источников аудио';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Аудио скробблеры';
|
String get audio_scrobblers => 'Аудио скробблеры';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Скробблинг';
|
String get scrobbling => 'Скробблинг';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Источник: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Несжатый';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Для аудиофилов. Предоставляет высококачественные/lossless аудиопотоки. Точное совпадение треков по ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -879,10 +879,16 @@ class AppLocalizationsTa extends AppLocalizations {
|
|||||||
String get restore_defaults => 'இயல்புநிலைகளை மீட்டமை';
|
String get restore_defaults => 'இயல்புநிலைகளை மீட்டமை';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'இசை கோடெக்கை பதிவிறக்கு';
|
String get download_music_format => 'இசை பதிவிறக்க வடிவம்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'இசை கோடெக்கை ஸ்ட்ரீம் செய்';
|
String get streaming_music_format => 'இசை ஸ்ட்ரீமிங் வடிவம்';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'பதிவிறக்க தரம்';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'ஸ்ட்ரீமிங் தரம்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm உடன் உள்நுழைக';
|
String get login_with_lastfm => 'Last.fm உடன் உள்நுழைக';
|
||||||
@ -1455,7 +1461,17 @@ class AppLocalizationsTa extends AppLocalizations {
|
|||||||
'இந்த பிளகின் உங்கள் கேட்பதின் வரலாற்றை உருவாக்க உங்கள் இசையை ஸ்க்ரோப்ள் செய்கிறது.';
|
'இந்த பிளகின் உங்கள் கேட்பதின் வரலாற்றை உருவாக்க உங்கள் இசையை ஸ்க்ரோப்ள் செய்கிறது.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'இயல்புநிலை';
|
String get default_metadata_source => 'இயல்புநிலை மெட்டாடேட்டா மூலம்';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'இயல்புநிலை மெட்டாடேட்டா மூலத்தை அமை';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'இயல்புநிலை ஆடியோ மூலம்';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'இயல்புநிலை ஆடியோ மூலத்தை அமை';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'இயல்புநிலையாக அமைக்கவும்';
|
String get set_default => 'இயல்புநிலையாக அமைக்கவும்';
|
||||||
@ -1517,7 +1533,7 @@ class AppLocalizationsTa extends AppLocalizations {
|
|||||||
'உள்ளீடு தேவையான வடிவத்துடன் பொருந்தவில்லை';
|
'உள்ளீடு தேவையான வடிவத்துடன் பொருந்தவில்லை';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'மெட்டாடேட்டா வழங்குநர் பிளகின்கள்';
|
String get plugins => 'செருகுநிரல்கள்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1542,12 +1558,22 @@ class AppLocalizationsTa extends AppLocalizations {
|
|||||||
String get available_plugins => 'கிடைக்கக்கூடிய பிளகின்கள்';
|
String get available_plugins => 'கிடைக்கக்கூடிய பிளகின்கள்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'உங்கள் சொந்த பிளேலிஸ்ட்/ஆல்பம்/கலைஞர்/ஊட்ட மெட்டாடேட்டா வழங்குநரை உள்ளமைக்கவும்';
|
'உங்கள் சொந்த மெட்டாடேட்டா வழங்குநர் மற்றும் ஆடியோ மூல செருகுநிரல்களை அமைக்கவும்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'ஆடியோ ஸ்க்ரோப்ளர்கள்';
|
String get audio_scrobblers => 'ஆடியோ ஸ்க்ரோப்ளர்கள்';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'ஸ்க்ரோப்ளிங்';
|
String get scrobbling => 'ஸ்க்ரோப்ளிங்';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'மூலம்: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'அழுத்தப்படாத';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'ஆடியோஃபைல்களுக்காக. உயர்தர/லாஸ்லெஸ் ஆடியோ ஸ்ட்ரீம்களை வழங்குகிறது. ISRC அடிப்படையில் துல்லியமான பாடல் பொருத்தம்.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -872,10 +872,16 @@ class AppLocalizationsTh extends AppLocalizations {
|
|||||||
String get restore_defaults => 'คืนค่าเริ่มต้น';
|
String get restore_defaults => 'คืนค่าเริ่มต้น';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'ดาวน์โหลดโคเดคเพลง';
|
String get download_music_format => 'รูปแบบการดาวน์โหลดเพลง';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'สตรีมมิ่งโคเดคเพลง';
|
String get streaming_music_format => 'รูปแบบการสตรีมเพลง';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'คุณภาพการดาวน์โหลด';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'คุณภาพการสตรีม';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'เข้าสู่ระบบด้วย Last.fm';
|
String get login_with_lastfm => 'เข้าสู่ระบบด้วย Last.fm';
|
||||||
@ -1440,7 +1446,16 @@ class AppLocalizationsTh extends AppLocalizations {
|
|||||||
'ปลั๊กอินนี้จะ scrobble เพลงของคุณเพื่อสร้างประวัติการฟังของคุณ';
|
'ปลั๊กอินนี้จะ scrobble เพลงของคุณเพื่อสร้างประวัติการฟังของคุณ';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'ค่าเริ่มต้น';
|
String get default_metadata_source => 'แหล่งเมตาดาต้าพื้นฐาน';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'ตั้งค่าแหล่งเมตาดาต้าพื้นฐาน';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'แหล่งเสียงพื้นฐาน';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'ตั้งค่าแหล่งเสียงพื้นฐาน';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'ตั้งค่าเริ่มต้น';
|
String get set_default => 'ตั้งค่าเริ่มต้น';
|
||||||
@ -1500,7 +1515,7 @@ class AppLocalizationsTh extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => 'อินพุตไม่ตรงกับรูปแบบที่ต้องการ';
|
String get input_does_not_match_format => 'อินพุตไม่ตรงกับรูปแบบที่ต้องการ';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'ปลั๊กอินผู้ให้บริการเมตาดาต้า';
|
String get plugins => 'ปลั๊กอิน';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1525,12 +1540,22 @@ class AppLocalizationsTh extends AppLocalizations {
|
|||||||
String get available_plugins => 'ปลั๊กอินที่มีอยู่';
|
String get available_plugins => 'ปลั๊กอินที่มีอยู่';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'กำหนดค่าผู้ให้บริการเมตาดาต้าเพลย์ลิสต์/อัลบั้ม/ศิลปิน/ฟีดของคุณเอง';
|
'กำหนดค่าปลั๊กอินผู้ให้บริการเมตาดาต้าและแหล่งเสียงของคุณเอง';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'เครื่อง scrobbler เสียง';
|
String get audio_scrobblers => 'เครื่อง scrobbler เสียง';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'แหล่งที่มา: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'ไม่บีบอัด';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'สำหรับคนรักเสียงเพลง ให้สตรีมเสียงคุณภาพสูง/ไร้การสูญเสียการบีบอัด การจับคู่แทร็กแม่นยำตาม ISRC';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -878,10 +878,16 @@ class AppLocalizationsTl extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Ibalik ang mga default';
|
String get restore_defaults => 'Ibalik ang mga default';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Codec para sa pag-download ng musika';
|
String get download_music_format => 'I-download na format ng musika';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Codec para sa pag-stream ng musika';
|
String get streaming_music_format => 'Format ng streaming ng musika';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Kalidad ng i-download na musika';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Kalidad ng streaming ng musika';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Mag-login gamit ang Last.fm';
|
String get login_with_lastfm => 'Mag-login gamit ang Last.fm';
|
||||||
@ -1456,7 +1462,18 @@ class AppLocalizationsTl extends AppLocalizations {
|
|||||||
'Sinis-scrobble ng plugin na ito ang iyong musika upang mabuo ang iyong kasaysayan ng pakikinig.';
|
'Sinis-scrobble ng plugin na ito ang iyong musika upang mabuo ang iyong kasaysayan ng pakikinig.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Default';
|
String get default_metadata_source => 'Default na pinagmulan ng metadata';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Itakda ang default na pinagmulan ng metadata';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Default na pinagmulan ng audio';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source =>
|
||||||
|
'Itakda ang default na pinagmulan ng audio';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Itakda bilang default';
|
String get set_default => 'Itakda bilang default';
|
||||||
@ -1518,7 +1535,7 @@ class AppLocalizationsTl extends AppLocalizations {
|
|||||||
'Ang input ay hindi tumutugma sa kinakailangang format';
|
'Ang input ay hindi tumutugma sa kinakailangang format';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Mga Plugin ng Metadata Provider';
|
String get plugins => 'Mga plugin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1543,12 +1560,22 @@ class AppLocalizationsTl extends AppLocalizations {
|
|||||||
String get available_plugins => 'Mga available na plugin';
|
String get available_plugins => 'Mga available na plugin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'I-configure ang iyong sariling playlist/album/artist/feed metadata provider';
|
'I-configure ang sarili mong metadata provider at mga audio source plugin';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Mga Audio Scrobbler';
|
String get audio_scrobblers => 'Mga Audio Scrobbler';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Pinagmulan: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Hindi naka-compress';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Para sa mga audiophile. Nagbibigay ng de-kalidad/walang loss na audio streams. Tumpak na pagtutugma ng track batay sa ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -875,10 +875,16 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Varsayılanları geri yükle';
|
String get restore_defaults => 'Varsayılanları geri yükle';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Müzik codec bileşenini indir';
|
String get download_music_format => 'Müzik indirme formatı';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Müzik codec\'i akışı';
|
String get streaming_music_format => 'Müzik akış formatı';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'İndirilen müzik kalitesi';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Yayınlanan müzik kalitesi';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Last.fm ile giriş yap';
|
String get login_with_lastfm => 'Last.fm ile giriş yap';
|
||||||
@ -1450,7 +1456,17 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
'Bu eklenti, dinleme geçmişinizi oluşturmak için müziğinizi scrobble eder.';
|
'Bu eklenti, dinleme geçmişinizi oluşturmak için müziğinizi scrobble eder.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Varsayılan';
|
String get default_metadata_source => 'Varsayılan meta veri kaynağı';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Varsayılan meta veri kaynağını ayarla';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Varsayılan ses kaynağı';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Varsayılan ses kaynağını ayarla';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Varsayılan olarak ayarla';
|
String get set_default => 'Varsayılan olarak ayarla';
|
||||||
@ -1511,7 +1527,7 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => 'Girdi, gerekli biçimle eşleşmiyor';
|
String get input_does_not_match_format => 'Girdi, gerekli biçimle eşleşmiyor';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Meta Veri Sağlayıcısı Eklentileri';
|
String get plugins => 'Eklentiler';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1536,12 +1552,22 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
String get available_plugins => 'Mevcut eklentiler';
|
String get available_plugins => 'Mevcut eklentiler';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Kendi çalma listenizi/albümünüzü/sanatçınızı/akış meta veri sağlayıcınızı yapılandırın';
|
'Kendi meta veri sağlayıcı ve ses kaynağı eklentilerinizi yapılandırın';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Ses Scrobbler\'lar';
|
String get audio_scrobblers => 'Ses Scrobbler\'lar';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Kaynak: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Sıkıştırılmamış';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Audiophile\'ler için. Yüksek kaliteli/kayıpsız ses akışları sağlar. Doğru ISRC tabanlı parça eşleştirme.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -875,10 +875,16 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Відновити налаштування за замовчуванням';
|
String get restore_defaults => 'Відновити налаштування за замовчуванням';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Завантажити кодек для музики';
|
String get download_music_format => 'Формат завантаження музики';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Кодек потокової передачі музики';
|
String get streaming_music_format => 'Формат потокової музики';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Якість завантаженої музики';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Якість потокової музики';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Увійти з Last.fm';
|
String get login_with_lastfm => 'Увійти з Last.fm';
|
||||||
@ -1446,7 +1452,18 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
'Цей плагін скроббить вашу музику, щоб створити вашу історію прослуховувань.';
|
'Цей плагін скроббить вашу музику, щоб створити вашу історію прослуховувань.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'За замовчуванням';
|
String get default_metadata_source => 'Джерело метаданих за замовчуванням';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source =>
|
||||||
|
'Встановити джерело метаданих за замовчуванням';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Джерело аудіо за замовчуванням';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source =>
|
||||||
|
'Встановити джерело аудіо за замовчуванням';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Встановити за замовчуванням';
|
String get set_default => 'Встановити за замовчуванням';
|
||||||
@ -1507,7 +1524,7 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
'Введені дані не відповідають необхідному формату';
|
'Введені дані не відповідають необхідному формату';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Плагіни провайдера метаданих';
|
String get plugins => 'Плагіни';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1532,12 +1549,22 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
String get available_plugins => 'Доступні плагіни';
|
String get available_plugins => 'Доступні плагіни';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Налаштуйте свій власний провайдер метаданих для плейлиста/альбому/виконавця/стрічки';
|
'Налаштуйте власні плагіни метаданих і аудіоджерела';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Аудіо скробблери';
|
String get audio_scrobblers => 'Аудіо скробблери';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Скроблінг';
|
String get scrobbling => 'Скроблінг';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Джерело: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Без стиснення';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Для аудіофілів. Забезпечує високоякісні/без втрат аудіопотоки. Точна відповідність треків на основі ISRC.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -875,10 +875,16 @@ class AppLocalizationsVi extends AppLocalizations {
|
|||||||
String get restore_defaults => 'Khôi phục mặc định';
|
String get restore_defaults => 'Khôi phục mặc định';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => 'Định dạng tải xuống';
|
String get download_music_format => 'Định dạng nhạc tải về';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => 'Định dạng nghe';
|
String get streaming_music_format => 'Định dạng nhạc phát trực tuyến';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => 'Chất lượng nhạc tải về';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => 'Chất lượng nhạc phát trực tuyến';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => 'Đăng nhập bằng tài khoản Last.fm';
|
String get login_with_lastfm => 'Đăng nhập bằng tài khoản Last.fm';
|
||||||
@ -1450,7 +1456,16 @@ class AppLocalizationsVi extends AppLocalizations {
|
|||||||
'Plugin này scrobble nhạc của bạn để tạo lịch sử nghe của bạn.';
|
'Plugin này scrobble nhạc của bạn để tạo lịch sử nghe của bạn.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => 'Mặc định';
|
String get default_metadata_source => 'Nguồn siêu dữ liệu mặc định';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => 'Đặt nguồn siêu dữ liệu mặc định';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => 'Nguồn âm thanh mặc định';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => 'Đặt nguồn âm thanh mặc định';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => 'Đặt làm mặc định';
|
String get set_default => 'Đặt làm mặc định';
|
||||||
@ -1513,7 +1528,7 @@ class AppLocalizationsVi extends AppLocalizations {
|
|||||||
'Đầu vào không khớp với định dạng yêu cầu';
|
'Đầu vào không khớp với định dạng yêu cầu';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => 'Plugin Nhà cung cấp siêu dữ liệu';
|
String get plugins => 'Tiện ích bổ sung';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1538,12 +1553,22 @@ class AppLocalizationsVi extends AppLocalizations {
|
|||||||
String get available_plugins => 'Các plugin có sẵn';
|
String get available_plugins => 'Các plugin có sẵn';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin =>
|
String get configure_plugins =>
|
||||||
'Cấu hình nhà cung cấp siêu dữ liệu danh sách phát/album/nghệ sĩ/nguồn cấp dữ liệu của riêng bạn';
|
'Cấu hình nhà cung cấp siêu dữ liệu và tiện ích nguồn âm thanh riêng';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => 'Bộ scrobbler âm thanh';
|
String get audio_scrobblers => 'Bộ scrobbler âm thanh';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => 'Nguồn: ';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => 'Không nén';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'Dành cho người yêu âm nhạc chất lượng cao. Cung cấp luồng âm thanh chất lượng cao/không nén. Phù hợp bài hát dựa trên ISRC chính xác.';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -859,10 +859,16 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
String get restore_defaults => '恢复默认值';
|
String get restore_defaults => '恢复默认值';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => '下载音乐编解码器';
|
String get download_music_format => '下载音乐格式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => '流媒体音乐编解码器';
|
String get streaming_music_format => '流媒体音乐格式';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => '下载音乐质量';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => '流媒体音乐质量';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => '使用 Last.fm 登录';
|
String get login_with_lastfm => '使用 Last.fm 登录';
|
||||||
@ -1412,7 +1418,16 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
String get plugin_scrobbling_info => '此插件会 scrobble 您的音乐以生成您的收听历史记录。';
|
String get plugin_scrobbling_info => '此插件会 scrobble 您的音乐以生成您的收听历史记录。';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => '默认';
|
String get default_metadata_source => '默认元数据源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => '设置默认元数据源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => '默认音频源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => '设置默认音频源';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => '设为默认';
|
String get set_default => '设为默认';
|
||||||
@ -1469,7 +1484,7 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
String get input_does_not_match_format => '输入与所需格式不匹配';
|
String get input_does_not_match_format => '输入与所需格式不匹配';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => '元数据提供者插件';
|
String get plugins => '插件';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -1493,13 +1508,23 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
String get available_plugins => '可用插件';
|
String get available_plugins => '可用插件';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin => '配置您自己的播放列表/专辑/艺人/订阅元数据提供者';
|
String get configure_plugins => '配置您自己的元数据提供者和音频源插件';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => '音频 Scrobblers';
|
String get audio_scrobblers => '音频 Scrobblers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => '来源:';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => '无损';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'适合发烧友。提供高质量/无损音频流。基于 ISRC 的精确曲目匹配。';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The translations for Chinese, as used in Taiwan (`zh_TW`).
|
/// The translations for Chinese, as used in Taiwan (`zh_TW`).
|
||||||
@ -2357,10 +2382,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
String get restore_defaults => '恢復預設值';
|
String get restore_defaults => '恢復預設值';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get download_music_codec => '下載音樂編解碼器';
|
String get download_music_format => '下載音樂格式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get streaming_music_codec => '串流音樂編解碼器';
|
String get streaming_music_format => '串流音樂格式';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get download_music_quality => '下載音樂品質';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get streaming_music_quality => '串流音樂品質';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get login_with_lastfm => '使用 Last.fm 登入';
|
String get login_with_lastfm => '使用 Last.fm 登入';
|
||||||
@ -2910,7 +2941,16 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
String get plugin_scrobbling_info => '此外掛程式會 Scrobble 您的音樂以產生您的收聽記錄。';
|
String get plugin_scrobbling_info => '此外掛程式會 Scrobble 您的音樂以產生您的收聽記錄。';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get default_plugin => '預設';
|
String get default_metadata_source => '預設中繼資料來源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_metadata_source => '設定預設中繼資料來源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get default_audio_source => '預設音訊來源';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get set_default_audio_source => '設定預設音訊來源';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get set_default => '設為預設';
|
String get set_default => '設為預設';
|
||||||
@ -2967,7 +3007,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
String get input_does_not_match_format => '輸入不符合所需格式';
|
String get input_does_not_match_format => '輸入不符合所需格式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get metadata_provider_plugins => '中繼資料供應商外掛程式';
|
String get plugins => '外掛程式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get paste_plugin_download_url =>
|
String get paste_plugin_download_url =>
|
||||||
@ -2991,11 +3031,21 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
String get available_plugins => '可用的外掛程式';
|
String get available_plugins => '可用的外掛程式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get configure_your_own_metadata_plugin => '設定您自己的播放清單/專輯/藝人/動態中繼資料供應商';
|
String get configure_plugins => '配置您自己的中繼資料提供者和音訊來源外掛程式';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get audio_scrobblers => '音訊 Scrobblers';
|
String get audio_scrobblers => '音訊 Scrobblers';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get scrobbling => 'Scrobbling';
|
String get scrobbling => 'Scrobbling';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get source => '來源:';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get uncompressed => '未壓縮';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get dab_music_source_description =>
|
||||||
|
'適合音響發燒友。提供高品質/無損音訊串流。精確的 ISRC 曲目比對。';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,6 +83,8 @@ Future<void> main(List<String> rawArgs) async {
|
|||||||
// force High Refresh Rate on some Android devices (like One Plus)
|
// force High Refresh Rate on some Android devices (like One Plus)
|
||||||
if (kIsAndroid) {
|
if (kIsAndroid) {
|
||||||
await FlutterDisplayMode.setHighRefreshRate();
|
await FlutterDisplayMode.setHighRefreshRate();
|
||||||
|
}
|
||||||
|
if (kIsAndroid || kIsDesktop) {
|
||||||
await NewPipeExtractor.init();
|
await NewPipeExtractor.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,11 +152,13 @@ class Spotube extends HookConsumerWidget {
|
|||||||
ref.listen(audioPlayerStreamListenersProvider, (_, __) {});
|
ref.listen(audioPlayerStreamListenersProvider, (_, __) {});
|
||||||
ref.listen(bonsoirProvider, (_, __) {});
|
ref.listen(bonsoirProvider, (_, __) {});
|
||||||
ref.listen(connectClientsProvider, (_, __) {});
|
ref.listen(connectClientsProvider, (_, __) {});
|
||||||
ref.listen(metadataPluginsProvider, (_, __) {});
|
|
||||||
ref.listen(metadataPluginProvider, (_, __) {});
|
|
||||||
ref.listen(serverProvider, (_, __) {});
|
ref.listen(serverProvider, (_, __) {});
|
||||||
ref.listen(trayManagerProvider, (_, __) {});
|
ref.listen(trayManagerProvider, (_, __) {});
|
||||||
|
ref.listen(metadataPluginsProvider, (_, __) {});
|
||||||
|
ref.listen(metadataPluginProvider, (_, __) {});
|
||||||
|
ref.listen(audioSourcePluginProvider, (_, __) {});
|
||||||
ref.listen(metadataPluginUpdateCheckerProvider, (_, __) {});
|
ref.listen(metadataPluginUpdateCheckerProvider, (_, __) {});
|
||||||
|
ref.listen(audioSourcePluginUpdateCheckerProvider, (_, __) {});
|
||||||
|
|
||||||
useFixWindowStretching();
|
useFixWindowStretching();
|
||||||
useDisableBatteryOptimizations();
|
useDisableBatteryOptimizations();
|
||||||
|
|||||||
@ -112,8 +112,13 @@ mixin _$WebSocketLoadEventData {
|
|||||||
required TResult orElse(),
|
required TResult orElse(),
|
||||||
}) =>
|
}) =>
|
||||||
throw _privateConstructorUsedError;
|
throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Serializes this WebSocketLoadEventData to a JSON map.
|
||||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||||
@JsonKey(ignore: true)
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
$WebSocketLoadEventDataCopyWith<WebSocketLoadEventData> get copyWith =>
|
$WebSocketLoadEventDataCopyWith<WebSocketLoadEventData> get copyWith =>
|
||||||
throw _privateConstructorUsedError;
|
throw _privateConstructorUsedError;
|
||||||
}
|
}
|
||||||
@ -142,6 +147,8 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res,
|
|||||||
// ignore: unused_field
|
// ignore: unused_field
|
||||||
final $Res Function($Val) _then;
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
@override
|
@override
|
||||||
$Res call({
|
$Res call({
|
||||||
@ -190,6 +197,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
|
|||||||
$Res Function(_$WebSocketLoadEventDataPlaylistImpl) _then)
|
$Res Function(_$WebSocketLoadEventDataPlaylistImpl) _then)
|
||||||
: super(_value, _then);
|
: super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
@override
|
@override
|
||||||
$Res call({
|
$Res call({
|
||||||
@ -213,6 +222,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
$SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection {
|
$SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection {
|
||||||
@ -281,12 +292,14 @@ class _$WebSocketLoadEventDataPlaylistImpl
|
|||||||
other.initialIndex == initialIndex));
|
other.initialIndex == initialIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,
|
int get hashCode => Object.hash(runtimeType,
|
||||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||||
@ -420,8 +433,11 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
|
|||||||
SpotubeSimplePlaylistObject? get collection;
|
SpotubeSimplePlaylistObject? get collection;
|
||||||
@override
|
@override
|
||||||
int? get initialIndex;
|
int? get initialIndex;
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
_$$WebSocketLoadEventDataPlaylistImplCopyWith<
|
||||||
_$WebSocketLoadEventDataPlaylistImpl>
|
_$WebSocketLoadEventDataPlaylistImpl>
|
||||||
get copyWith => throw _privateConstructorUsedError;
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
@ -456,6 +472,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
|
|||||||
$Res Function(_$WebSocketLoadEventDataAlbumImpl) _then)
|
$Res Function(_$WebSocketLoadEventDataAlbumImpl) _then)
|
||||||
: super(_value, _then);
|
: super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
@override
|
@override
|
||||||
$Res call({
|
$Res call({
|
||||||
@ -479,6 +497,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
$SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection {
|
$SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection {
|
||||||
@ -545,12 +565,14 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
|
|||||||
other.initialIndex == initialIndex));
|
other.initialIndex == initialIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,
|
int get hashCode => Object.hash(runtimeType,
|
||||||
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
const DeepCollectionEquality().hash(_tracks), collection, initialIndex);
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||||
@ -683,8 +705,11 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
|
|||||||
SpotubeSimpleAlbumObject? get collection;
|
SpotubeSimpleAlbumObject? get collection;
|
||||||
@override
|
@override
|
||||||
int? get initialIndex;
|
int? get initialIndex;
|
||||||
|
|
||||||
|
/// Create a copy of WebSocketLoadEventData
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
_$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl>
|
||||||
get copyWith => throw _privateConstructorUsedError;
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,13 +16,14 @@ import 'package:spotube/models/metadata/market.dart';
|
|||||||
import 'package:spotube/models/metadata/metadata.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/services/kv_store/encrypted_kv_store.dart';
|
import 'package:spotube/services/kv_store/encrypted_kv_store.dart';
|
||||||
import 'package:spotube/services/kv_store/kv_store.dart';
|
import 'package:spotube/services/kv_store/kv_store.dart';
|
||||||
import 'package:spotube/services/sourced_track/enums.dart';
|
|
||||||
import 'package:flutter/widgets.dart' hide Table, Key, View;
|
import 'package:flutter/widgets.dart' hide Table, Key, View;
|
||||||
import 'package:spotube/modules/settings/color_scheme_picker_dialog.dart';
|
import 'package:spotube/modules/settings/color_scheme_picker_dialog.dart';
|
||||||
import 'package:drift/native.dart';
|
import 'package:drift/native.dart';
|
||||||
|
import 'package:spotube/services/logger/logger.dart';
|
||||||
import 'package:spotube/services/youtube_engine/newpipe_engine.dart';
|
import 'package:spotube/services/youtube_engine/newpipe_engine.dart';
|
||||||
import 'package:spotube/services/youtube_engine/youtube_explode_engine.dart';
|
import 'package:spotube/services/youtube_engine/youtube_explode_engine.dart';
|
||||||
import 'package:spotube/services/youtube_engine/yt_dlp_engine.dart';
|
import 'package:spotube/services/youtube_engine/yt_dlp_engine.dart';
|
||||||
|
import 'package:spotube/utils/platform.dart';
|
||||||
import 'package:sqlite3/sqlite3.dart';
|
import 'package:sqlite3/sqlite3.dart';
|
||||||
import 'package:sqlite3_flutter_libs/sqlite3_flutter_libs.dart';
|
import 'package:sqlite3_flutter_libs/sqlite3_flutter_libs.dart';
|
||||||
|
|
||||||
@ -58,14 +59,14 @@ part 'typeconverters/subtitle.dart';
|
|||||||
AudioPlayerStateTable,
|
AudioPlayerStateTable,
|
||||||
HistoryTable,
|
HistoryTable,
|
||||||
LyricsTable,
|
LyricsTable,
|
||||||
MetadataPluginsTable,
|
PluginsTable,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
class AppDatabase extends _$AppDatabase {
|
class AppDatabase extends _$AppDatabase {
|
||||||
AppDatabase() : super(_openConnection());
|
AppDatabase() : super(_openConnection());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 8;
|
int get schemaVersion => 10;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
MigrationStrategy get migration {
|
MigrationStrategy get migration {
|
||||||
@ -199,6 +200,43 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
from8To9: (m, schema) async {
|
||||||
|
await m
|
||||||
|
.renameTable(schema.pluginsTable, "metadata_plugins_table")
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await m
|
||||||
|
.renameColumn(
|
||||||
|
schema.pluginsTable,
|
||||||
|
"selected",
|
||||||
|
pluginsTable.selectedForMetadata,
|
||||||
|
)
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await m
|
||||||
|
.addColumn(
|
||||||
|
schema.pluginsTable,
|
||||||
|
pluginsTable.selectedForAudioSource,
|
||||||
|
)
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
},
|
||||||
|
from9To10: (m, schema) async {
|
||||||
|
await m
|
||||||
|
.dropColumn(schema.preferencesTable, "piped_instance")
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await m
|
||||||
|
.dropColumn(schema.preferencesTable, "invidious_instance")
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await m
|
||||||
|
.addColumn(
|
||||||
|
schema.sourceMatchTable,
|
||||||
|
sourceMatchTable.sourceInfo,
|
||||||
|
)
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await customStatement("DROP INDEX IF EXISTS uniq_track_match;")
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
await m
|
||||||
|
.dropColumn(schema.sourceMatchTable, "source_id")
|
||||||
|
.catchError((e, stack) => AppLogger.reportError(e, stack));
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,10 @@
|
|||||||
|
// dart format width=80
|
||||||
import 'package:drift/internal/versioned_schema.dart' as i0;
|
import 'package:drift/internal/versioned_schema.dart' as i0;
|
||||||
import 'package:drift/drift.dart' as i1;
|
import 'package:drift/drift.dart' as i1;
|
||||||
import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import
|
import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:spotube/models/database/database.dart';
|
import 'package:spotube/models/database/database.dart';
|
||||||
import 'package:spotube/models/metadata/market.dart';
|
import 'package:spotube/models/metadata/market.dart';
|
||||||
import 'package:spotube/services/sourced_track/enums.dart';
|
|
||||||
|
|
||||||
// GENERATED BY drift_dev, DO NOT MODIFY.
|
// GENERATED BY drift_dev, DO NOT MODIFY.
|
||||||
final class Schema2 extends i0.VersionedSchema {
|
final class Schema2 extends i0.VersionedSchema {
|
||||||
@ -329,8 +329,7 @@ class Shape2 extends i0.VersionedTable {
|
|||||||
|
|
||||||
i1.GeneratedColumn<String> _column_7(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_7(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('audio_quality', aliasedName, false,
|
i1.GeneratedColumn<String>('audio_quality', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string, defaultValue: Constant("high"));
|
||||||
defaultValue: Constant(SourceQualities.high.name));
|
|
||||||
i1.GeneratedColumn<bool> _column_8(String aliasedName) =>
|
i1.GeneratedColumn<bool> _column_8(String aliasedName) =>
|
||||||
i1.GeneratedColumn<bool>('album_color_sync', aliasedName, false,
|
i1.GeneratedColumn<bool>('album_color_sync', aliasedName, false,
|
||||||
type: i1.DriftSqlType.bool,
|
type: i1.DriftSqlType.bool,
|
||||||
@ -417,16 +416,13 @@ i1.GeneratedColumn<String> _column_25(String aliasedName) =>
|
|||||||
defaultValue: Constant(ThemeMode.system.name));
|
defaultValue: Constant(ThemeMode.system.name));
|
||||||
i1.GeneratedColumn<String> _column_26(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_26(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('audio_source', aliasedName, false,
|
i1.GeneratedColumn<String>('audio_source', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string, defaultValue: Constant("youtube"));
|
||||||
defaultValue: Constant(AudioSource.youtube.name));
|
|
||||||
i1.GeneratedColumn<String> _column_27(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_27(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('stream_music_codec', aliasedName, false,
|
i1.GeneratedColumn<String>('stream_music_codec', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string, defaultValue: Constant("weba"));
|
||||||
defaultValue: Constant(SourceCodecs.weba.name));
|
|
||||||
i1.GeneratedColumn<String> _column_28(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_28(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('download_music_codec', aliasedName, false,
|
i1.GeneratedColumn<String>('download_music_codec', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string, defaultValue: Constant("m4a"));
|
||||||
defaultValue: Constant(SourceCodecs.m4a.name));
|
|
||||||
i1.GeneratedColumn<bool> _column_29(String aliasedName) =>
|
i1.GeneratedColumn<bool> _column_29(String aliasedName) =>
|
||||||
i1.GeneratedColumn<bool>('discord_presence', aliasedName, false,
|
i1.GeneratedColumn<bool>('discord_presence', aliasedName, false,
|
||||||
type: i1.DriftSqlType.bool,
|
type: i1.DriftSqlType.bool,
|
||||||
@ -511,8 +507,7 @@ i1.GeneratedColumn<String> _column_38(String aliasedName) =>
|
|||||||
type: i1.DriftSqlType.string);
|
type: i1.DriftSqlType.string);
|
||||||
i1.GeneratedColumn<String> _column_39(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_39(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('source_type', aliasedName, false,
|
i1.GeneratedColumn<String>('source_type', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string,
|
type: i1.DriftSqlType.string, defaultValue: Constant("youtube"));
|
||||||
defaultValue: Constant(SourceType.youtube.name));
|
|
||||||
|
|
||||||
class Shape6 extends i0.VersionedTable {
|
class Shape6 extends i0.VersionedTable {
|
||||||
Shape6({required super.source, required super.alias}) : super.aliased();
|
Shape6({required super.source, required super.alias}) : super.aliased();
|
||||||
@ -1407,7 +1402,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);
|
||||||
@ -2053,7 +2048,7 @@ final class Schema8 extends i0.VersionedSchema {
|
|||||||
_column_13,
|
_column_13,
|
||||||
_column_14,
|
_column_14,
|
||||||
_column_15,
|
_column_15,
|
||||||
_column_55,
|
_column_69,
|
||||||
_column_17,
|
_column_17,
|
||||||
_column_18,
|
_column_18,
|
||||||
_column_19,
|
_column_19,
|
||||||
@ -2188,7 +2183,7 @@ final class Schema8 extends i0.VersionedSchema {
|
|||||||
_column_65,
|
_column_65,
|
||||||
_column_66,
|
_column_66,
|
||||||
_column_67,
|
_column_67,
|
||||||
_column_69,
|
_column_70,
|
||||||
],
|
],
|
||||||
attachedDatabase: database,
|
attachedDatabase: database,
|
||||||
),
|
),
|
||||||
@ -2200,8 +2195,550 @@ final class Schema8 extends i0.VersionedSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
i1.GeneratedColumn<String> _column_69(String aliasedName) =>
|
i1.GeneratedColumn<String> _column_69(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.string,
|
||||||
|
defaultValue: const Constant("Slate:0xff64748b"));
|
||||||
|
i1.GeneratedColumn<String> _column_70(String aliasedName) =>
|
||||||
i1.GeneratedColumn<String>('plugin_api_version', aliasedName, false,
|
i1.GeneratedColumn<String>('plugin_api_version', aliasedName, false,
|
||||||
type: i1.DriftSqlType.string, defaultValue: const Constant('1.0.0'));
|
type: i1.DriftSqlType.string, defaultValue: const Constant('1.0.0'));
|
||||||
|
|
||||||
|
final class Schema9 extends i0.VersionedSchema {
|
||||||
|
Schema9({required super.database}) : super(version: 9);
|
||||||
|
@override
|
||||||
|
late final List<i1.DatabaseSchemaEntity> entities = [
|
||||||
|
authenticationTable,
|
||||||
|
blacklistTable,
|
||||||
|
preferencesTable,
|
||||||
|
scrobblerTable,
|
||||||
|
skipSegmentTable,
|
||||||
|
sourceMatchTable,
|
||||||
|
audioPlayerStateTable,
|
||||||
|
historyTable,
|
||||||
|
lyricsTable,
|
||||||
|
pluginsTable,
|
||||||
|
uniqueBlacklist,
|
||||||
|
uniqTrackMatch,
|
||||||
|
];
|
||||||
|
late final Shape0 authenticationTable = Shape0(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'authentication_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_1,
|
||||||
|
_column_2,
|
||||||
|
_column_3,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape1 blacklistTable = Shape1(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'blacklist_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_4,
|
||||||
|
_column_5,
|
||||||
|
_column_6,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape13 preferencesTable = Shape13(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'preferences_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_7,
|
||||||
|
_column_8,
|
||||||
|
_column_9,
|
||||||
|
_column_10,
|
||||||
|
_column_11,
|
||||||
|
_column_12,
|
||||||
|
_column_13,
|
||||||
|
_column_14,
|
||||||
|
_column_15,
|
||||||
|
_column_69,
|
||||||
|
_column_17,
|
||||||
|
_column_18,
|
||||||
|
_column_19,
|
||||||
|
_column_20,
|
||||||
|
_column_21,
|
||||||
|
_column_22,
|
||||||
|
_column_23,
|
||||||
|
_column_24,
|
||||||
|
_column_25,
|
||||||
|
_column_26,
|
||||||
|
_column_54,
|
||||||
|
_column_27,
|
||||||
|
_column_28,
|
||||||
|
_column_29,
|
||||||
|
_column_30,
|
||||||
|
_column_31,
|
||||||
|
_column_56,
|
||||||
|
_column_53,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape3 scrobblerTable = Shape3(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'scrobbler_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_32,
|
||||||
|
_column_33,
|
||||||
|
_column_34,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape4 skipSegmentTable = Shape4(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'skip_segment_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_35,
|
||||||
|
_column_36,
|
||||||
|
_column_37,
|
||||||
|
_column_32,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape5 sourceMatchTable = Shape5(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'source_match_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_37,
|
||||||
|
_column_38,
|
||||||
|
_column_39,
|
||||||
|
_column_32,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape14 audioPlayerStateTable = Shape14(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'audio_player_state_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_40,
|
||||||
|
_column_41,
|
||||||
|
_column_42,
|
||||||
|
_column_43,
|
||||||
|
_column_57,
|
||||||
|
_column_58,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape9 historyTable = Shape9(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'history_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_32,
|
||||||
|
_column_50,
|
||||||
|
_column_51,
|
||||||
|
_column_52,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape10 lyricsTable = Shape10(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'lyrics_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_37,
|
||||||
|
_column_52,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape16 pluginsTable = Shape16(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'plugins_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_59,
|
||||||
|
_column_60,
|
||||||
|
_column_61,
|
||||||
|
_column_62,
|
||||||
|
_column_63,
|
||||||
|
_column_64,
|
||||||
|
_column_65,
|
||||||
|
_column_71,
|
||||||
|
_column_72,
|
||||||
|
_column_67,
|
||||||
|
_column_73,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
final i1.Index uniqueBlacklist = i1.Index('unique_blacklist',
|
||||||
|
'CREATE UNIQUE INDEX unique_blacklist ON blacklist_table (element_type, element_id)');
|
||||||
|
final i1.Index uniqTrackMatch = i1.Index('uniq_track_match',
|
||||||
|
'CREATE UNIQUE INDEX uniq_track_match ON source_match_table (track_id, source_id, source_type)');
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shape16 extends i0.VersionedTable {
|
||||||
|
Shape16({required super.source, required super.alias}) : super.aliased();
|
||||||
|
i1.GeneratedColumn<int> get id =>
|
||||||
|
columnsByName['id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<String> get name =>
|
||||||
|
columnsByName['name']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get description =>
|
||||||
|
columnsByName['description']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get version =>
|
||||||
|
columnsByName['version']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get author =>
|
||||||
|
columnsByName['author']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get entryPoint =>
|
||||||
|
columnsByName['entry_point']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get apis =>
|
||||||
|
columnsByName['apis']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get abilities =>
|
||||||
|
columnsByName['abilities']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<bool> get selectedForMetadata =>
|
||||||
|
columnsByName['selected_for_metadata']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get selectedForAudioSource =>
|
||||||
|
columnsByName['selected_for_audio_source']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<String> get repository =>
|
||||||
|
columnsByName['repository']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get pluginApiVersion =>
|
||||||
|
columnsByName['plugin_api_version']! as i1.GeneratedColumn<String>;
|
||||||
|
}
|
||||||
|
|
||||||
|
i1.GeneratedColumn<bool> _column_71(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<bool>('selected_for_metadata', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.bool,
|
||||||
|
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
|
||||||
|
'CHECK ("selected_for_metadata" IN (0, 1))'),
|
||||||
|
defaultValue: const Constant(false));
|
||||||
|
i1.GeneratedColumn<bool> _column_72(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<bool>('selected_for_audio_source', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.bool,
|
||||||
|
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
|
||||||
|
'CHECK ("selected_for_audio_source" IN (0, 1))'),
|
||||||
|
defaultValue: const Constant(false));
|
||||||
|
i1.GeneratedColumn<String> _column_73(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<String>('plugin_api_version', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.string, defaultValue: const Constant('2.0.0'));
|
||||||
|
|
||||||
|
final class Schema10 extends i0.VersionedSchema {
|
||||||
|
Schema10({required super.database}) : super(version: 10);
|
||||||
|
@override
|
||||||
|
late final List<i1.DatabaseSchemaEntity> entities = [
|
||||||
|
authenticationTable,
|
||||||
|
blacklistTable,
|
||||||
|
preferencesTable,
|
||||||
|
scrobblerTable,
|
||||||
|
skipSegmentTable,
|
||||||
|
sourceMatchTable,
|
||||||
|
audioPlayerStateTable,
|
||||||
|
historyTable,
|
||||||
|
lyricsTable,
|
||||||
|
pluginsTable,
|
||||||
|
uniqueBlacklist,
|
||||||
|
uniqTrackMatch,
|
||||||
|
];
|
||||||
|
late final Shape0 authenticationTable = Shape0(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'authentication_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_1,
|
||||||
|
_column_2,
|
||||||
|
_column_3,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape1 blacklistTable = Shape1(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'blacklist_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_4,
|
||||||
|
_column_5,
|
||||||
|
_column_6,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape17 preferencesTable = Shape17(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'preferences_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_8,
|
||||||
|
_column_9,
|
||||||
|
_column_10,
|
||||||
|
_column_11,
|
||||||
|
_column_12,
|
||||||
|
_column_13,
|
||||||
|
_column_14,
|
||||||
|
_column_15,
|
||||||
|
_column_69,
|
||||||
|
_column_17,
|
||||||
|
_column_18,
|
||||||
|
_column_19,
|
||||||
|
_column_20,
|
||||||
|
_column_21,
|
||||||
|
_column_22,
|
||||||
|
_column_25,
|
||||||
|
_column_74,
|
||||||
|
_column_54,
|
||||||
|
_column_29,
|
||||||
|
_column_30,
|
||||||
|
_column_31,
|
||||||
|
_column_56,
|
||||||
|
_column_53,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape3 scrobblerTable = Shape3(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'scrobbler_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_32,
|
||||||
|
_column_33,
|
||||||
|
_column_34,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape4 skipSegmentTable = Shape4(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'skip_segment_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_35,
|
||||||
|
_column_36,
|
||||||
|
_column_37,
|
||||||
|
_column_32,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape18 sourceMatchTable = Shape18(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'source_match_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_37,
|
||||||
|
_column_75,
|
||||||
|
_column_76,
|
||||||
|
_column_32,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape14 audioPlayerStateTable = Shape14(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'audio_player_state_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_40,
|
||||||
|
_column_41,
|
||||||
|
_column_42,
|
||||||
|
_column_43,
|
||||||
|
_column_57,
|
||||||
|
_column_58,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape9 historyTable = Shape9(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'history_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_32,
|
||||||
|
_column_50,
|
||||||
|
_column_51,
|
||||||
|
_column_52,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape10 lyricsTable = Shape10(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'lyrics_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_37,
|
||||||
|
_column_52,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
late final Shape16 pluginsTable = Shape16(
|
||||||
|
source: i0.VersionedTable(
|
||||||
|
entityName: 'plugins_table',
|
||||||
|
withoutRowId: false,
|
||||||
|
isStrict: false,
|
||||||
|
tableConstraints: [],
|
||||||
|
columns: [
|
||||||
|
_column_0,
|
||||||
|
_column_59,
|
||||||
|
_column_60,
|
||||||
|
_column_61,
|
||||||
|
_column_62,
|
||||||
|
_column_63,
|
||||||
|
_column_64,
|
||||||
|
_column_65,
|
||||||
|
_column_71,
|
||||||
|
_column_72,
|
||||||
|
_column_67,
|
||||||
|
_column_73,
|
||||||
|
],
|
||||||
|
attachedDatabase: database,
|
||||||
|
),
|
||||||
|
alias: null);
|
||||||
|
final i1.Index uniqueBlacklist = i1.Index('unique_blacklist',
|
||||||
|
'CREATE UNIQUE INDEX unique_blacklist ON blacklist_table (element_type, element_id)');
|
||||||
|
final i1.Index uniqTrackMatch = i1.Index('uniq_track_match',
|
||||||
|
'CREATE UNIQUE INDEX uniq_track_match ON source_match_table (track_id, source_info, source_type)');
|
||||||
|
}
|
||||||
|
|
||||||
|
class Shape17 extends i0.VersionedTable {
|
||||||
|
Shape17({required super.source, required super.alias}) : super.aliased();
|
||||||
|
i1.GeneratedColumn<int> get id =>
|
||||||
|
columnsByName['id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<bool> get albumColorSync =>
|
||||||
|
columnsByName['album_color_sync']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get amoledDarkTheme =>
|
||||||
|
columnsByName['amoled_dark_theme']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get checkUpdate =>
|
||||||
|
columnsByName['check_update']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get normalizeAudio =>
|
||||||
|
columnsByName['normalize_audio']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get showSystemTrayIcon =>
|
||||||
|
columnsByName['show_system_tray_icon']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get systemTitleBar =>
|
||||||
|
columnsByName['system_title_bar']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get skipNonMusic =>
|
||||||
|
columnsByName['skip_non_music']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<String> get closeBehavior =>
|
||||||
|
columnsByName['close_behavior']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get accentColorScheme =>
|
||||||
|
columnsByName['accent_color_scheme']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get layoutMode =>
|
||||||
|
columnsByName['layout_mode']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get locale =>
|
||||||
|
columnsByName['locale']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get market =>
|
||||||
|
columnsByName['market']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get searchMode =>
|
||||||
|
columnsByName['search_mode']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get downloadLocation =>
|
||||||
|
columnsByName['download_location']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get localLibraryLocation =>
|
||||||
|
columnsByName['local_library_location']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get themeMode =>
|
||||||
|
columnsByName['theme_mode']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get audioSourceId =>
|
||||||
|
columnsByName['audio_source_id']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get youtubeClientEngine =>
|
||||||
|
columnsByName['youtube_client_engine']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<bool> get discordPresence =>
|
||||||
|
columnsByName['discord_presence']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get endlessPlayback =>
|
||||||
|
columnsByName['endless_playback']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<bool> get enableConnect =>
|
||||||
|
columnsByName['enable_connect']! as i1.GeneratedColumn<bool>;
|
||||||
|
i1.GeneratedColumn<int> get connectPort =>
|
||||||
|
columnsByName['connect_port']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<bool> get cacheMusic =>
|
||||||
|
columnsByName['cache_music']! as i1.GeneratedColumn<bool>;
|
||||||
|
}
|
||||||
|
|
||||||
|
i1.GeneratedColumn<String> _column_74(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<String>('audio_source_id', aliasedName, true,
|
||||||
|
type: i1.DriftSqlType.string);
|
||||||
|
|
||||||
|
class Shape18 extends i0.VersionedTable {
|
||||||
|
Shape18({required super.source, required super.alias}) : super.aliased();
|
||||||
|
i1.GeneratedColumn<int> get id =>
|
||||||
|
columnsByName['id']! as i1.GeneratedColumn<int>;
|
||||||
|
i1.GeneratedColumn<String> get trackId =>
|
||||||
|
columnsByName['track_id']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get sourceInfo =>
|
||||||
|
columnsByName['source_info']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<String> get sourceType =>
|
||||||
|
columnsByName['source_type']! as i1.GeneratedColumn<String>;
|
||||||
|
i1.GeneratedColumn<DateTime> get createdAt =>
|
||||||
|
columnsByName['created_at']! as i1.GeneratedColumn<DateTime>;
|
||||||
|
}
|
||||||
|
|
||||||
|
i1.GeneratedColumn<String> _column_75(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<String>('source_info', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.string, defaultValue: const Constant("{}"));
|
||||||
|
i1.GeneratedColumn<String> _column_76(String aliasedName) =>
|
||||||
|
i1.GeneratedColumn<String>('source_type', aliasedName, false,
|
||||||
|
type: i1.DriftSqlType.string);
|
||||||
i0.MigrationStepWithVersion migrationSteps({
|
i0.MigrationStepWithVersion migrationSteps({
|
||||||
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
|
||||||
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
|
||||||
@ -2210,6 +2747,8 @@ i0.MigrationStepWithVersion migrationSteps({
|
|||||||
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
||||||
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
||||||
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
|
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema9 schema) from8To9,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema10 schema) from9To10,
|
||||||
}) {
|
}) {
|
||||||
return (currentVersion, database) async {
|
return (currentVersion, database) async {
|
||||||
switch (currentVersion) {
|
switch (currentVersion) {
|
||||||
@ -2248,6 +2787,16 @@ i0.MigrationStepWithVersion migrationSteps({
|
|||||||
final migrator = i1.Migrator(database, schema);
|
final migrator = i1.Migrator(database, schema);
|
||||||
await from7To8(migrator, schema);
|
await from7To8(migrator, schema);
|
||||||
return 8;
|
return 8;
|
||||||
|
case 8:
|
||||||
|
final schema = Schema9(database: database);
|
||||||
|
final migrator = i1.Migrator(database, schema);
|
||||||
|
await from8To9(migrator, schema);
|
||||||
|
return 9;
|
||||||
|
case 9:
|
||||||
|
final schema = Schema10(database: database);
|
||||||
|
final migrator = i1.Migrator(database, schema);
|
||||||
|
await from9To10(migrator, schema);
|
||||||
|
return 10;
|
||||||
default:
|
default:
|
||||||
throw ArgumentError.value('Unknown migration from $currentVersion');
|
throw ArgumentError.value('Unknown migration from $currentVersion');
|
||||||
}
|
}
|
||||||
@ -2262,6 +2811,8 @@ i1.OnUpgrade stepByStep({
|
|||||||
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
|
||||||
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
|
||||||
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
|
required Future<void> Function(i1.Migrator m, Schema8 schema) from7To8,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema9 schema) from8To9,
|
||||||
|
required Future<void> Function(i1.Migrator m, Schema10 schema) from9To10,
|
||||||
}) =>
|
}) =>
|
||||||
i0.VersionedSchema.stepByStepHelper(
|
i0.VersionedSchema.stepByStepHelper(
|
||||||
step: migrationSteps(
|
step: migrationSteps(
|
||||||
@ -2272,4 +2823,6 @@ i1.OnUpgrade stepByStep({
|
|||||||
from5To6: from5To6,
|
from5To6: from5To6,
|
||||||
from6To7: from6To7,
|
from6To7: from6To7,
|
||||||
from7To8: from7To8,
|
from7To8: from7To8,
|
||||||
|
from8To9: from8To9,
|
||||||
|
from9To10: from9To10,
|
||||||
));
|
));
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
part of '../database.dart';
|
part of '../database.dart';
|
||||||
|
|
||||||
class MetadataPluginsTable extends Table {
|
class PluginsTable extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
TextColumn get name => text().withLength(min: 1, max: 50)();
|
TextColumn get name => text().withLength(min: 1, max: 50)();
|
||||||
TextColumn get description => text()();
|
TextColumn get description => text()();
|
||||||
@ -9,8 +9,11 @@ class MetadataPluginsTable extends Table {
|
|||||||
TextColumn get entryPoint => text()();
|
TextColumn get entryPoint => text()();
|
||||||
TextColumn get apis => text().map(const StringListConverter())();
|
TextColumn get apis => text().map(const StringListConverter())();
|
||||||
TextColumn get abilities => text().map(const StringListConverter())();
|
TextColumn get abilities => text().map(const StringListConverter())();
|
||||||
BoolColumn get selected => boolean().withDefault(const Constant(false))();
|
BoolColumn get selectedForMetadata =>
|
||||||
|
boolean().withDefault(const Constant(false))();
|
||||||
|
BoolColumn get selectedForAudioSource =>
|
||||||
|
boolean().withDefault(const Constant(false))();
|
||||||
TextColumn get repository => text().nullable()();
|
TextColumn get repository => text().nullable()();
|
||||||
TextColumn get pluginApiVersion =>
|
TextColumn get pluginApiVersion =>
|
||||||
text().withDefault(const Constant('1.0.0'))();
|
text().withDefault(const Constant('2.0.0'))();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,15 +11,6 @@ enum CloseBehavior {
|
|||||||
close,
|
close,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum AudioSource {
|
|
||||||
youtube,
|
|
||||||
piped,
|
|
||||||
jiosaavn,
|
|
||||||
invidious;
|
|
||||||
|
|
||||||
String get label => name[0].toUpperCase() + name.substring(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum YoutubeClientEngine {
|
enum YoutubeClientEngine {
|
||||||
ytDlp("yt-dlp"),
|
ytDlp("yt-dlp"),
|
||||||
youtubeExplode("YouTubeExplode"),
|
youtubeExplode("YouTubeExplode"),
|
||||||
@ -39,14 +30,6 @@ enum YoutubeClientEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum MusicCodec {
|
|
||||||
m4a._("M4a (Best for downloaded music)"),
|
|
||||||
weba._("WebA (Best for streamed music)\nDoesn't support audio metadata");
|
|
||||||
|
|
||||||
final String label;
|
|
||||||
const MusicCodec._(this.label);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SearchMode {
|
enum SearchMode {
|
||||||
youtube._("YouTube"),
|
youtube._("YouTube"),
|
||||||
youtubeMusic._("YouTube Music");
|
youtubeMusic._("YouTube Music");
|
||||||
@ -62,8 +45,6 @@ enum SearchMode {
|
|||||||
|
|
||||||
class PreferencesTable extends Table {
|
class PreferencesTable extends Table {
|
||||||
IntColumn get id => integer().autoIncrement()();
|
IntColumn get id => integer().autoIncrement()();
|
||||||
TextColumn get audioQuality => textEnum<SourceQualities>()
|
|
||||||
.withDefault(Constant(SourceQualities.high.name))();
|
|
||||||
BoolColumn get albumColorSync =>
|
BoolColumn get albumColorSync =>
|
||||||
boolean().withDefault(const Constant(true))();
|
boolean().withDefault(const Constant(true))();
|
||||||
BoolColumn get amoledDarkTheme =>
|
BoolColumn get amoledDarkTheme =>
|
||||||
@ -95,20 +76,11 @@ class PreferencesTable extends Table {
|
|||||||
TextColumn get downloadLocation => text().withDefault(const Constant(""))();
|
TextColumn get downloadLocation => text().withDefault(const Constant(""))();
|
||||||
TextColumn get localLibraryLocation =>
|
TextColumn get localLibraryLocation =>
|
||||||
text().withDefault(const Constant("")).map(const StringListConverter())();
|
text().withDefault(const Constant("")).map(const StringListConverter())();
|
||||||
TextColumn get pipedInstance =>
|
|
||||||
text().withDefault(const Constant("https://pipedapi.kavin.rocks"))();
|
|
||||||
TextColumn get invidiousInstance =>
|
|
||||||
text().withDefault(const Constant("https://inv.nadeko.net"))();
|
|
||||||
TextColumn get themeMode =>
|
TextColumn get themeMode =>
|
||||||
textEnum<ThemeMode>().withDefault(Constant(ThemeMode.system.name))();
|
textEnum<ThemeMode>().withDefault(Constant(ThemeMode.system.name))();
|
||||||
TextColumn get audioSource =>
|
TextColumn get audioSourceId => text().nullable()();
|
||||||
textEnum<AudioSource>().withDefault(Constant(AudioSource.youtube.name))();
|
|
||||||
TextColumn get youtubeClientEngine => textEnum<YoutubeClientEngine>()
|
TextColumn get youtubeClientEngine => textEnum<YoutubeClientEngine>()
|
||||||
.withDefault(Constant(YoutubeClientEngine.youtubeExplode.name))();
|
.withDefault(Constant(YoutubeClientEngine.youtubeExplode.name))();
|
||||||
TextColumn get streamMusicCodec =>
|
|
||||||
textEnum<SourceCodecs>().withDefault(Constant(SourceCodecs.weba.name))();
|
|
||||||
TextColumn get downloadMusicCodec =>
|
|
||||||
textEnum<SourceCodecs>().withDefault(Constant(SourceCodecs.m4a.name))();
|
|
||||||
BoolColumn get discordPresence =>
|
BoolColumn get discordPresence =>
|
||||||
boolean().withDefault(const Constant(true))();
|
boolean().withDefault(const Constant(true))();
|
||||||
BoolColumn get endlessPlayback =>
|
BoolColumn get endlessPlayback =>
|
||||||
@ -122,7 +94,6 @@ class PreferencesTable extends Table {
|
|||||||
static PreferencesTableData defaults() {
|
static PreferencesTableData defaults() {
|
||||||
return PreferencesTableData(
|
return PreferencesTableData(
|
||||||
id: 0,
|
id: 0,
|
||||||
audioQuality: SourceQualities.high,
|
|
||||||
albumColorSync: true,
|
albumColorSync: true,
|
||||||
amoledDarkTheme: false,
|
amoledDarkTheme: false,
|
||||||
checkUpdate: true,
|
checkUpdate: true,
|
||||||
@ -138,13 +109,11 @@ class PreferencesTable extends Table {
|
|||||||
searchMode: SearchMode.youtube,
|
searchMode: SearchMode.youtube,
|
||||||
downloadLocation: "",
|
downloadLocation: "",
|
||||||
localLibraryLocation: [],
|
localLibraryLocation: [],
|
||||||
pipedInstance: "https://pipedapi.kavin.rocks",
|
|
||||||
invidiousInstance: "https://inv.nadeko.net",
|
|
||||||
themeMode: ThemeMode.system,
|
themeMode: ThemeMode.system,
|
||||||
audioSource: AudioSource.youtube,
|
audioSourceId: null,
|
||||||
youtubeClientEngine: YoutubeClientEngine.youtubeExplode,
|
youtubeClientEngine: kIsIOS
|
||||||
streamMusicCodec: SourceCodecs.m4a,
|
? YoutubeClientEngine.youtubeExplode
|
||||||
downloadMusicCodec: SourceCodecs.m4a,
|
: YoutubeClientEngine.newPipe,
|
||||||
discordPresence: true,
|
discordPresence: true,
|
||||||
endlessPlayback: true,
|
endlessPlayback: true,
|
||||||
enableConnect: false,
|
enableConnect: false,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user