mirror of
https://github.com/Livinglist/Hacki.git
synced 2026-03-13 09:26:23 +08:00
fix: logger output. (#552)
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:hacki/config/locator.dart';
|
||||
import 'package:hacki/extensions/extensions.dart';
|
||||
import 'package:hacki/models/models.dart';
|
||||
import 'package:hacki/repositories/repositories.dart';
|
||||
|
||||
part 'auth_event.dart';
|
||||
part 'auth_state.dart';
|
||||
|
||||
class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
class AuthBloc extends Bloc<AuthEvent, AuthState> with Loggable {
|
||||
AuthBloc({
|
||||
AuthRepository? authRepository,
|
||||
PreferenceRepository? preferenceRepository,
|
||||
@@ -48,6 +49,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
/// then it will not be available from the API.
|
||||
user ??= User.emptyWithId(username);
|
||||
|
||||
logInfo('silently logged in as ${user.id}.');
|
||||
emit(
|
||||
state.copyWith(
|
||||
isLoggedIn: true,
|
||||
@@ -56,6 +58,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
),
|
||||
);
|
||||
} else {
|
||||
logInfo('no previous session found.');
|
||||
emit(
|
||||
state.copyWith(
|
||||
isLoggedIn: false,
|
||||
@@ -91,6 +94,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
if (successful) {
|
||||
final User? user =
|
||||
await _hackerNewsRepository.fetchUser(id: event.username);
|
||||
logInfo('user logged in as ${user?.id}.');
|
||||
emit(
|
||||
state.copyWith(
|
||||
user: user ?? User.emptyWithId(event.username),
|
||||
@@ -111,9 +115,12 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
agreedToEULA: false,
|
||||
),
|
||||
);
|
||||
|
||||
await _authRepository.logout();
|
||||
await _preferenceRepository.updateUnreadCommentsIds(<int>[]);
|
||||
await _sembastRepository.deleteCachedComments();
|
||||
logInfo('user logged out');
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => 'AuthBloc';
|
||||
}
|
||||
|
||||
@@ -653,5 +653,5 @@ class StoriesBloc extends Bloc<StoriesEvent, StoriesState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[StoriesBloc]';
|
||||
String get logIdentifier => 'StoriesBloc';
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:hacki/config/custom_log_filter.dart';
|
||||
import 'package:hacki/config/logger/custom_log_filter.dart';
|
||||
import 'package:hacki/cubits/cubits.dart';
|
||||
import 'package:hacki/repositories/repositories.dart';
|
||||
import 'package:hacki/services/services.dart';
|
||||
|
||||
@@ -735,5 +735,5 @@ class CommentsCubit extends Cubit<CommentsState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[CommentsCubit]';
|
||||
String get logIdentifier => 'CommentsCubit';
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ class FavCubit extends Cubit<FavState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[FavCubit]';
|
||||
String get logIdentifier => 'FavCubit';
|
||||
}
|
||||
|
||||
extension on FavCubit {
|
||||
|
||||
@@ -259,5 +259,5 @@ class NotificationCubit extends Cubit<NotificationState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[NotificationCubit]';
|
||||
String get logIdentifier => 'NotificationCubit';
|
||||
}
|
||||
|
||||
@@ -95,5 +95,5 @@ class PreferenceCubit extends Cubit<PreferenceState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[PreferenceCubit]';
|
||||
String get logIdentifier => 'PreferenceCubit';
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ class SplitViewCubit extends HydratedCubit<SplitViewState> with Loggable {
|
||||
);
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[SplitViewCubit]';
|
||||
String get logIdentifier => 'SplitViewCubit';
|
||||
|
||||
static const String _submissionPanelWidthKey = 'submissionPanelWidth';
|
||||
|
||||
|
||||
@@ -44,5 +44,5 @@ class TabCubit extends Cubit<TabState> with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[TabCubit]';
|
||||
String get logIdentifier => 'TabCubit';
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ extension DateTimeExtension on DateTime {
|
||||
} else if (diff.inMinutes >= 1) {
|
||||
return '''${diff.inMinutes} $minuteStr${diff.inMinutes == 1 ? '' : 's'} ago''';
|
||||
} else if (diff.inSeconds >= 1) {
|
||||
return ''''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago''';
|
||||
return '''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago''';
|
||||
}
|
||||
return 'just now';
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.t(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -29,7 +29,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.d(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -44,7 +44,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.i(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -59,7 +59,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.w(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -74,7 +74,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.e(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -89,7 +89,7 @@ mixin Loggable {
|
||||
StackTrace? stackTrace,
|
||||
}) {
|
||||
_logger.f(
|
||||
'$logIdentifier $message',
|
||||
'[$logIdentifier] $message',
|
||||
time: time,
|
||||
error: error,
|
||||
stackTrace: stackTrace,
|
||||
|
||||
@@ -130,5 +130,5 @@ class AuthRepository extends PostableRepository with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[AuthRepository]';
|
||||
String get logIdentifier => 'AuthRepository';
|
||||
}
|
||||
|
||||
@@ -432,7 +432,7 @@ class HackerNewsRepository with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[HackerNewsRepository]';
|
||||
String get logIdentifier => 'HackerNewsRepository';
|
||||
}
|
||||
|
||||
extension on Map<String, dynamic> {
|
||||
|
||||
@@ -285,5 +285,5 @@ class OfflineRepository with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[OfflineRepository]';
|
||||
String get logIdentifier => 'OfflineRepository';
|
||||
}
|
||||
|
||||
@@ -458,5 +458,5 @@ class PreferenceRepository with Loggable {
|
||||
static String _getHasReadKey(int storyId) => 'hasRead_$storyId';
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[PreferenceRepository]';
|
||||
String get logIdentifier => 'PreferenceRepository';
|
||||
}
|
||||
|
||||
@@ -289,5 +289,5 @@ class SembastRepository with Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[SembastRepository]';
|
||||
String get logIdentifier => 'SembastRepository';
|
||||
}
|
||||
|
||||
@@ -331,5 +331,5 @@ class _HomeScreenState extends State<HomeScreen>
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[HomeScreen]';
|
||||
String get logIdentifier => 'HomeScreen';
|
||||
}
|
||||
|
||||
@@ -1094,5 +1094,5 @@ class _SettingsState extends State<Settings> with ItemActionMixin, Loggable {
|
||||
}
|
||||
|
||||
@override
|
||||
String get logIdentifier => '[Settings]';
|
||||
String get logIdentifier => 'Settings';
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:hacki/config/constants.dart';
|
||||
import 'package:hacki/config/file_output.dart';
|
||||
import 'package:hacki/config/logger/file_output.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
import 'package:bloc_test/bloc_test.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hacki/blocs/blocs.dart';
|
||||
import 'package:hacki/config/locator.dart';
|
||||
import 'package:hacki/models/models.dart';
|
||||
import 'package:hacki/repositories/repositories.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockAuthRepository extends Mock implements AuthRepository {}
|
||||
|
||||
class MockPreferenceRepository extends Mock implements PreferenceRepository {}
|
||||
|
||||
class MockHackerNewsRepository extends Mock implements HackerNewsRepository {}
|
||||
|
||||
class MockSembastRepository extends Mock implements SembastRepository {}
|
||||
import '../../mocks/mocks.dart';
|
||||
|
||||
void main() {
|
||||
final MockAuthRepository mockAuthRepository = MockAuthRepository();
|
||||
@@ -20,6 +15,8 @@ void main() {
|
||||
final MockHackerNewsRepository mockHackerNewsRepository =
|
||||
MockHackerNewsRepository();
|
||||
final MockSembastRepository mockSembastRepository = MockSembastRepository();
|
||||
final MockLogger mockLogger = MockLogger();
|
||||
locator.registerSingleton<Logger>(mockLogger);
|
||||
|
||||
const int created = 0;
|
||||
const int delay = 1;
|
||||
|
||||
4
test/mocks/logger.dart
Normal file
4
test/mocks/logger.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockLogger extends Mock implements Logger {}
|
||||
5
test/mocks/mocks.dart
Normal file
5
test/mocks/mocks.dart
Normal file
@@ -0,0 +1,5 @@
|
||||
export 'logger.dart';
|
||||
export 'repositories/auth_repository.dart';
|
||||
export 'repositories/hacker_news_repository.dart';
|
||||
export 'repositories/preference_repository.dart';
|
||||
export 'repositories/sembast_repository.dart';
|
||||
4
test/mocks/repositories/auth_repository.dart
Normal file
4
test/mocks/repositories/auth_repository.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:hacki/repositories/auth_repository.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockAuthRepository extends Mock implements AuthRepository {}
|
||||
4
test/mocks/repositories/hacker_news_repository.dart
Normal file
4
test/mocks/repositories/hacker_news_repository.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:hacki/repositories/hacker_news_repository.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockHackerNewsRepository extends Mock implements HackerNewsRepository {}
|
||||
4
test/mocks/repositories/preference_repository.dart
Normal file
4
test/mocks/repositories/preference_repository.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:hacki/repositories/preference_repository.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockPreferenceRepository extends Mock implements PreferenceRepository {}
|
||||
4
test/mocks/repositories/sembast_repository.dart
Normal file
4
test/mocks/repositories/sembast_repository.dart
Normal file
@@ -0,0 +1,4 @@
|
||||
import 'package:hacki/repositories/sembast_repository.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockSembastRepository extends Mock implements SembastRepository {}
|
||||
Reference in New Issue
Block a user