From 97beed8cec344922148c6886beea6711c2a89970 Mon Sep 17 00:00:00 2001 From: Arthi-chaud Date: Sun, 6 Mar 2022 00:30:40 +0100 Subject: [PATCH] Mobile Client: Signin from service --- mobile/lib/l10n/app_en.arb | 3 ++- mobile/lib/l10n/app_fr.arb | 3 ++- mobile/lib/src/models/service.dart | 19 +++++++++++++++++++ mobile/lib/src/views/home_page.dart | 6 ++++-- mobile/lib/src/views/login_page.dart | 8 ++++---- mobile/lib/src/views/setup_action_page.dart | 3 ++- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/mobile/lib/l10n/app_en.arb b/mobile/lib/l10n/app_en.arb index 2b8bce0..e61b737 100644 --- a/mobile/lib/l10n/app_en.arb +++ b/mobile/lib/l10n/app_en.arb @@ -49,5 +49,6 @@ "authenticatedToNoService": "You are not authenticated to any services.", "connectService": "Connect service", "cantEnablePipeline": "You can't enable this pipeline because it depends on a service that is not connected", - "from": "from" + "from": "from", + "cantSignInFromService": "Can't sign in using this service" } \ No newline at end of file diff --git a/mobile/lib/l10n/app_fr.arb b/mobile/lib/l10n/app_fr.arb index e25624b..2b30cbf 100644 --- a/mobile/lib/l10n/app_fr.arb +++ b/mobile/lib/l10n/app_fr.arb @@ -49,5 +49,6 @@ "authenticatedToNoService": "Aucun service n'est connecté", "connectService": "Connexion aux services", "cantEnablePipeline": "Impossible d'activer la pipeline car elle dépend d'un service qui n'est pas connecté", - "from": "de" + "from": "de", + "cantSignInFromService": "Impossible de se connecter via ce service" } \ No newline at end of file diff --git a/mobile/lib/src/models/service.dart b/mobile/lib/src/models/service.dart index 3d177ce..65ad6cc 100644 --- a/mobile/lib/src/models/service.dart +++ b/mobile/lib/src/models/service.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'dart:core'; import 'package:get_it/get_it.dart'; +import 'package:line_icons/line_icon.dart'; /// Data class used to store data about a service (logo, url, name) class Service { @@ -87,4 +88,22 @@ class Service { } throw Exception("Unknown service"); } + + IconData getIcon() { + switch (this) { + case Service.anilist(): + return LineIcon.buysellads().icon!; + case Service.spotify(): + return LineIcon.spotify().icon!; + case Service.github(): + return LineIcon.alternateGithub().icon!; + case Service.youtube(): + return LineIcon.youtube().icon!; + case Service.twitter(): + return LineIcon.twitter().icon!; + case Service.discord(): + return LineIcon.discord().icon!; + } + throw ("No icon available"); + } } diff --git a/mobile/lib/src/views/home_page.dart b/mobile/lib/src/views/home_page.dart index 79b5f10..50fc81e 100644 --- a/mobile/lib/src/views/home_page.dart +++ b/mobile/lib/src/views/home_page.dart @@ -1,4 +1,5 @@ import 'package:aeris/src/aeris_api.dart'; +import 'package:aeris/src/providers/services_provider.dart'; import 'package:aeris/src/views/create_pipeline_page.dart'; import 'package:aeris/src/views/service_page.dart'; import 'package:aeris/src/widgets/aeris_card_page.dart'; @@ -44,7 +45,8 @@ class _HomePageState extends State { }, warnedAction: AppLocalizations.of(context).logout)), ); - return Consumer( + return Consumer( + builder: (_, __, ___) => Consumer( builder: (context, provider, _) => AerisPage( floatingActionButton: FloatingActionButton( onPressed: () => showAerisCardPage( @@ -93,6 +95,6 @@ class _HomePageState extends State { pipeline: provider.getPipelineAt(index), ), )), - )); + ))); } } diff --git a/mobile/lib/src/views/login_page.dart b/mobile/lib/src/views/login_page.dart index b157dcb..ce1db59 100644 --- a/mobile/lib/src/views/login_page.dart +++ b/mobile/lib/src/views/login_page.dart @@ -6,7 +6,6 @@ import 'package:flutter_login/flutter_login.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; -import 'package:line_icons/line_icon.dart'; import 'package:url_launcher/url_launcher.dart'; /// Login Page Widget @@ -63,10 +62,11 @@ class LoginPage extends StatelessWidget { loginProviders: [ for (var service in Service.all().where((element) => element != const Service.utils()).toList()) LoginProvider( - icon: LineIcon.alternateGithub().icon, + icon: service.getIcon(), label: service.name, - callback: () { - launch(Uri.parse(service.authSignInUrl).toString(), forceSafariVC: false); + callback: () async { + await launch(Uri.parse(service.authSignInUrl).toString(), forceSafariVC: false); + return GetIt.I().isConnected ? null : AppLocalizations.of(context).cantSignInFromService; } ) ], diff --git a/mobile/lib/src/views/setup_action_page.dart b/mobile/lib/src/views/setup_action_page.dart index 94b59e7..5a82b4d 100644 --- a/mobile/lib/src/views/setup_action_page.dart +++ b/mobile/lib/src/views/setup_action_page.dart @@ -47,7 +47,8 @@ class _SetupActionPageState extends State { void initState() { super.initState(); serviceState = widget.action.service; - availableActions = GetIt.I().getActionsFor(serviceState, widget.action); + var services = Provider.of(context, listen: false).connectedServices; + availableActions = GetIt.I().getActionsFor(services.contains(serviceState) ? serviceState : services[0], widget.action); } Widget serviceDropdown(List services) {