Compare commits

...

2 commits

2 changed files with 52 additions and 73 deletions

100
README.md
View file

@ -1,62 +1,38 @@
# freezer # freezer
Free, unlimited, without DRM music streaming app, which uses Deezer as backend. Free, unlimited, without DRM music streaming app, which uses Deezer as backend.
This app is still in BETA, so it is missing features and contains bugs. This app is still in BETA, so it is missing features and contains bugs.
If you want to report bug or request feature, please open an issue. If you want to report bug or request feature, please open an issue.
## Downloads: ## Downloads:
Downloads are currently distributed in [Telegram channel](https://t.me/freezereleases) and the [Freezer website](https://www.freezer.life/)
**You might get Play Protect warning - just select install anyway or disable Play Protect** - it is because the keys used for signing this app are new. Downloads are distributed in [Telegram channel](https://t.me/+lm3uxdt8exgzODA0).
**App not installed** error - try different version (arm32/64) or uninstall old version.
## Compile from source
## Compile from source
Install flutter SDK: https://flutter.dev/docs/get-started/install
Install flutter SDK: https://flutter.dev/docs/get-started/install (Optional) Generate keys for release build: https://flutter.dev/docs/deployment/android
(Optional) Generate keys for release build: https://flutter.dev/docs/deployment/android
Download source:
Download source:
``` ```
git clone https://git.freezer.life/exttex/freezer git clone https://fem.mint.lgbt/pato05/freezer.git
git submodule init ```
git submodule update
``` Compile:
Compile: ```
``` flutter pub get
flutter pub get flutter pub run build_runner build
flutter build apk flutter build apk # or windows/linux
``` ```
NOTE: You have to use own keys, or build debug using `flutter build apk --debug`
NOTE: You have to use own keys, or build debug using `flutter build apk --debug`
## Links
Telegram group: https://t.me/freezerandroid ## Disclaimer
Discord server: https://discord.gg/7ap654Tp3z
```
Freezer was not developed for piracy, but educational and private usage.
## Credits It may be illegal to use this in your country!
**Tobs**: Beta tester I am not responsible in any way for the usage of this app.
**Xandar**: Community manager, helper, tester ```
**Bas Curtiz**: Icon, Logo, Banner, Design suggestions
**Deemix**: https://git.rip/RemixDev/deemix/
**Annexhack**: Android Auto help and resources
**Huge thanks to all the Crowdin translators and all the contributors to this project <3**
### just_audio, audio_service
This app depends on modified just_audio and audio_service plugins with Deezer support.
Both plugins were originally written by ryanheise, all credits to him.
Forked versions for Freezer:
https://git.rip/freezer/just_audio
https://git.rip/freezer/audio_service
## Support me
BTC: `14hcr4PGbgqeXd3SoXY9QyJFNpyurgrL9y`
ETH: `0xb4D1893195404E1F4b45e5BDA77F202Ac4012288`
## Disclaimer
```
Freezer was not developed for piracy, but educational and private usage.
It may be illegal to use this in your country!
I am not responsible in any way for the usage of this app.
```

View file

@ -10,7 +10,8 @@ import 'package:window_manager/window_manager.dart';
final sysTray = SysTray._(); final sysTray = SysTray._();
class SysTray with TrayListener { /// Handles system tray and window events
class SysTray with TrayListener, WindowListener {
SysTray._(); SysTray._();
static String getIcon({bool forcePng = false}) { static String getIcon({bool forcePng = false}) {
@ -33,6 +34,8 @@ class SysTray with TrayListener {
if (_inited) return; if (_inited) return;
_inited = true; _inited = true;
windowManager.addListener(this);
updateIcon(); updateIcon();
try { try {
await trayManager.setToolTip('freezer'); await trayManager.setToolTip('freezer');
@ -65,22 +68,19 @@ class SysTray with TrayListener {
MenuItem.separator(), MenuItem.separator(),
MenuItem( MenuItem(
label: 'Previous'.i18n, label: 'Previous'.i18n,
onClick: (menuItem) => audioHandler.skipToPrevious()), onClick: (_) => audioHandler.skipToPrevious()),
playing playing
? MenuItem( ? MenuItem(label: 'Pause'.i18n, onClick: (_) => audioHandler.pause())
label: 'Pause'.i18n, onClick: (menuItem) => audioHandler.pause()) : MenuItem(label: 'Play'.i18n, onClick: (_) => audioHandler.play()),
: MenuItem( MenuItem(label: 'Next'.i18n, onClick: (_) => audioHandler.skipToNext()),
label: 'Play'.i18n, onClick: (menuItem) => audioHandler.play()),
MenuItem(
label: 'Next'.i18n, onClick: (menuItem) => audioHandler.skipToNext()),
MenuItem.separator(), MenuItem.separator(),
MenuItem( MenuItem(
label: 'Show'.i18n, label: 'Show'.i18n,
// we can safely ignore it if it errors, as it's expected // we can safely ignore it if it errors, as it's expected
onClick: (menuItem) => windowManager.show().catchError((e) {})), onClick: (_) => windowManager.show().catchError((e) {})),
MenuItem( MenuItem(
label: 'Exit'.i18n, label: 'Exit'.i18n,
onClick: (menuItem) async { onClick: (_) async {
await audioHandler.pause(); await audioHandler.pause();
SystemNavigator.pop(); SystemNavigator.pop();
}, },
@ -103,5 +103,8 @@ class SysTray with TrayListener {
void onTrayIconRightMouseUp() => trayManager.popUpContextMenu(); void onTrayIconRightMouseUp() => trayManager.popUpContextMenu();
@override @override
void onTrayMenuItemClick(MenuItem menuItem) {} void onWindowClose() {
// release resources before closing
audioHandler.stop();
}
} }