Skip to content

Commit

Permalink
Minor improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 7, 2021
1 parent b549196 commit ee56d69
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 24 deletions.
12 changes: 9 additions & 3 deletions lib/application/game_codes/game_codes_bloc.dart
Expand Up @@ -4,6 +4,7 @@ import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/domain/services/genshin_service.dart';
import 'package:genshindb/domain/services/telemetry_service.dart';
import 'package:meta/meta.dart';

part 'game_codes_bloc.freezed.dart';
Expand All @@ -12,20 +13,25 @@ part 'game_codes_state.dart';

class GameCodesBloc extends Bloc<GameCodesEvent, GameCodesState> {
final GenshinService _genshinService;
final TelemetryService _telemetryService;

GameCodesBloc(this._genshinService) : super(const GameCodesState.loading());
GameCodesBloc(this._genshinService, this._telemetryService) : super(const GameCodesState.loading());

@override
Stream<GameCodesState> mapEventToState(GameCodesEvent event) async* {
final s = event.when(
init: () {
final s = await event.when(
init: () async {
final gameCodes = _genshinService.getAllGameCodes();

return GameCodesState.loaded(
workingGameCodes: gameCodes.where((code) => !code.isExpired).toList(),
expiredGameCodes: gameCodes.where((code) => code.isExpired).toList(),
);
},
opened: () async {
await _telemetryService.trackGameCodesOpened();
return state;
},
);

yield s;
Expand Down
2 changes: 2 additions & 0 deletions lib/application/game_codes/game_codes_event.dart
Expand Up @@ -3,4 +3,6 @@ part of 'game_codes_bloc.dart';
@freezed
abstract class GameCodesEvent with _$GameCodesEvent {
const factory GameCodesEvent.init() = _Init;

const factory GameCodesEvent.opened() = _Opened;
}
13 changes: 12 additions & 1 deletion lib/application/tierlist/tier_list_bloc.dart
Expand Up @@ -4,6 +4,7 @@ import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/domain/services/genshin_service.dart';
import 'package:genshindb/domain/services/logging_service.dart';
import 'package:genshindb/domain/services/telemetry_service.dart';
import 'package:meta/meta.dart';

Expand All @@ -14,6 +15,7 @@ part 'tier_list_state.dart';
class TierListBloc extends Bloc<TierListEvent, TierListState> {
final GenshinService _genshinService;
final TelemetryService _telemetryService;
final LoggingService _loggingService;
final List<int> defaultColors = [
0xfff44336,
0xffff9800,
Expand All @@ -24,7 +26,7 @@ class TierListBloc extends Bloc<TierListEvent, TierListState> {

_LoadedState get currentState => state as _LoadedState;

TierListBloc(this._genshinService, this._telemetryService) : super(const TierListState.loading());
TierListBloc(this._genshinService, this._telemetryService, this._loggingService) : super(const TierListState.loading());

@override
Stream<TierListState> mapEventToState(TierListEvent event) async* {
Expand All @@ -44,6 +46,15 @@ class TierListBloc extends Bloc<TierListEvent, TierListState> {
addCharacterToRow: (e) async => _addCharacterToRow(e.index, e.charImg),
deleteCharacterFromRow: (e) async => _deleteCharacterFromRow(e.index, e.charImg),
readyToSave: (e) async => currentState.copyWith.call(readyToSave: e.ready),
screenshotTaken: (e) async {
if (e.succeed) {
await _telemetryService.trackTierListBuilderScreenShootTaken();
} else {
_loggingService.error(runtimeType, 'Something went wrong while taking the tier list builder screenshot', e.ex, e.trace);
}

return currentState;
},
);

yield s;
Expand Down
6 changes: 6 additions & 0 deletions lib/application/tierlist/tier_list_event.dart
Expand Up @@ -45,4 +45,10 @@ abstract class TierListEvent with _$TierListEvent {
}) = _DeleteCharacterFromRow;

const factory TierListEvent.readyToSave({@required bool ready}) = _ReadyToSave;

const factory TierListEvent.screenshotTaken({
@required bool succeed,
dynamic ex,
StackTrace trace,
}) = _ScreenshotTaken;
}
4 changes: 4 additions & 0 deletions lib/domain/services/telemetry_service.dart
Expand Up @@ -29,4 +29,8 @@ abstract class TelemetryService {
Future<void> trackTierListOpened();

Future<void> trackInit(AppSettings settings);

Future<void> trackGameCodesOpened();

Future<void> trackTierListBuilderScreenShootTaken();
}
10 changes: 7 additions & 3 deletions lib/infrastructure/telemetry/telemetry_service.dart
Expand Up @@ -81,9 +81,7 @@ class TelemetryServiceImpl implements TelemetryService {
}

@override
Future<void> trackTierListOpened() async {
await trackEventAsync('TierList-Opened');
}
Future<void> trackTierListOpened() => trackEventAsync('TierList-Opened');

@override
Future<void> trackInit(AppSettings settings) async {
Expand All @@ -97,4 +95,10 @@ class TelemetryServiceImpl implements TelemetryService {
'ServerResetTime': EnumToString.convertToString(settings.serverResetTime),
});
}

@override
Future<void> trackGameCodesOpened() => trackEventAsync('GameCodes-Opened');

@override
Future<void> trackTierListBuilderScreenShootTaken() => trackEventAsync('TierListBuilder-ScreenShootTaken');
}
6 changes: 4 additions & 2 deletions lib/main.dart
Expand Up @@ -96,7 +96,8 @@ class MyApp extends StatelessWidget {
BlocProvider(
create: (ctx) {
final genshinService = getIt<GenshinService>();
return GameCodesBloc(genshinService);
final telemetryService = getIt<TelemetryService>();
return GameCodesBloc(genshinService, telemetryService);
},
),
BlocProvider(
Expand Down Expand Up @@ -142,7 +143,8 @@ class MyApp extends StatelessWidget {
create: (_) {
final genshinService = getIt<GenshinService>();
final telemetryService = getIt<TelemetryService>();
return TierListBloc(genshinService, telemetryService);
final loggingService = getIt<LoggingService>();
return TierListBloc(genshinService, telemetryService, loggingService);
},
),
],
Expand Down
31 changes: 17 additions & 14 deletions lib/presentation/game_codes/game_codes_page.dart
Expand Up @@ -23,22 +23,25 @@ class GameCodesPage extends StatelessWidget {
appBar: AppBar(title: Text(s.gameCodes)),
body: SafeArea(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
BlocBuilder<GameCodesBloc, GameCodesState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => _buildTableCard(s.workingCodes, state.workingGameCodes, context),
child: Padding(
padding: Styles.edgeInsetAll10,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
BlocBuilder<GameCodesBloc, GameCodesState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => _buildTableCard(s.workingCodes, state.workingGameCodes, context),
),
),
),
BlocBuilder<GameCodesBloc, GameCodesState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => _buildTableCard(s.expiredCodes, state.expiredGameCodes, context),
BlocBuilder<GameCodesBloc, GameCodesState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => _buildTableCard(s.expiredCodes, state.expiredGameCodes, context),
),
),
),
],
],
),
),
),
),
Expand Down
1 change: 1 addition & 0 deletions lib/presentation/settings/widgets/other_settings.dart
Expand Up @@ -110,6 +110,7 @@ class OtherSettings extends StatelessWidget {
}

Future<void> _showGameCodesDialog(BuildContext context) async {
context.read<GameCodesBloc>().add(const GameCodesEvent.opened());
await Navigator.push(context, MaterialPageRoute(fullscreenDialog: true, builder: (ctx) => const GameCodesPage()));
}
}
5 changes: 4 additions & 1 deletion lib/presentation/tierlist/tier_list_page.dart
Expand Up @@ -118,6 +118,7 @@ class _TierListPageState extends State<TierListPage> {

Future<void> _takeScreenshot() async {
final s = S.of(context);
final bloc = context.read<TierListBloc>();
try {
if (!await Permission.storage.request().isGranted) {
ToastUtils.showInfoToast(s.acceptToSaveImg);
Expand All @@ -127,8 +128,10 @@ class _TierListPageState extends State<TierListPage> {
final bytes = await screenshotController.capture(pixelRatio: 1.5);
ImageGallerySaver.saveImage(bytes, quality: 100);
ToastUtils.showSucceedToast(s.imgSavedSuccessfully);
} catch (e) {
bloc.add(const TierListEvent.screenshotTaken(succeed: true));
} catch (e, trace) {
ToastUtils.showErrorToast(s.unknownError);
bloc.add(TierListEvent.screenshotTaken(succeed: false, ex: e, trace: trace));
}
}
}

0 comments on commit ee56d69

Please sign in to comment.