From 9992cf5c2c4a328242b2f3805a23747733b0a67d Mon Sep 17 00:00:00 2001 From: DJDoubleD <34967020+DJDoubleD@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:53:53 +0200 Subject: [PATCH] Add new dzr subdomain for browser login (fixes #104) --- lib/ui/login_screen.dart | 56 ++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/lib/ui/login_screen.dart b/lib/ui/login_screen.dart index 9a4042f..9e4f20a 100644 --- a/lib/ui/login_screen.dart +++ b/lib/ui/login_screen.dart @@ -57,7 +57,8 @@ class _LoginWidgetState extends State { builder: (context) => AlertDialog( title: Text('Deezer is unavailable'.i18n), content: Text( - 'Deezer is unavailable in your country, ReFreezer might not work properly. Please use a VPN'.i18n), + 'Deezer is unavailable in your country, ReFreezer might not work properly. Please use a VPN' + .i18n), actions: [ TextButton( child: Text('Continue'.i18n), @@ -93,7 +94,9 @@ class _LoginWidgetState extends State { content: Column( mainAxisSize: MainAxisSize.min, children: [ - Text('Error logging in! Please check your token and internet connection and try again.'.i18n), + Text( + 'Error logging in! Please check your token and internet connection and try again.' + .i18n), if (_error != null) Text('\n\n$_error') ], ), @@ -116,7 +119,8 @@ class _LoginWidgetState extends State { //Try logging in try { deezerAPI.arl = settings.arl; - bool resp = await deezerAPI.rawAuthorize(onError: (e) => setState(() => _error = e.toString())); + bool resp = await deezerAPI.rawAuthorize( + onError: (e) => setState(() => _error = e.toString())); if (resp == false) { //false, not null int arlLength = (settings.arl ?? '').length; @@ -196,7 +200,9 @@ class _LoginWidgetState extends State { 'Login using email'.i18n, ), onPressed: () { - showDialog(context: context, builder: (context) => EmailLogin(_update)); + showDialog( + context: context, + builder: (context) => EmailLogin(_update)); }, )), Padding( @@ -204,7 +210,8 @@ class _LoginWidgetState extends State { child: OutlinedButton( child: Text('Login using browser'.i18n), onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (context) => LoginBrowser(_update))); + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => LoginBrowser(_update))); }, ), ), @@ -216,13 +223,17 @@ class _LoginWidgetState extends State { showDialog( context: context, builder: (context) { - Future.delayed(const Duration(seconds: 1), - () => {focusNode.requestFocus()}); // autofocus doesn't work - it's replacement + Future.delayed( + const Duration(seconds: 1), + () => { + focusNode.requestFocus() + }); // autofocus doesn't work - it's replacement return AlertDialog( title: Text('Enter ARL'.i18n), content: TextField( onChanged: (String s) => _arl = s, - decoration: InputDecoration(labelText: 'Token (ARL)'.i18n), + decoration: InputDecoration( + labelText: 'Token (ARL)'.i18n), focusNode: focusNode, controller: controller, onSubmitted: (String s) { @@ -244,7 +255,8 @@ class _LoginWidgetState extends State { height: 16.0, ), Text( - "If you don't have account, you can register on deezer.com for free.".i18n, + "If you don't have account, you can register on deezer.com for free." + .i18n, textAlign: TextAlign.center, style: const TextStyle(fontSize: 16.0), ), @@ -253,7 +265,8 @@ class _LoginWidgetState extends State { child: OutlinedButton( child: Text('Open in browser'.i18n), onPressed: () { - InAppBrowser.openWithSystemBrowser(url: WebUri('https://deezer.com/register')); + InAppBrowser.openWithSystemBrowser( + url: WebUri('https://deezer.com/register')); }, ), ), @@ -288,15 +301,22 @@ class LoginBrowser extends StatelessWidget { children: [ Expanded( child: InAppWebView( - initialUrlRequest: URLRequest(url: WebUri('https://deezer.com/login')), - onLoadStart: (InAppWebViewController controller, WebUri? loadedUri) async { + initialUrlRequest: + URLRequest(url: WebUri('https://deezer.com/login')), + onLoadStart: + (InAppWebViewController controller, WebUri? loadedUri) async { //Offers URL - if (!loadedUri!.path.contains('/login') && !loadedUri.path.contains('/register')) { - controller.evaluateJavascript(source: 'window.location.href = "/open_app"'); + if (!loadedUri!.path.contains('/login') && + !loadedUri.path.contains('/register')) { + controller.evaluateJavascript( + source: 'window.location.href = "/open_app"'); } //Parse arl from url - if (loadedUri.toString().startsWith('intent://deezer.page.link')) { + if (loadedUri + .toString() + .startsWith('intent://deezer.page.link') || + loadedUri.toString().startsWith('intent://dzr.page.link')) { try { //Actual url is in `link` query parameter Uri linkUri = Uri.parse(loadedUri.queryParameters['link']!); @@ -307,7 +327,8 @@ class LoginBrowser extends StatelessWidget { Navigator.of(context).pop(); updateParent(); } catch (e) { - Logger.root.severe('Error loading ARL from browser login: $e'); + Logger.root + .severe('Error loading ARL from browser login: $e'); } } }, @@ -361,7 +382,8 @@ class _EmailLoginState extends State { context: context, builder: (context) => AlertDialog( title: Text('Error logging in!'.i18n), - content: Text('Error logging in using email, please check your credentials.\n\nError: ${exception!}'), + content: Text( + 'Error logging in using email, please check your credentials.\n\nError: ${exception!}'), actions: [ TextButton( child: Text('Dismiss'.i18n),