Skip to content
This repository was archived by the owner on Sep 14, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 43 additions & 7 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,49 @@ class _AppState extends State<App> {
case AuthenticationStatus.loading:
return const SplashPage();
case AuthenticationStatus.authenticated:
IntentRepository().handleIntent();
final categoryBloc = BlocProvider.of<CategoriesBloc>(context);
if (categoryBloc.state.status ==
CategoriesStatus.loadInProgress) {
categoryBloc.add(const CategoriesLoaded());
}
return const CategoryScreen();
return FutureBuilder(
future: UserRepository().fetchApiVersion(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Container();
}

if (snapshot.hasError) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
translate(
"categories.errors.api_version_check_failed",
args: {"error_msg": snapshot.error},
),
),
backgroundColor: Colors.red,
),
);
}

if (!UserRepository().isVersionSupported(snapshot.data!)) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
translate(
"categories.errors.api_version_above_confirmed",
args: {
"version":
"${snapshot.data!.major}.${snapshot.data!.minor}"
},
),
),
backgroundColor: Colors.orange,
),
);
}

IntentRepository().handleIntent();
return const CategoryScreen();
},
);

case AuthenticationStatus.unauthenticated:
return const LoginScreen();
case AuthenticationStatus.invalid:
Expand Down
19 changes: 8 additions & 11 deletions lib/src/blocs/authentication/authentication_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,22 @@ class AuthenticationBloc

if (hasToken) {
await userRepository.loadAppAuthentication();
bool validCredentials = false;
try {
validCredentials = await userRepository.checkAppAuthentication();
final validCredentials = await userRepository.checkAppAuthentication();

if (validCredentials) {
emit(AuthenticationState(status: AuthenticationStatus.authenticated));
} else {
await userRepository.deleteAppAuthentication();
emit(AuthenticationState(status: AuthenticationStatus.invalid));
}
} catch (e) {
emit(
AuthenticationState(
status: AuthenticationStatus.error,
error: e.toString(),
),
);
return;
}
if (validCredentials) {
await userRepository.fetchApiVersion();
emit(AuthenticationState(status: AuthenticationStatus.authenticated));
} else {
await userRepository.deleteAppAuthentication();
emit(AuthenticationState(status: AuthenticationStatus.invalid));
}
} else {
emit(AuthenticationState(status: AuthenticationStatus.unauthenticated));
Expand All @@ -54,7 +52,6 @@ class AuthenticationBloc
) async {
emit(AuthenticationState());
await userRepository.persistAppAuthentication(event.appAuthentication);
await userRepository.fetchApiVersion();
emit(AuthenticationState(status: AuthenticationStatus.authenticated));
}

Expand Down
13 changes: 13 additions & 0 deletions lib/src/blocs/authentication/authentication_state.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
part of 'authentication_bloc.dart';

enum AuthenticationStatus {
/// The user has not been authenticated
unauthenticated,

/// The user has been authenticated
authenticated,

/// The provided authentication is invalid
invalid,

/// Loading
///
/// Can either:
/// - retrive saved authentication
/// - log in witht he provided authentication
loading,

/// An error accured while authenticating
error;
}

Expand Down
11 changes: 5 additions & 6 deletions lib/src/blocs/categories/categories_bloc.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nextcloud_cookbook_flutter/src/models/category.dart';
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
import 'package:nextcloud_cookbook_flutter/src/services/services.dart';

part 'categories_event.dart';
Expand All @@ -18,20 +18,19 @@ class CategoriesBloc extends Bloc<CategoriesEvent, CategoriesState> {
Emitter<CategoriesState> emit,
) async {
try {
final List<Category> categories = await dataRepository.fetchCategories();
dataRepository.updateCategoryNames(categories);
final categories = await dataRepository.fetchCategories();
emit(
CategoriesState(
status: CategoriesStatus.loadSuccess,
categories: categories,
),
);
final List<Category> categoriesWithImage =
await dataRepository.fetchCategoryMainRecipes(categories);
final recipes = await dataRepository.fetchCategoryMainRecipes(categories);
emit(
CategoriesState(
status: CategoriesStatus.imageLoadSuccess,
categories: categoriesWithImage,
categories: categories,
recipes: recipes,
),
);
} on Exception catch (e) {
Expand Down
10 changes: 7 additions & 3 deletions lib/src/blocs/categories/categories_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,26 @@ class CategoriesState extends Equatable {
final CategoriesStatus status;
final String? error;
final Iterable<Category>? categories;
final Iterable<RecipeStub?>? recipes;

CategoriesState({
this.status = CategoriesStatus.loadInProgress,
this.error,
this.categories,
this.recipes,
}) {
switch (status) {
case CategoriesStatus.loadInProgress:
assert(error == null && categories == null);
assert(error == null && categories == null && recipes == null);
break;
case CategoriesStatus.loadSuccess:
assert(error == null && categories != null && recipes == null);
break;
case CategoriesStatus.imageLoadSuccess:
assert(error == null && categories != null);
assert(error == null && categories != null && recipes != null);
break;
case CategoriesStatus.loadFailure:
assert(error != null && categories == null);
assert(error != null && categories == null && recipes == null);
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/src/blocs/recipe/recipe_bloc.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nextcloud_cookbook_flutter/src/models/recipe.dart';
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
import 'package:nextcloud_cookbook_flutter/src/services/services.dart';

part 'recipe_event.dart';
Expand Down
2 changes: 1 addition & 1 deletion lib/src/blocs/recipes_short/recipes_short_bloc.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:nextcloud_cookbook_flutter/src/models/recipe_short.dart';
import 'package:nc_cookbook_api/nc_cookbook_api.dart';
import 'package:nextcloud_cookbook_flutter/src/services/services.dart';

part 'recipes_short_event.dart';
Expand Down
44 changes: 0 additions & 44 deletions lib/src/models/category.dart

This file was deleted.

59 changes: 0 additions & 59 deletions lib/src/models/category.g.dart

This file was deleted.

11 changes: 11 additions & 0 deletions lib/src/models/image_response.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:flutter/foundation.dart';

class ImageResponse {
final Uint8List data;
final bool isSvg;

const ImageResponse({
required this.data,
required this.isSvg,
});
}
21 changes: 0 additions & 21 deletions lib/src/models/intial_login.dart

This file was deleted.

19 changes: 0 additions & 19 deletions lib/src/models/poll.dart

This file was deleted.

Loading