Skip to content

Commit

Permalink
refactor(neon_framework): rewrite login flow and account handling
Browse files Browse the repository at this point in the history
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
  • Loading branch information
Leptopoda committed Aug 16, 2024
1 parent 2cd0be7 commit d14008c
Show file tree
Hide file tree
Showing 100 changed files with 3,823 additions and 2,472 deletions.
67 changes: 53 additions & 14 deletions packages/neon_framework/example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "67.0.0"
account_repository:
dependency: "direct overridden"
description:
path: "../packages/account_repository"
relative: true
source: path
version: "0.1.0"
analyzer:
dependency: transitive
description:
Expand Down Expand Up @@ -65,6 +72,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.11.0"
bloc:
dependency: transitive
description:
name: bloc
sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
url: "https://pub.dev"
source: hosted
version: "8.1.4"
bloc_concurrency:
dependency: transitive
description:
name: bloc_concurrency
sha256: "456b7a3616a7c1ceb975c14441b3f198bf57d81cb95b7c6de5cb0c60201afcd8"
url: "https://pub.dev"
source: hosted
version: "0.2.5"
boolean_selector:
dependency: transitive
description:
Expand Down Expand Up @@ -220,10 +243,10 @@ packages:
dependency: transitive
description:
name: crypto
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.5"
crypton:
dependency: transitive
description:
Expand Down Expand Up @@ -334,6 +357,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.0"
equatable:
dependency: transitive
description:
name: equatable
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.5"
fake_async:
dependency: transitive
description:
Expand Down Expand Up @@ -362,10 +393,10 @@ packages:
dependency: transitive
description:
name: file_picker
sha256: e5ab74a18043cefab0deab5ee520d28a017ac84ffc897b53fc3d34404455d3dd
sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12"
url: "https://pub.dev"
source: hosted
version: "8.1.0"
version: "8.1.2"
file_selector_linux:
dependency: transitive
description:
Expand Down Expand Up @@ -433,6 +464,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_bloc:
dependency: transitive
description:
name: flutter_bloc
sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
url: "https://pub.dev"
source: hosted
version: "8.1.6"
flutter_blurhash:
dependency: transitive
description:
Expand Down Expand Up @@ -1005,10 +1044,10 @@ packages:
dependency: transitive
description:
name: permission_handler_android
sha256: eaf2a1ec4472775451e88ca6a7b86559ef2f1d1ed903942ed135e38ea0097dca
sha256: "2e2a64834daafdde3aa7a0d9a6b90c97fc6229853ac18c2271a9d055631570c1"
url: "https://pub.dev"
source: hosted
version: "12.0.8"
version: "12.0.11"
permission_handler_apple:
dependency: transitive
description:
Expand All @@ -1021,10 +1060,10 @@ packages:
dependency: transitive
description:
name: permission_handler_html
sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d"
sha256: d220eb8476b466d58b161e10b3001d93999010a26228a3fb89c4280db1249546
url: "https://pub.dev"
source: hosted
version: "0.1.1"
version: "0.1.3+1"
permission_handler_platform_interface:
dependency: transitive
description:
Expand Down Expand Up @@ -1221,10 +1260,10 @@ packages:
dependency: transitive
description:
name: share_plus
sha256: "38658034f9f3c29f3b37ab0068db15caea9df2dd70d83e99300991a0d756c2a6"
sha256: "468c43f285207c84bcabf5737f33b914ceb8eb38398b91e5e3ad1698d1b72a52"
url: "https://pub.dev"
source: hosted
version: "10.0.1"
version: "10.0.2"
share_plus_platform_interface:
dependency: transitive
description:
Expand All @@ -1237,10 +1276,10 @@ packages:
dependency: transitive
description:
name: shared_preferences
sha256: c272f9cabca5a81adc9b0894381e9c1def363e980f960fa903c604c471b22f68
sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.3.2"
shared_preferences_android:
dependency: transitive
description:
Expand Down Expand Up @@ -1488,10 +1527,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "94d8ad05f44c6d4e2ffe5567ab4d741b82d62e3c8e288cc1fcea45965edf47c9"
sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
url: "https://pub.dev"
source: hosted
version: "6.3.8"
version: "6.3.9"
url_launcher_ios:
dependency: transitive
description:
Expand Down
4 changes: 3 additions & 1 deletion packages/neon_framework/example/pubspec_overrides.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# melos_managed_dependency_overrides: cookie_store,dashboard_app,dynamite_runtime,files_app,files_icons,neon_framework,neon_http_client,neon_lints,news_app,nextcloud,notes_app,notifications_app,sort_box,talk_app
# melos_managed_dependency_overrides: account_repository,cookie_store,dashboard_app,dynamite_runtime,files_app,files_icons,neon_framework,neon_http_client,neon_lints,news_app,nextcloud,notes_app,notifications_app,sort_box,talk_app
dependency_overrides:
account_repository:
path: ../packages/account_repository
cookie_store:
path: ../../cookie_store
dashboard_app:
Expand Down
23 changes: 13 additions & 10 deletions packages/neon_framework/lib/l10n/en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,29 @@
"loginWorksWith": "works with",
"loginUsingQRcode": "Login using a QR code",
"loginUsingServerAddress": "Login using the server address",
"loginCheckingServerVersion": "Checking server version",
"loginSupportedServerVersion": "Supported server version: {version}",
"@loginSupportedServerVersion": {
"loginServerVersion": "{validationStatus, select, success{Supported server version: {version}} failure{Unsupported server version: {version}} other{Checking server version}}",
"@loginServerVersion": {
"description": "loginServerVersion",
"placeholders": {
"validationStatus": {
"type": "String",
"example": "success"
},
"version": {
"type": "String"
}
}
},
"loginUnsupportedServerVersion": "Unsupported server version: {version}",
"@loginUnsupportedServerVersion": {
"loginMaintenanceMode": "{validationStatus, select, success{Maintenance mode disabled} failure{Maintenance mode enabled} other{Checking maintenance mode}}",
"@loginMaintenanceMode": {
"description": "loginMaintenanceMode",
"placeholders": {
"version": {
"type": "String"
"validationStatus": {
"type": "String",
"example": "success"
}
}
},
"loginCheckingMaintenanceMode": "Checking maintenance mode",
"loginMaintenanceModeEnabled": "Maintenance mode enabled",
"loginMaintenanceModeDisabled": "Maintenance mode disabled",
"loginCheckingAccount": "Checking account",
"errorCredentialsForAccountNoLongerMatch": "The credentials for this account no longer match",
"errorBruteforceThrottled": "Your requests are throttled at the moment due to brute force protection",
Expand Down
36 changes: 6 additions & 30 deletions packages/neon_framework/lib/l10n/localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -143,41 +143,17 @@ abstract class NeonLocalizations {
/// **'Login using the server address'**
String get loginUsingServerAddress;

/// No description provided for @loginCheckingServerVersion.
/// loginServerVersion
///
/// In en, this message translates to:
/// **'Checking server version'**
String get loginCheckingServerVersion;
/// **'{validationStatus, select, success{Supported server version: {version}} failure{Unsupported server version: {version}} other{Checking server version}}'**
String loginServerVersion(String validationStatus, String version);

/// No description provided for @loginSupportedServerVersion.
/// loginMaintenanceMode
///
/// In en, this message translates to:
/// **'Supported server version: {version}'**
String loginSupportedServerVersion(String version);

/// No description provided for @loginUnsupportedServerVersion.
///
/// In en, this message translates to:
/// **'Unsupported server version: {version}'**
String loginUnsupportedServerVersion(String version);

/// No description provided for @loginCheckingMaintenanceMode.
///
/// In en, this message translates to:
/// **'Checking maintenance mode'**
String get loginCheckingMaintenanceMode;

/// No description provided for @loginMaintenanceModeEnabled.
///
/// In en, this message translates to:
/// **'Maintenance mode enabled'**
String get loginMaintenanceModeEnabled;

/// No description provided for @loginMaintenanceModeDisabled.
///
/// In en, this message translates to:
/// **'Maintenance mode disabled'**
String get loginMaintenanceModeDisabled;
/// **'{validationStatus, select, success{Maintenance mode disabled} failure{Maintenance mode enabled} other{Checking maintenance mode}}'**
String loginMaintenanceMode(String validationStatus);

/// No description provided for @loginCheckingAccount.
///
Expand Down
36 changes: 20 additions & 16 deletions packages/neon_framework/lib/l10n/localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,27 +50,31 @@ class NeonLocalizationsEn extends NeonLocalizations {
String get loginUsingServerAddress => 'Login using the server address';

@override
String get loginCheckingServerVersion => 'Checking server version';

@override
String loginSupportedServerVersion(String version) {
return 'Supported server version: $version';
String loginServerVersion(String validationStatus, String version) {
String _temp0 = intl.Intl.selectLogic(
validationStatus,
{
'success': 'Supported server version: $version',
'failure': 'Unsupported server version: $version',
'other': 'Checking server version',
},
);
return '$_temp0';
}

@override
String loginUnsupportedServerVersion(String version) {
return 'Unsupported server version: $version';
String loginMaintenanceMode(String validationStatus) {
String _temp0 = intl.Intl.selectLogic(
validationStatus,
{
'success': 'Maintenance mode disabled',
'failure': 'Maintenance mode enabled',
'other': 'Checking maintenance mode',
},
);
return '$_temp0';
}

@override
String get loginCheckingMaintenanceMode => 'Checking maintenance mode';

@override
String get loginMaintenanceModeEnabled => 'Maintenance mode enabled';

@override
String get loginMaintenanceModeDisabled => 'Maintenance mode disabled';

@override
String get loginCheckingAccount => 'Checking account';

Expand Down
2 changes: 1 addition & 1 deletion packages/neon_framework/lib/models.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/// {@canonicalFor label_builder.LabelBuilder}
library;

export 'package:neon_framework/src/models/account.dart' hide Credentials, LoginQRcode;
export 'package:account_repository/account_repository.dart' show Account;
export 'package:neon_framework/src/models/app_implementation.dart';
export 'package:neon_framework/src/models/label_builder.dart';
export 'package:neon_framework/src/models/notifications_interface.dart';
27 changes: 24 additions & 3 deletions packages/neon_framework/lib/neon.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import 'dart:async';

import 'package:account_repository/account_repository.dart';
import 'package:built_collection/built_collection.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';
import 'package:neon_framework/src/app.dart';
import 'package:neon_framework/src/blocs/accounts.dart';
Expand All @@ -13,6 +16,7 @@ import 'package:neon_framework/src/blocs/push_notifications.dart';
import 'package:neon_framework/src/models/app_implementation.dart';
import 'package:neon_framework/src/models/disposable.dart';
import 'package:neon_framework/src/platform/platform.dart';
import 'package:neon_framework/src/storage/keys.dart';
import 'package:neon_framework/src/theme/neon.dart';
import 'package:neon_framework/src/utils/global_options.dart';
import 'package:neon_framework/src/utils/provider.dart';
Expand All @@ -30,6 +34,7 @@ import 'package:timezone/timezone.dart' as tz;
Future<void> runNeon({
required BuiltSet<AppImplementation> appImplementations,
required NeonTheme theme,
http.Client? httpClient,
}) async {
assert(appImplementations.isNotEmpty, 'At least one AppImplementation required');

Expand All @@ -51,20 +56,35 @@ Future<void> runNeon({
await NeonStorage().init();

final packageInfo = await PackageInfo.fromPlatform();
buildUserAgent(packageInfo);

final globalOptions = GlobalOptions(
packageInfo,
);

final accountStorage = AccountStorage(
accountsPersistence: NeonStorage().singleValueStore(StorageKeys.accounts),
lastAccountPersistence: NeonStorage().singleValueStore(StorageKeys.lastUsedAccount),
);

final accountRepository = AccountRepository(
userAgent: buildUserAgent(theme.branding.name, packageInfo),
httpClient: httpClient ?? http.Client(),
storage: accountStorage,
);

await accountRepository.loadAccounts(
initialAccount: globalOptions.initialAccount.value,
rememberLastUsedAccount: globalOptions.rememberLastUsedAccount.value,
);

final accountsBloc = AccountsBloc(
globalOptions: globalOptions,
allAppImplementations: appImplementations,
accountRepository: accountRepository,
);

PushNotificationsBloc(
accountsSubject: accountsBloc.accounts,
globalOptions: globalOptions,
accountRepository: accountRepository,
);
final firstLaunchBloc = FirstLaunchBloc();
final nextPushBloc = NextPushBloc(
Expand All @@ -75,6 +95,7 @@ Future<void> runNeon({
runApp(
MultiProvider(
providers: [
RepositoryProvider.value(value: accountRepository),
NeonProvider<GlobalOptions>.value(value: globalOptions),
NeonProvider<AccountsBloc>.value(value: accountsBloc),
NeonProvider<FirstLaunchBloc>.value(value: firstLaunchBloc),
Expand Down
Loading

0 comments on commit d14008c

Please sign in to comment.