Compare commits

..

No commits in common. "5ea4df932fa9bed806b3662163a23d6c3f4c1d06" and "d843ce9ede9559ff8fe6c96200fe98e547afd455" have entirely different histories.

49 changed files with 344 additions and 597 deletions

25
.github/Dockerfile vendored Normal file
View File

@ -0,0 +1,25 @@
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" ]

View File

@ -37,14 +37,12 @@ jobs:
files: |
dist/Spotube-linux-x86_64.deb
dist/Spotube-linux-x86_64.rpm
dist/Spotube-linux-x86_64.AppImage
dist/spotube-linux-*-x86_64.tar.xz
- os: ubuntu-22.04-arm
platform: linux
arch: arm64
files: |
dist/Spotube-linux-aarch64.deb
dist/Spotube-linux-aarch64.AppImage
dist/spotube-linux-*-aarch64.tar.xz
- os: ubuntu-22.04
platform: android
@ -109,7 +107,7 @@ jobs:
- name: Install ${{matrix.platform}} dependencies
run: |
flutter pub get
dart cli/cli.dart install-dependencies --platform=${{matrix.platform}} --arch=${{matrix.arch}}
dart cli/cli.dart install-dependencies --platform=${{matrix.platform}}
- name: Sign Apk
if: ${{matrix.platform == 'android'}}

View File

@ -59,7 +59,7 @@ mixin BuildCommandCommonSteps on Command {
"""
flutter pub get
dart run build_runner build --delete-conflicting-outputs
dart pub global activate fastforge
dart pub global activate flutter_distributor
""",
);
}

View File

@ -37,11 +37,12 @@ class LinuxBuildCommand extends Command with BuildCommandCommonSteps {
await bootstrap();
await shell.run(
"fastforge package --platform=linux --targets=deb,appimage",
"flutter_distributor package --platform=linux --targets=deb",
);
if (architecture == "x86") {
await shell.run(
"fastforge package --platform=linux --targets=rpm",
"flutter_distributor package --platform=linux --targets=rpm",
);
}
@ -115,23 +116,6 @@ class LinuxBuildCommand extends Command with BuildCommandCommonSteps {
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");
}
}

View File

@ -21,7 +21,7 @@ class MacosBuildCommand extends Command with BuildCommandCommonSteps {
"""
flutter build macos
appdmg appdmg.json ${join(cwd.path, "build", "Spotube-macos-universal.dmg")}
fastforge package --platform=macos --targets pkg --skip-clean
flutter_distributor package --platform=macos --targets pkg --skip-clean
""",
);

View File

@ -61,7 +61,7 @@ class WindowsBuildCommand extends Command with BuildCommandCommonSteps {
);
await shell.run(
"fastforge package --platform=windows --targets=exe --skip-clean",
"flutter_distributor package --platform=windows --targets=exe --skip-clean",
);
final ogExe = File(

View File

@ -37,8 +37,6 @@ class InstallDependenciesCommand extends Command {
FutureOr? run() async {
final shell = Shell();
final arch = argResults?.option("arch") == "x86" ? "x86_64" : "aarch64";
switch (argResults!.option("platform")) {
case "windows":
await shell.run(
@ -51,10 +49,7 @@ class InstallDependenciesCommand extends Command {
await shell.run(
"""
sudo apt-get update -y
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/
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
""",
);
break;

View File

@ -264,10 +264,8 @@
"change_cover": "Change cover",
"add_cover": "Add cover",
"restore_defaults": "Restore defaults",
"download_music_format": "Download music format",
"streaming_music_format": "Streaming music format",
"download_music_quality": "Download music quality",
"streaming_music_quality": "Streaming music quality",
"download_music_codec": "Download music codec",
"streaming_music_codec": "Streaming music codec",
"login_with_lastfm": "Login with Last.fm",
"connect": "Connect",
"disconnect_lastfm": "Disconnect Last.fm",

View File

@ -1743,29 +1743,17 @@ abstract class AppLocalizations {
/// **'Restore defaults'**
String get restore_defaults;
/// No description provided for @download_music_format.
/// No description provided for @download_music_codec.
///
/// In en, this message translates to:
/// **'Download music format'**
String get download_music_format;
/// **'Download music codec'**
String get download_music_codec;
/// No description provided for @streaming_music_format.
/// No description provided for @streaming_music_codec.
///
/// In en, this message translates to:
/// **'Streaming music format'**
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;
/// **'Streaming music codec'**
String get streaming_music_codec;
/// No description provided for @login_with_lastfm.
///

View File

@ -874,16 +874,10 @@ class AppLocalizationsAr extends AppLocalizations {
String get restore_defaults => 'استعادة الإعدادات الافتراضية';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'تنزيل ترميز الموسيقى';
@override
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';
String get streaming_music_codec => 'ترميز الموسيقى بالتدفق';
@override
String get login_with_lastfm => 'تسجيل الدخول باستخدام Last.fm';

View File

@ -873,16 +873,10 @@ class AppLocalizationsBn extends AppLocalizations {
String get restore_defaults => 'ডিফল্ট সেটিংস পুনরুদ্ধার করুন';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'সঙ্গীত কোডেক ডাউনলোড করুন';
@override
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';
String get streaming_music_codec => 'স্ট্রিমিং সঙ্গীত কোডেক';
@override
String get login_with_lastfm => 'Last.fm দিয়ে লগইন করুন';

View File

@ -876,16 +876,10 @@ class AppLocalizationsCa extends AppLocalizations {
String get restore_defaults => 'Restaura els valors per defecte';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Descarrega el codec de música';
@override
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';
String get streaming_music_codec => 'Codec de música en streaming';
@override
String get login_with_lastfm => 'Inicia la sessió amb Last.fm';

View File

@ -869,16 +869,10 @@ class AppLocalizationsCs extends AppLocalizations {
String get restore_defaults => 'Obnovit výchozí';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Kodek pro stahování';
@override
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';
String get streaming_music_codec => 'Kodek pro streamování';
@override
String get login_with_lastfm => 'Přihlásit se pomocí Last.fm';

View File

@ -879,16 +879,10 @@ class AppLocalizationsDe extends AppLocalizations {
String get restore_defaults => 'Standardeinstellungen wiederherstellen';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Musik-Codec herunterladen';
@override
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';
String get streaming_music_codec => 'Streaming-Musik-Codec';
@override
String get login_with_lastfm => 'Mit Last.fm anmelden';

View File

@ -871,16 +871,10 @@ class AppLocalizationsEn extends AppLocalizations {
String get restore_defaults => 'Restore defaults';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Download music codec';
@override
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';
String get streaming_music_codec => 'Streaming music codec';
@override
String get login_with_lastfm => 'Login with Last.fm';

View File

@ -876,16 +876,10 @@ class AppLocalizationsEs extends AppLocalizations {
String get restore_defaults => 'Restaurar valores predeterminados';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Descargar códec de música';
@override
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';
String get streaming_music_codec => 'Códec de música en streaming';
@override
String get login_with_lastfm => 'Iniciar sesión con Last.fm';

View File

@ -876,16 +876,10 @@ class AppLocalizationsEu extends AppLocalizations {
String get restore_defaults => 'Berrezarri berezko balioak';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Deskargatutako musikaren codec-a';
@override
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';
String get streaming_music_codec => 'Streaming musikaren codec-a';
@override
String get login_with_lastfm => 'Hasi saioa Last.fm-n';

View File

@ -870,16 +870,10 @@ class AppLocalizationsFa extends AppLocalizations {
String get restore_defaults => 'بازیابی پیش فرض ها';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'دانلود کدک موسیقی';
@override
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';
String get streaming_music_codec => 'کدک موسیقی استریمینگ';
@override
String get login_with_lastfm => 'ورود با Last.fm';

View File

@ -872,16 +872,10 @@ class AppLocalizationsFi extends AppLocalizations {
String get restore_defaults => 'Palauta oletukset';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Ladatun musiikin codefc';
@override
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';
String get streaming_music_codec => 'Suoratoistetun musiikin codec';
@override
String get login_with_lastfm => 'Kirjaudu sisään Last.fm:llä';

View File

@ -880,16 +880,10 @@ class AppLocalizationsFr extends AppLocalizations {
String get restore_defaults => 'Restaurer les valeurs par défaut';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Télécharger le codec musical';
@override
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';
String get streaming_music_codec => 'Codec de musique en streaming';
@override
String get login_with_lastfm => 'Se connecter avec Last.fm';

View File

@ -872,16 +872,10 @@ class AppLocalizationsHi extends AppLocalizations {
String get restore_defaults => 'डिफ़ॉल्ट सेटिंग्स को बहाल करें';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'संगीत कोडेक डाउनलोड करें';
@override
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';
String get streaming_music_codec => 'स्ट्रीमिंग संगीत कोडेक';
@override
String get login_with_lastfm => 'Last.fm से लॉगिन करें';

View File

@ -874,16 +874,10 @@ class AppLocalizationsId extends AppLocalizations {
String get restore_defaults => 'Kembalikan semula';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Unduh codec musik';
@override
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';
String get streaming_music_codec => 'Streaming codec musik';
@override
String get login_with_lastfm => 'Masuk dengan Last.fm';

View File

@ -874,16 +874,10 @@ class AppLocalizationsIt extends AppLocalizations {
String get restore_defaults => 'Ripristina default';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Codec musicale scaricamento';
@override
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';
String get streaming_music_codec => 'Codec musicale streaming';
@override
String get login_with_lastfm => 'Accesso a Last.fm';

View File

@ -861,16 +861,10 @@ class AppLocalizationsJa extends AppLocalizations {
String get restore_defaults => '設定を初期化';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'ダウンロード用の音声コーデック';
@override
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';
String get streaming_music_codec => 'ストリーミング用の音声コーデック';
@override
String get login_with_lastfm => 'Last.fmでログイン';

View File

@ -872,16 +872,10 @@ class AppLocalizationsKa extends AppLocalizations {
String get restore_defaults => 'ნაგულისხმევი პარამეტრების აღდგენა';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'მუსიკის კოდეკის გადმოწერა';
@override
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';
String get streaming_music_codec => 'სტრიმინგ მუსიკის კოდეკი';
@override
String get login_with_lastfm => 'Last.fm-ით შესვლა';

View File

@ -862,16 +862,10 @@ class AppLocalizationsKo extends AppLocalizations {
String get restore_defaults => '기본값으로 복원';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => '다운로드 음악 코덱';
@override
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';
String get streaming_music_codec => '스트리밍 음악 코덱';
@override
String get login_with_lastfm => 'Last.fm에 로그인';

View File

@ -880,16 +880,10 @@ class AppLocalizationsNe extends AppLocalizations {
String get restore_defaults => 'पूर्वनिर्धारितहरू पुनः स्थापित गर्नुहोस्';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'साङ्गीत कोडेक डाउनलोड गर्नुहोस्';
@override
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';
String get streaming_music_codec => 'स्ट्रिमिङ साङ्गीत कोडेक';
@override
String get login_with_lastfm => 'लास्ट.एफ.एम सँग लगइन गर्नुहोस्';

View File

@ -872,16 +872,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get restore_defaults => 'Standaardwaarden herstellen';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Download-codec';
@override
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';
String get streaming_music_codec => 'Streaming-codec';
@override
String get login_with_lastfm => 'Inloggen met Last.fm';

View File

@ -873,16 +873,10 @@ class AppLocalizationsPl extends AppLocalizations {
String get restore_defaults => 'Przywróć domyślne';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Pobierz kodek muzyczny';
@override
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';
String get streaming_music_codec => 'Kodek strumieniowy muzyki';
@override
String get login_with_lastfm => 'Zaloguj się z Last.fm';

View File

@ -873,16 +873,10 @@ class AppLocalizationsPt extends AppLocalizations {
String get restore_defaults => 'Restaurar padrões';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Descarregar codec de música';
@override
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';
String get streaming_music_codec => 'Codec de streaming de música';
@override
String get login_with_lastfm => 'Iniciar sessão com o Last.fm';

View File

@ -874,16 +874,10 @@ class AppLocalizationsRu extends AppLocalizations {
String get restore_defaults => 'Восстановить настройки по умолчанию';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Загрузить кодек для музыки';
@override
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';
String get streaming_music_codec => 'Кодек потоковой передачи музыки';
@override
String get login_with_lastfm => 'Войти с помощью Last.fm';

View File

@ -879,16 +879,10 @@ class AppLocalizationsTa extends AppLocalizations {
String get restore_defaults => 'இயல்புநிலைகளை மீட்டமை';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'இசை கோடெக்கை பதிவிறக்கு';
@override
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';
String get streaming_music_codec => 'இசை கோடெக்கை ஸ்ட்ரீம் செய்';
@override
String get login_with_lastfm => 'Last.fm உடன் உள்நுழைக';

View File

@ -872,16 +872,10 @@ class AppLocalizationsTh extends AppLocalizations {
String get restore_defaults => 'คืนค่าเริ่มต้น';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'ดาวน์โหลดโคเดคเพลง';
@override
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';
String get streaming_music_codec => 'สตรีมมิ่งโคเดคเพลง';
@override
String get login_with_lastfm => 'เข้าสู่ระบบด้วย Last.fm';

View File

@ -878,16 +878,10 @@ class AppLocalizationsTl extends AppLocalizations {
String get restore_defaults => 'Ibalik ang mga default';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Codec para sa pag-download ng musika';
@override
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';
String get streaming_music_codec => 'Codec para sa pag-stream ng musika';
@override
String get login_with_lastfm => 'Mag-login gamit ang Last.fm';

View File

@ -875,16 +875,10 @@ class AppLocalizationsTr extends AppLocalizations {
String get restore_defaults => 'Varsayılanları geri yükle';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Müzik codec bileşenini indir';
@override
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';
String get streaming_music_codec => 'Müzik codec\'i akışı';
@override
String get login_with_lastfm => 'Last.fm ile giriş yap';

View File

@ -875,16 +875,10 @@ class AppLocalizationsUk extends AppLocalizations {
String get restore_defaults => 'Відновити налаштування за замовчуванням';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Завантажити кодек для музики';
@override
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';
String get streaming_music_codec => 'Кодек потокової передачі музики';
@override
String get login_with_lastfm => 'Увійти з Last.fm';

View File

@ -875,16 +875,10 @@ class AppLocalizationsVi extends AppLocalizations {
String get restore_defaults => 'Khôi phục mặc định';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => 'Định dạng tải xuống';
@override
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';
String get streaming_music_codec => 'Định dạng nghe';
@override
String get login_with_lastfm => 'Đăng nhập bằng tài khoản Last.fm';

View File

@ -859,16 +859,10 @@ class AppLocalizationsZh extends AppLocalizations {
String get restore_defaults => '恢复默认值';
@override
String get download_music_format => 'Download music format';
String get download_music_codec => '下载音乐编解码器';
@override
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';
String get streaming_music_codec => '流媒体音乐编解码器';
@override
String get login_with_lastfm => '使用 Last.fm 登录';
@ -2382,6 +2376,12 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
@override
String get restore_defaults => '恢復預設值';
@override
String get download_music_codec => '下載音樂編解碼器';
@override
String get streaming_music_codec => '串流音樂編解碼器';
@override
String get login_with_lastfm => '使用 Last.fm 登入';

View File

@ -1,7 +1,6 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/fallbacks/not_found.dart';
import 'package:spotube/components/image/universal_image.dart';
import 'package:spotube/components/inter_scrollbar/inter_scrollbar.dart';
import 'package:spotube/components/ui/button_tile.dart';
@ -10,7 +9,8 @@ import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/duration.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/server/sourced_track_provider.dart';
import 'package:spotube/provider/audio_player/querying_track_info.dart';
import 'package:spotube/provider/server/active_track_sources.dart';
class SiblingTracksSheet extends HookConsumerWidget {
final bool floating;
@ -23,133 +23,126 @@ class SiblingTracksSheet extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final controller = useScrollController();
final activeTrack =
ref.watch(audioPlayerProvider.select((e) => e.activeTrack));
final isFetchingActiveTrack = ref.watch(queryingTrackInfoProvider);
final activeTrackSources = ref.watch(activeTrackSourcesProvider);
final activeTrackNotifier = activeTrackSources.asData?.value?.notifier;
final activeTrack = activeTrackSources.asData?.value?.track;
final activeTrackSource = activeTrackSources.asData?.value?.source;
if (activeTrack == null || activeTrack is! SpotubeFullTrackObject) {
return const SafeArea(child: NotFound());
}
final siblings = useMemoized<List<SpotubeAudioSourceMatchObject>>(
() => !isFetchingActiveTrack
? [
if (activeTrackSource != null) activeTrackSource.info,
...?activeTrackSource?.siblings,
]
: <SpotubeAudioSourceMatchObject>[],
[activeTrackSource, isFetchingActiveTrack],
);
return HookBuilder(builder: (context) {
final sourcedTrack = ref.watch(sourcedTrackProvider(activeTrack));
final sourcedTrackNotifier =
ref.watch(sourcedTrackProvider(activeTrack).notifier);
final previousActiveTrack = usePrevious(activeTrack);
useEffect(() {
/// Populate sibling when active track changes
if (previousActiveTrack?.id == activeTrack?.id) return;
if (activeTrackSource != null && activeTrackSource.siblings.isEmpty) {
activeTrackNotifier?.copyWithSibling();
}
return null;
}, [activeTrack, previousActiveTrack]);
final siblings = useMemoized<List<SpotubeAudioSourceMatchObject>>(
() => !sourcedTrack.isLoading
? <SpotubeAudioSourceMatchObject>[
if (sourcedTrack.asData?.value != null)
sourcedTrack.asData!.value.info,
...?sourcedTrack.asData?.value.siblings,
]
: <SpotubeAudioSourceMatchObject>[],
[sourcedTrack],
);
useEffect(() {
/// Populate sibling when active track changes
if (sourcedTrack.asData?.value != null &&
sourcedTrack.asData?.value.siblings.isEmpty == true) {
sourcedTrackNotifier.copyWithSibling();
}
return null;
}, [sourcedTrack]);
return SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16),
child: Row(
spacing: 5,
children: [
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: Text(
context.l10n.alternative_track_sources,
).bold()),
],
),
return SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16),
child: Row(
spacing: 5,
children: [
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: Text(
context.l10n.alternative_track_sources,
).bold()),
],
),
AnimatedSwitcher(
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: activeTrackSources.isLoading
? const SizedBox(
width: double.infinity,
child: LinearProgressIndicator(),
)
: const SizedBox.shrink(),
),
Expanded(
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: sourcedTrack.isLoading
? const SizedBox(
width: double.infinity,
child: LinearProgressIndicator(),
)
: const SizedBox.shrink(),
),
Expanded(
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
transitionBuilder: (child, animation) =>
FadeTransition(opacity: animation, child: child),
child: InterScrollbar(
transitionBuilder: (child, animation) =>
FadeTransition(opacity: animation, child: child),
child: InterScrollbar(
controller: controller,
child: ListView.separated(
padding: const EdgeInsets.all(8.0),
controller: controller,
child: ListView.separated(
padding: const EdgeInsets.all(8.0),
controller: controller,
itemCount: siblings.length,
separatorBuilder: (context, index) => const Gap(8),
itemBuilder: (context, index) {
final sourceInfo = siblings[index];
itemCount: siblings.length,
separatorBuilder: (context, index) => const Gap(8),
itemBuilder: (context, index) {
final sourceInfo = siblings[index];
return ButtonTile(
style: ButtonVariance.ghost,
padding: const EdgeInsets.symmetric(horizontal: 8),
title: Text(
sourceInfo.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
leading: sourceInfo.thumbnail != null
? UniversalImage(
path: sourceInfo.thumbnail!,
height: 60,
width: 60,
)
: null,
trailing:
Text(sourceInfo.duration.toHumanReadableString()),
subtitle: Text(
return ButtonTile(
style: ButtonVariance.ghost,
padding: const EdgeInsets.symmetric(horizontal: 8),
title: Text(
sourceInfo.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
leading: sourceInfo.thumbnail != null
? UniversalImage(
path: sourceInfo.thumbnail!,
height: 60,
width: 60,
)
: null,
trailing:
Text(sourceInfo.duration.toHumanReadableString()),
subtitle: Flexible(
child: Text(
sourceInfo.artists.join(", "),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
enabled: !sourcedTrack.isLoading,
selected: !sourcedTrack.isLoading &&
sourceInfo.id == sourcedTrack.asData?.value.info.id,
onPressed: () async {
if (!sourcedTrack.isLoading &&
sourceInfo.id !=
sourcedTrack.asData?.value.info.id) {
await sourcedTrackNotifier
.swapWithSibling(sourceInfo);
await ref
.read(audioPlayerProvider.notifier)
.swapActiveSource();
),
enabled: !isFetchingActiveTrack,
selected: !isFetchingActiveTrack &&
sourceInfo.id == activeTrackSource?.info.id,
onPressed: () async {
if (!isFetchingActiveTrack &&
sourceInfo.id != activeTrackSource?.info.id) {
await activeTrackNotifier
?.swapWithSibling(sourceInfo);
await ref
.read(audioPlayerProvider.notifier)
.swapActiveSource();
if (context.mounted) {
if (MediaQuery.sizeOf(context).mdAndUp) {
closeOverlay(context);
} else {
closeDrawer(context);
}
if (context.mounted) {
if (MediaQuery.sizeOf(context).mdAndUp) {
closeOverlay(context);
} else {
closeDrawer(context);
}
}
},
);
},
),
}
},
);
},
),
),
),
],
),
);
});
),
],
),
);
}
}

View File

@ -67,8 +67,8 @@ class SettingsPlaybackSection extends HookConsumerWidget {
),
if (sourcePresets.presets.isNotEmpty) ...[
AdaptiveSelectTile(
secondary: const Icon(SpotubeIcons.plugin),
title: Text(context.l10n.streaming_music_format),
secondary: const Icon(SpotubeIcons.api),
title: Text(context.l10n.streaming_music_codec),
value: sourcePresets.selectedStreamingContainerIndex,
options: [
for (final MapEntry(:key, value: preset)
@ -81,8 +81,8 @@ class SettingsPlaybackSection extends HookConsumerWidget {
},
),
AdaptiveSelectTile(
secondary: const Icon(SpotubeIcons.audioQuality),
title: Text(context.l10n.streaming_music_quality),
secondary: const Icon(SpotubeIcons.api),
title: const Text("Streaming music quality"),
value: sourcePresets.selectedStreamingQualityIndex,
options: [
for (final MapEntry(:key, value: quality) in sourcePresets
@ -98,8 +98,8 @@ class SettingsPlaybackSection extends HookConsumerWidget {
},
),
AdaptiveSelectTile(
secondary: const Icon(SpotubeIcons.plugin),
title: Text(context.l10n.download_music_format),
secondary: const Icon(SpotubeIcons.api),
title: Text(context.l10n.download_music_codec),
value: sourcePresets.selectedDownloadingContainerIndex,
options: [
for (final MapEntry(:key, value: preset)
@ -112,8 +112,8 @@ class SettingsPlaybackSection extends HookConsumerWidget {
},
),
AdaptiveSelectTile(
secondary: const Icon(SpotubeIcons.audioQuality),
title: Text(context.l10n.download_music_quality),
secondary: const Icon(SpotubeIcons.api),
title: const Text("Downloading music quality"),
value: sourcePresets.selectedStreamingQualityIndex,
options: [
for (final MapEntry(:key, value: quality) in sourcePresets

View File

@ -53,7 +53,7 @@ class PlaybackHistorySummaryNotifier
database.historyTable.itemId.count(distinct: true);
final itemIdCountingCol = database.historyTable.itemId.count();
final durationSumJsonColumn =
database.historyTable.data.jsonExtract<int>(r"$.durationMs").sum();
database.historyTable.data.jsonExtract<int>(r"$.duration_ms").sum();
final artistCountingCol =
database.historyTable.data.jsonExtract<String>(r"$.artists");

View File

@ -17,6 +17,7 @@
#include <open_file_linux/open_file_linux_plugin.h>
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <system_theme/system_theme_plugin.h>
#include <tray_manager/tray_manager_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
#include <window_manager/window_manager_plugin.h>
@ -55,6 +56,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar);
g_autoptr(FlPluginRegistrar) system_theme_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "SystemThemePlugin");
system_theme_plugin_register_with_registrar(system_theme_registrar);
g_autoptr(FlPluginRegistrar) tray_manager_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin");
tray_manager_plugin_register_with_registrar(tray_manager_registrar);

View File

@ -14,6 +14,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
open_file_linux
screen_retriever_linux
sqlite3_flutter_libs
system_theme
tray_manager
url_launcher_linux
window_manager

View File

@ -27,6 +27,7 @@ import screen_retriever_macos
import shared_preferences_foundation
import sqflite_darwin
import sqlite3_flutter_libs
import system_theme
import tray_manager
import url_launcher_macos
import window_manager
@ -54,6 +55,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
SystemThemePlugin.register(with: registry.registrar(forPlugin: "SystemThemePlugin"))
TrayManagerPlugin.register(with: registry.registrar(forPlugin: "TrayManagerPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin"))

View File

@ -82,7 +82,7 @@ packages:
source: hosted
version: "1.6.5"
async:
dependency: transitive
dependency: "direct main"
description:
name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
@ -531,6 +531,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.9.0"
dio_http2_adapter:
dependency: "direct main"
description:
name: dio_http2_adapter
sha256: b8bd5d587fd228a461711f8b82f378ccd4bf1fbf7802e7663ca60d7b5ce0e3aa
url: "https://pub.dev"
source: hosted
version: "2.6.0"
dio_web_adapter:
dependency: transitive
description:
@ -1074,6 +1082,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "11.2.0"
form_validator:
dependency: "direct main"
description:
name: form_validator
sha256: "8cbe91b7d5260870d6fb9e23acd55d5d1d1fdf2397f0279a4931ac3c0c7bf8fb"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
freezed:
dependency: "direct dev"
description:
@ -1112,7 +1128,7 @@ packages:
source: hosted
version: "1.2.0"
gap:
dependency: transitive
dependency: "direct main"
description:
name: gap
sha256: f19387d4e32f849394758b91377f9153a1b41d79513ef7668c088c77dbc6955d
@ -1135,6 +1151,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.3"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
sha256: ebc94ed30fd13cefd397cb1658b593f21571f014b7d1197eeb41fb95f05d899a
url: "https://pub.dev"
source: hosted
version: "6.3.1"
graphs:
dependency: transitive
description:
@ -1242,6 +1266,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.5.0"
http2:
dependency: transitive
description:
name: http2
sha256: "382d3aefc5bd6dc68c6b892d7664f29b5beb3251611ae946a98d35158a82bbfa"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
http_methods:
dependency: transitive
description:
@ -1392,7 +1424,7 @@ packages:
source: hosted
version: "0.6.7"
json_annotation:
dependency: transitive
dependency: "direct main"
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
@ -1498,65 +1530,58 @@ packages:
media_kit:
dependency: "direct main"
description:
path: media_kit
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit
sha256: "52a8e989babc431db0aa242f32a4a08e55f60662477ea09759a105d7cd6410da"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
media_kit_libs_android_audio:
dependency: "direct overridden"
dependency: transitive
description:
path: "libs/android/media_kit_libs_android_audio"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_android_audio
sha256: "8f8f9759e537e12d66f08bc4d5279eb1bb21a0ccc519ff3442c68a9f3b6dd68b"
url: "https://pub.dev"
source: hosted
version: "1.3.8"
media_kit_libs_audio:
dependency: "direct main"
description:
path: "libs/universal/media_kit_libs_audio"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_audio
sha256: "81bf506c234e81e3ec536ba72f8f700a928543c14c345220210cae0411636316"
url: "https://pub.dev"
source: hosted
version: "1.0.7"
media_kit_libs_ios_audio:
dependency: "direct overridden"
dependency: transitive
description:
path: "libs/ios/media_kit_libs_ios_audio"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_ios_audio
sha256: "78ccf04e27d6b4ba00a355578ccb39b772f00d48269a6ac3db076edf2d51934f"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
media_kit_libs_linux:
dependency: "direct overridden"
dependency: transitive
description:
path: "libs/linux/media_kit_libs_linux"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_linux
sha256: "2b473399a49ec94452c4d4ae51cfc0f6585074398d74216092bf3d54aac37ecf"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
media_kit_libs_macos_audio:
dependency: "direct overridden"
dependency: transitive
description:
path: "libs/macos/media_kit_libs_macos_audio"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_macos_audio
sha256: "3be21844df98f286de32808592835073cdef2c1a10078bac135da790badca950"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
media_kit_libs_windows_audio:
dependency: "direct overridden"
dependency: transitive
description:
path: "libs/windows/media_kit_libs_windows_audio"
ref: HEAD
resolved-ref: d310049f24196250d876efb02b9ff56fa9ef5068
url: "https://github.com/media-kit/media-kit"
source: git
name: media_kit_libs_windows_audio
sha256: c2fd558cc87b9d89a801141fcdffe02e338a3b21a41a18fbd63d5b221a1b8e53
url: "https://pub.dev"
source: hosted
version: "1.0.9"
menu_base:
dependency: transitive
@ -1686,6 +1711,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.0.3"
otp_util:
dependency: "direct main"
description:
name: otp_util
sha256: dd8956c6472bacc3ffabe62c03f8a9782d1e5a5a3f2674420970f549d642b1cf
url: "https://pub.dev"
source: hosted
version: "1.0.2"
package_config:
dependency: transitive
description:
@ -2348,6 +2381,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.4.1"
stroke_text:
dependency: "direct main"
description:
name: stroke_text
sha256: "783fee071e3a3c5d3fe24011d7d776ce3cd64792e01b650c6b727ac3f38cb37b"
url: "https://pub.dev"
source: hosted
version: "0.0.3"
sync_http:
dependency: transitive
description:
@ -2364,6 +2405,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.4.0"
system_theme:
dependency: "direct main"
description:
name: system_theme
sha256: "5f93485401689601d4636a695f99f7c70a30873ee68c1d95025d908a3386be7e"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
system_theme_web:
dependency: transitive
description:
name: system_theme_web
sha256: "900c92c5c050ce58048f241ef9a17e5cd8629808325a05b473dc62a6e99bae77"
url: "https://pub.dev"
source: hosted
version: "0.0.3"
term_glyph:
dependency: transitive
description:
@ -2373,7 +2430,7 @@ packages:
source: hosted
version: "1.2.2"
test:
dependency: "direct dev"
dependency: "direct main"
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"

View File

@ -15,6 +15,7 @@ environment:
dependencies:
app_links: ^6.4.0
args: ^2.5.0
async: ^2.11.0
audio_service: ^0.18.13
audio_service_mpris: ^0.2.0
audio_session: ^0.1.19
@ -63,8 +64,11 @@ dependencies:
flutter_sharing_intent: ^1.1.0
flutter_undraw: ^0.2.1
form_builder_validators: ^11.1.1
form_validator: ^2.1.1
freezed_annotation: ^2.4.1
fuzzywuzzy: ^1.1.6
gap: ^3.0.1
google_fonts: ^6.2.1
home_widget: ^0.7.0
hooks_riverpod: ^2.5.1
html: ^0.15.1
@ -72,10 +76,13 @@ dependencies:
http: ^1.2.1
image_picker: ^1.1.0
intl: any
json_annotation: ^4.8.1
local_notifier: ^0.1.6
logger: ^2.0.2
logging: ^1.3.0
lrc: ^1.0.2
media_kit: ^1.2.1
media_kit_libs_audio: ^1.0.7
metadata_god: ^1.1.0
mime: ^2.0.0
open_file: ^3.5.10
@ -102,6 +109,9 @@ dependencies:
smtc_windows: ^1.1.0
sqlite3: ^2.4.3
sqlite3_flutter_libs: ^0.5.23
stroke_text: ^0.0.2
system_theme: ^3.1.2
test: ^1.25.7
timezone: ^0.10.0
titlebar_buttons: ^1.0.0
tray_manager: ^0.5.0
@ -124,6 +134,8 @@ dependencies:
url: https://github.com/KRTirtho/flutter_new_pipe_extractor.git
http_parser: ^4.1.2
collection: any
otp_util: ^1.0.2
dio_http2_adapter: ^2.6.0
archive: ^4.0.7
hetu_script: ^0.4.2+1
hetu_std:
@ -143,15 +155,6 @@ dependencies:
pub_semver: ^2.2.0
change_case: ^1.1.0
flutter_secure_storage: ^9.2.4
# Have to use the git version due to unresponsive .move() after .add()
media_kit:
git:
url: https://github.com/media-kit/media-kit
path: media_kit
media_kit_libs_audio:
git:
url: https://github.com/media-kit/media-kit
path: libs/universal/media_kit_libs_audio
dev_dependencies:
build_runner: ^2.4.13
@ -170,7 +173,6 @@ dev_dependencies:
pub_api_client: ^3.0.0
io: ^1.0.4
drift_dev: ^2.21.0
test: ^1.25.7
auto_route_generator: ^9.0.0
dependency_overrides:
@ -189,26 +191,6 @@ dependency_overrides:
url: https://github.com/m-berto/flutter_secure_storage.git
ref: patch-2
path: flutter_secure_storage_linux
media_kit_libs_android_audio:
git:
url: https://github.com/media-kit/media-kit
path: libs/android/media_kit_libs_android_audio
media_kit_libs_ios_audio:
git:
url: https://github.com/media-kit/media-kit
path: libs/ios/media_kit_libs_ios_audio
media_kit_libs_macos_audio:
git:
url: https://github.com/media-kit/media-kit
path: libs/macos/media_kit_libs_macos_audio
media_kit_libs_windows_audio:
git:
url: https://github.com/media-kit/media-kit
path: libs/windows/media_kit_libs_windows_audio
media_kit_libs_linux:
git:
url: https://github.com/media-kit/media-kit
path: libs/linux/media_kit_libs_linux
flutter:
generate: true

View File

@ -1,9 +1,5 @@
{
"ar": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -16,10 +12,6 @@
],
"bn": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -32,10 +24,6 @@
],
"ca": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -48,10 +36,6 @@
],
"cs": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -64,10 +48,6 @@
],
"de": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -80,10 +60,6 @@
],
"es": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -96,10 +72,6 @@
],
"eu": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -112,10 +84,6 @@
],
"fa": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -128,10 +96,6 @@
],
"fi": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -144,10 +108,6 @@
],
"fr": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -160,10 +120,6 @@
],
"hi": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -176,10 +132,6 @@
],
"id": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -192,10 +144,6 @@
],
"it": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -208,10 +156,6 @@
],
"ja": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -224,10 +168,6 @@
],
"ka": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -240,10 +180,6 @@
],
"ko": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -256,10 +192,6 @@
],
"ne": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -273,10 +205,6 @@
"nl": [
"audio_source",
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -289,10 +217,6 @@
],
"pl": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -305,10 +229,6 @@
],
"pt": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -321,10 +241,6 @@
],
"ru": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -337,10 +253,6 @@
],
"ta": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -353,10 +265,6 @@
],
"th": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -369,10 +277,6 @@
],
"tl": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -385,10 +289,6 @@
],
"tr": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -401,10 +301,6 @@
],
"uk": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -417,10 +313,6 @@
],
"vi": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -433,10 +325,6 @@
],
"zh": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",
@ -449,10 +337,6 @@
],
"zh_TW": [
"download_music_format",
"streaming_music_format",
"download_music_quality",
"streaming_music_quality",
"default_metadata_source",
"set_default_metadata_source",
"default_audio_source",

View File

@ -20,6 +20,7 @@
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
#include <system_theme/system_theme_plugin.h>
#include <tray_manager/tray_manager_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
#include <window_manager/window_manager_plugin.h>
@ -53,6 +54,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
Sqlite3FlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
SystemThemePluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SystemThemePlugin"));
TrayManagerPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("TrayManagerPlugin"));
UrlLauncherWindowsRegisterWithRegistrar(

View File

@ -17,6 +17,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
permission_handler_windows
screen_retriever_windows
sqlite3_flutter_libs
system_theme
tray_manager
url_launcher_windows
window_manager