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: | 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
@ -109,7 +107,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}} --arch=${{matrix.arch}} dart cli/cli.dart install-dependencies --platform=${{matrix.platform}}
- name: Sign Apk - name: Sign Apk
if: ${{matrix.platform == 'android'}} if: ${{matrix.platform == 'android'}}

View File

@ -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 fastforge dart pub global activate flutter_distributor
""", """,
); );
} }

View File

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

View File

@ -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")}
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( await shell.run(
"fastforge package --platform=windows --targets=exe --skip-clean", "flutter_distributor package --platform=windows --targets=exe --skip-clean",
); );
final ogExe = File( final ogExe = File(

View File

@ -37,8 +37,6 @@ 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( await shell.run(
@ -51,10 +49,7 @@ class InstallDependenciesCommand extends Command {
await shell.run( await shell.run(
""" """
sudo apt-get update -y 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 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
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;

View File

@ -264,10 +264,8 @@
"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_format": "Download music format", "download_music_codec": "Download music codec",
"streaming_music_format": "Streaming music format", "streaming_music_codec": "Streaming music codec",
"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",

View File

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

View File

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

View File

@ -873,16 +873,10 @@ class AppLocalizationsBn extends AppLocalizations {
String get restore_defaults => 'ডিফল্ট সেটিংস পুনরুদ্ধার করুন'; String get restore_defaults => 'ডিফল্ট সেটিংস পুনরুদ্ধার করুন';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'সঙ্গীত কোডেক ডাউনলোড করুন';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'স্ট্রিমিং সঙ্গীত কোডেক';
@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 => 'Last.fm দিয়ে লগইন করুন'; 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'; String get restore_defaults => 'Restaura els valors per defecte';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Descarrega el codec de música';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Codec de música en streaming';
@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 => 'Inicia la sessió amb Last.fm'; 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í'; String get restore_defaults => 'Obnovit výchozí';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Kodek pro stahování';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Kodek pro streamování';
@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 => 'Přihlásit se pomocí Last.fm'; 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'; String get restore_defaults => 'Standardeinstellungen wiederherstellen';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Musik-Codec herunterladen';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Streaming-Musik-Codec';
@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 => 'Mit Last.fm anmelden'; 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'; String get restore_defaults => 'Restore defaults';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Download music codec';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Streaming music codec';
@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';

View File

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

View File

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

View File

@ -872,16 +872,10 @@ class AppLocalizationsFi extends AppLocalizations {
String get restore_defaults => 'Palauta oletukset'; String get restore_defaults => 'Palauta oletukset';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Ladatun musiikin codefc';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Suoratoistetun musiikin codec';
@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 => 'Kirjaudu sisään Last.fm:llä'; 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'; String get restore_defaults => 'Restaurer les valeurs par défaut';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Télécharger le codec musical';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Codec de musique en streaming';
@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 => 'Se connecter avec Last.fm'; String get login_with_lastfm => 'Se connecter avec Last.fm';

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -872,16 +872,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get restore_defaults => 'Standaardwaarden herstellen'; String get restore_defaults => 'Standaardwaarden herstellen';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Download-codec';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Streaming-codec';
@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 => 'Inloggen met Last.fm'; 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'; String get restore_defaults => 'Przywróć domyślne';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Pobierz kodek muzyczny';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Kodek strumieniowy muzyki';
@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 => 'Zaloguj się z Last.fm'; 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'; String get restore_defaults => 'Restaurar padrões';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Descarregar codec de música';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Codec de streaming de música';
@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 => 'Iniciar sessão com o Last.fm'; 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 => 'Восстановить настройки по умолчанию'; String get restore_defaults => 'Восстановить настройки по умолчанию';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Загрузить кодек для музыки';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Кодек потоковой передачи музыки';
@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 => 'Войти с помощью Last.fm'; String get login_with_lastfm => 'Войти с помощью Last.fm';

View File

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

View File

@ -872,16 +872,10 @@ class AppLocalizationsTh extends AppLocalizations {
String get restore_defaults => 'คืนค่าเริ่มต้น'; String get restore_defaults => 'คืนค่าเริ่มต้น';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'ดาวน์โหลดโคเดคเพลง';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'สตรีมมิ่งโคเดคเพลง';
@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 => 'เข้าสู่ระบบด้วย Last.fm'; 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'; String get restore_defaults => 'Ibalik ang mga default';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Codec para sa pag-download ng musika';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Codec para sa pag-stream ng musika';
@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 => 'Mag-login gamit ang Last.fm'; 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'; String get restore_defaults => 'Varsayılanları geri yükle';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Müzik codec bileşenini indir';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Müzik codec\'i akışı';
@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 => 'Last.fm ile giriş yap'; String get login_with_lastfm => 'Last.fm ile giriş yap';

View File

@ -875,16 +875,10 @@ class AppLocalizationsUk extends AppLocalizations {
String get restore_defaults => 'Відновити налаштування за замовчуванням'; String get restore_defaults => 'Відновити налаштування за замовчуванням';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Завантажити кодек для музики';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Кодек потокової передачі музики';
@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 => 'Увійти з Last.fm'; 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'; String get restore_defaults => 'Khôi phục mặc định';
@override @override
String get download_music_format => 'Download music format'; String get download_music_codec => 'Định dạng tải xuống';
@override @override
String get streaming_music_format => 'Streaming music format'; String get streaming_music_codec => 'Định dạng nghe';
@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 => 'Đă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';

View File

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

View File

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

View File

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

View File

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

View File

@ -17,6 +17,7 @@
#include <open_file_linux/open_file_linux_plugin.h> #include <open_file_linux/open_file_linux_plugin.h>
#include <screen_retriever_linux/screen_retriever_linux_plugin.h> #include <screen_retriever_linux/screen_retriever_linux_plugin.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_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 <tray_manager/tray_manager_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h> #include <url_launcher_linux/url_launcher_plugin.h>
#include <window_manager/window_manager_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 = g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin");
sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); 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 = g_autoptr(FlPluginRegistrar) tray_manager_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin");
tray_manager_plugin_register_with_registrar(tray_manager_registrar); tray_manager_plugin_register_with_registrar(tray_manager_registrar);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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