Skip to content

Commit c3a3ae8

Browse files
committed
End refactoring (fix bugs), add global error dialog, fix filtering in database editor
1 parent 12b115f commit c3a3ae8

File tree

51 files changed

+449
-292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+449
-292
lines changed

lib/algorithms/reports/training_progress_report/training_report_creator.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ class TrainingReportCreator {
5454
ratings[TrainingProgressCategory.form]!.impactValue * 15) /
5555
100 *
5656
2.5;
57-
final generalRating = SimpleRating.fromImpactValue(averageRatingImpact.round());
57+
final generalRating =
58+
SimpleRating.fromImpactValue(averageRatingImpact.round().clamp(-3, 3));
5859

5960
return TrainingReport(
6061
generalRating: generalRating,

lib/bloc/database_editing/database_editor_countries_cubit.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ import 'package:sj_manager/repositories/generic/items_repo.dart';
88

99
class DatabaseEditorCountriesCubit extends Cubit<DatabaseEditorCountriesState> {
1010
DatabaseEditorCountriesCubit({
11-
required this.countriesRepo,
11+
required this.countries,
1212
required this.teamsRepo,
1313
}) : super(
1414
const DatabaseEditorCountriesInitial(),
1515
);
1616

17-
final CountriesRepo countriesRepo;
17+
final CountriesRepo countries;
1818
final ItemsRepo<CountryTeam> teamsRepo;
1919

2020
void setUp() {
2121
final rawTeams = teamsRepo.last.toList();
22-
final noneCountry = countriesRepo.none;
22+
final noneCountry = countries.none;
2323

2424
final maleTeamsByStars = _teamsBySex(_teamsByStars(rawTeams), Sex.male);
2525
final femaleTeamsByStars = _teamsBySex(_teamsByStars(rawTeams), Sex.female);

lib/bloc/database_editing/database_items_cubit.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class DatabaseItemsCubit extends Cubit<DatabaseItemsState> {
3030
final Set<StreamSubscription> _subscriptions = {};
3131

3232
StreamSubscription? _itemsSubscription;
33-
final _filtersStreamController = StreamController<void>();
33+
final _filtersStreamController = BehaviorSubject.seeded(null);
3434

3535
List<T> _filter<T>(List<dynamic> items, List<Filter<dynamic>> filters) {
3636
return Filter.filterAll(items.cast<T>(), filters.cast<Filter<T>>()).toList();
@@ -42,9 +42,9 @@ class DatabaseItemsCubit extends Cubit<DatabaseItemsState> {
4242
required List<Filter> filters,
4343
}) {
4444
if (type == MaleJumperDbRecord) {
45-
return _filter<MaleJumperDbRecord>(items, filters);
45+
return _filter<JumperDbRecord>(items, filters);
4646
} else if (type == FemaleJumperDbRecord) {
47-
return _filter<FemaleJumperDbRecord>(items, filters);
47+
return _filter<JumperDbRecord>(items, filters);
4848
} else {
4949
throw UnsupportedError('(DatabaseItemsCubit) Unsupported item type: $type');
5050
}

lib/bloc/database_editing/local_database_cubit.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/cupertino.dart';
22
import 'package:flutter/widgets.dart';
33
import 'package:flutter_bloc/flutter_bloc.dart';
4+
import 'package:sj_manager/models/database/team/country_team/country_team.dart';
45
import 'package:sj_manager/models/game_variants/game_variant.dart';
56
import 'package:sj_manager/models/game_variants/game_variants_io_utils.dart';
67
import 'package:sj_manager/models/database/jumper/jumper_db_record.dart';
@@ -14,11 +15,13 @@ class LocalDatabaseState {
1415
required this.maleJumpersRepo,
1516
required this.femaleJumpersRepo,
1617
required this.countriesRepo,
18+
required this.countryTeamsRepo,
1719
});
1820

1921
final EditableItemsRepo<MaleJumperDbRecord> maleJumpersRepo;
2022
final EditableItemsRepo<FemaleJumperDbRecord> femaleJumpersRepo;
2123
final CountriesRepo countriesRepo;
24+
final ItemsRepo<CountryTeam> countryTeamsRepo;
2225
}
2326

2427
class LocalDatabaseCubit extends Cubit<LocalDatabaseState?> {
@@ -38,6 +41,7 @@ class LocalDatabaseCubit extends Cubit<LocalDatabaseState?> {
3841
initial: gameVariant.jumpers.whereType<MaleJumperDbRecord>().toList()),
3942
femaleJumpersRepo: EditableItemsRepo<FemaleJumperDbRecord>(
4043
initial: gameVariant.jumpers.whereType<FemaleJumperDbRecord>().toList()),
44+
countryTeamsRepo: ItemsRepo(initial: gameVariant.countryTeams),
4145
),
4246
);
4347
}

lib/commands/simulation_database/simulation_database_commander.dart

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:sj_manager/algorithms/start_form/default_start_form_algorithm.dart';
22
import 'package:sj_manager/algorithms/training_engine/jumper_training_result.dart';
33
import 'package:sj_manager/models/simulation/database/actions/simulation_action_type.dart';
4+
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
45
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
56
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
67
import 'package:sj_manager/models/simulation/jumper/stats/jumper_stats.dart';
@@ -9,10 +10,13 @@ import 'package:sj_manager/models/simulation/flow/training/jumper_training_confi
910
import 'package:sj_manager/models/database/team/subteam.dart';
1011

1112
class SimulationDatabaseCommander {
12-
const SimulationDatabaseCommander({
13+
SimulationDatabaseCommander({
1314
required this.database,
14-
});
15+
}) {
16+
dbHelper = SimulationDatabaseHelper(database: database);
17+
}
1518

19+
late SimulationDatabaseHelper dbHelper;
1620
final SimulationDatabase database;
1721

1822
/*SimulationDatabase setIdsRepo({
@@ -58,11 +62,12 @@ class SimulationDatabaseCommander {
5862
void setSubteam({
5963
required Subteam subteam,
6064
required Iterable<SimulationJumper> jumpers,
61-
required Object subteamNewId,
65+
required String subteamNewId,
6266
}) {
6367
database.idsRepo.removeById(id: subteamNewId);
6468
database.idsRepo.register(subteam, id: subteamNewId);
65-
database.subteamJumpers[subteam] = jumpers;
69+
final jumperIds = jumpers.map(dbHelper.id);
70+
database.subteamJumpers[subteam] = jumperIds.toList();
6671
database.notify();
6772
}
6873

@@ -79,7 +84,7 @@ class SimulationDatabaseCommander {
7984
jumper.jumpsConsistency = result.jumpsConsistency;
8085
jumper.fatigue = result.fatigue;
8186

82-
final attributeHistory = database.jumperStats[jumper]!.progressableAttributeHistory;
87+
final attributeHistory = dbHelper.jumperStats(jumper)!.progressableAttributeHistory;
8388

8489
attributeHistory[TrainingProgressCategory.takeoff]!
8590
.register(result.takeoffQuality, date: date);
@@ -97,23 +102,23 @@ class SimulationDatabaseCommander {
97102
required SimulationJumper jumper,
98103
required JumperStats stats,
99104
}) {
100-
database.jumperStats[jumper] = stats;
105+
database.jumperStats[dbHelper.id(jumper)] = stats;
101106
database.notify();
102107
}
103108

104109
void setMonthlyReport({
105110
required SimulationJumper jumper,
106111
required TrainingReport? report,
107112
}) {
108-
database.jumperReports[jumper]!.monthlyTrainingReport = report;
113+
database.jumperReports[dbHelper.id(jumper)]!.monthlyTrainingReport = report;
109114
database.notify();
110115
}
111116

112117
void setWeeklyReport({
113118
required SimulationJumper jumper,
114119
required TrainingReport? report,
115120
}) {
116-
database.jumperReports[jumper]!.weeklyTrainingReport = report;
121+
database.jumperReports[dbHelper.id(jumper)]!.weeklyTrainingReport = report;
117122
database.notify();
118123
}
119124
}

lib/commands/ui/main_menu/create_new_simulation_command.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,6 @@ class CreateNewSimulationCommand {
117117
context: context,
118118
database: _database,
119119
levelRequirements: simulationOptions.gameVariant.last!.jumperLevelRequirements,
120-
onFinish: (changedDatabase) {
121-
_database = changedDatabase;
122-
},
123120
).execute();
124121
}
125122

lib/commands/ui/simulation/jumper_reports/create_monthly_training_progress_reports_command.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:sj_manager/algorithms/reports/training_progress_report/monthly_jumper_training_progress_report_creator.dart';
22
import 'package:sj_manager/commands/simulation_database/simulation_database_commander.dart';
3+
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
34
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
45
import 'package:sj_manager/models/simulation/jumper/reports/jumper_reports.dart';
56
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
@@ -17,9 +18,10 @@ class CreateMonthlyTrainingProgressReportsCommand {
1718

1819
void execute() {
1920
final reports = <SimulationJumper, TrainingReport?>{};
21+
final dbHelper = SimulationDatabaseHelper(database: database);
2022
for (var jumper in database.jumpers) {
2123
final attributeHistrory =
22-
database.jumperStats[jumper]!.progressableAttributeHistory;
24+
dbHelper.jumperStats(jumper)!.progressableAttributeHistory;
2325
List<double> getDeltas(TrainingProgressCategory category) {
2426
final deltas = attributeHistrory[category]!.toDeltasList();
2527
final lastDeltas = deltas.reversed

lib/commands/ui/simulation/jumper_reports/create_weekly_training_progress_reports_command.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:sj_manager/algorithms/reports/training_progress_report/weekly_jumper_training_progress_report_creator.dart';
22
import 'package:sj_manager/commands/simulation_database/simulation_database_commander.dart';
3+
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
34
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
45
import 'package:sj_manager/models/simulation/jumper/reports/jumper_reports.dart';
56
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
@@ -11,10 +12,11 @@ class CreateWeeklyTrainingProgressReportsCommand {
1112
final SimulationDatabase database;
1213

1314
void execute() {
15+
final dbHelper = SimulationDatabaseHelper(database: database);
1416
final reports = <SimulationJumper, TrainingReport?>{};
1517
for (var jumper in database.jumpers) {
1618
final attributeHistrory =
17-
database.jumperStats[jumper]!.progressableAttributeHistory;
19+
dbHelper.jumperStats(jumper)!.progressableAttributeHistory;
1820
List<double> getDeltas(TrainingProgressCategory category) {
1921
final deltas = attributeHistrory[category]!.toDeltasList();
2022
final lastDeltas = deltas.reversed.take(7).toList().reversed.toList();
Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:sj_manager/algorithms/reports/default_jumper_level_report_creator.dart';
3+
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
34
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
45
import 'package:sj_manager/models/simulation/jumper/reports/jumper_level_description.dart';
56

@@ -8,24 +9,18 @@ class SetUpJumperLevelReportsCommand {
89
required this.context,
910
required this.database,
1011
required this.levelRequirements,
11-
required this.onFinish,
1212
});
1313

1414
final BuildContext context;
1515
final SimulationDatabase database;
1616
final Map<JumperLevelDescription, double> levelRequirements;
17-
final void Function(SimulationDatabase changedDatabase) onFinish;
1817

1918
void execute() {
20-
final changedJumpersReports = Map.of(database.jumperReports);
19+
final dbHelper = SimulationDatabaseHelper(database: database);
2120
for (var jumper in database.jumpers) {
2221
final report = DefaultJumperLevelReportCreator(requirements: levelRequirements)
2322
.create(jumper: jumper);
24-
changedJumpersReports[jumper] =
25-
changedJumpersReports[jumper]!.copyWith(levelReport: report);
23+
database.jumperReports[dbHelper.id(jumper)]!.levelReport = report;
2624
}
27-
28-
final changedDatabase = database.copyWith(jumperReports: changedJumpersReports);
29-
onFinish(changedDatabase);
3025
}
3126
}

lib/commands/ui/simulation/manage_partnerships_command.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'package:provider/provider.dart';
33
import 'package:sj_manager/commands/simulation_database/simulation_database_commander.dart';
44
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
55
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
6-
import 'package:sj_manager/models/database/jumper/jumper_db_record.dart';
6+
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
77
import 'package:sj_manager/repositories/countries/country_flags/country_flags_repo.dart';
88
import 'package:sj_manager/ui/reusable_widgets/database_item_images/db_item_image_generating_setup.dart';
99
import 'package:sj_manager/ui/screens/simulation/large/dialogs/manage_partnerships/manage_partnerships_dialog.dart';
@@ -27,9 +27,10 @@ class ManagePartnershipsCommand {
2727
context: context,
2828
child: MultiProvider(
2929
providers: [
30+
Provider.value(value: helper),
3031
Provider.value(value: context.read<CountryFlagsRepo>()),
3132
Provider.value(
32-
value: context.read<DbItemImageGeneratingSetup<JumperDbRecord>>()),
33+
value: context.read<DbItemImageGeneratingSetup<SimulationJumper>>()),
3334
Provider.value(
3435
value: context.read<SimulationDatabase>(),
3536
),

lib/commands/ui/simulation/search_for_candidates_command.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_bloc/flutter_bloc.dart';
32
import 'package:provider/provider.dart';
43
import 'package:sj_manager/commands/simulation_database/simulation_database_commander.dart';
54
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
65
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
7-
import 'package:sj_manager/models/database/jumper/jumper_db_record.dart';
6+
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
87
import 'package:sj_manager/repositories/countries/country_flags/country_flags_repo.dart';
98
import 'package:sj_manager/ui/reusable_widgets/database_item_images/db_item_image_generating_setup.dart';
109
import 'package:sj_manager/ui/screens/simulation/large/dialogs/search_for_charges_jumpers/search_for_charges_jumpers_dialog.dart';
@@ -32,9 +31,11 @@ class SearchForCandidatesCommand {
3231
context: context,
3332
child: MultiProvider(
3433
providers: [
34+
Provider.value(value: helper),
3535
Provider.value(value: context.read<CountryFlagsRepo>()),
3636
Provider.value(
37-
value: context.read<DbItemImageGeneratingSetup<JumperDbRecord>>()),
37+
value: context.read<DbItemImageGeneratingSetup<SimulationJumper>>()),
38+
ChangeNotifierProvider.value(value: database),
3839
],
3940
child: SearchForChargesJumpersDialog(
4041
jumpers: jumpers,

lib/commands/ui/simulation/set_up_subteams_command.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:sj_manager/models/simulation/database/actions/simulation_action_
66
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
77
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
88
import 'package:sj_manager/models/simulation/flow/simulation_mode.dart';
9-
import 'package:sj_manager/models/database/jumper/jumper_db_record.dart';
109
import 'package:sj_manager/models/database/team/country_team/country_team.dart';
1110
import 'package:sj_manager/models/database/team/country_team/subteam_type.dart';
1211
import 'package:sj_manager/models/database/team/subteam.dart';
@@ -41,16 +40,18 @@ class SetUpSubteamsCommand {
4140
);
4241
});
4342
}
44-
if (database.managerData.mode == SimulationMode.personalCoach) {
45-
final dbHelper = context.read<SimulationDatabaseHelper>();
43+
final dbHelper = context.read<SimulationDatabaseHelper>();
44+
45+
if (database.managerData.mode == SimulationMode.personalCoach &&
46+
dbHelper.managerJumpers.isNotEmpty) {
4647
final charges = dbHelper.managerJumpers;
4748
await showSjmDialog(
4849
context: context,
4950
barrierDismissible: true,
5051
child: MultiProvider(
5152
providers: [
5253
Provider.value(
53-
value: context.read<DbItemImageGeneratingSetup<JumperDbRecord>>()),
54+
value: context.read<DbItemImageGeneratingSetup<SimulationJumper>>()),
5455
Provider.value(value: context.read<CountryFlagsRepo>()),
5556
],
5657
child: SizedBox(

lib/commands/ui/simulation/set_up_trainings_command.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'package:provider/provider.dart';
33
import 'package:sj_manager/commands/simulation_database/simulation_database_commander.dart';
44
import 'package:sj_manager/models/simulation/database/helper/simulation_database_helper.dart';
55
import 'package:sj_manager/models/simulation/database/simulation_database_and_models/simulation_database.dart';
6-
import 'package:sj_manager/models/database/jumper/jumper_db_record.dart';
6+
import 'package:sj_manager/models/simulation/jumper/simulation_jumper.dart';
77
import 'package:sj_manager/repositories/countries/country_flags/country_flags_repo.dart';
88
import 'package:sj_manager/ui/reusable_widgets/database_item_images/db_item_image_generating_setup.dart';
99
import 'package:sj_manager/ui/screens/simulation/large/dialogs/set_up_trainings/set_up_trainings_dialog.dart';
@@ -33,13 +33,13 @@ class SetUpTrainingsCommand {
3333
providers: [
3434
Provider.value(value: context.read<CountryFlagsRepo>()),
3535
Provider.value(
36-
value: context.read<DbItemImageGeneratingSetup<JumperDbRecord>>()),
36+
value: context.read<DbItemImageGeneratingSetup<SimulationJumper>>()),
3737
ChangeNotifierProvider.value(value: database),
3838
],
3939
child: SetUpTrainingsDialog(
4040
simulationMode: database.managerData.mode,
4141
jumpers: dbHelper.managerJumpers,
42-
jumpersSimulationRatings: database.jumperReports,
42+
jumpersSimulationRatings: dbHelper.jumperReportsMap,
4343
onSubmit: (result) {
4444
SimulationDatabaseCommander(database: database).setUpTrainings();
4545
onFinish(result);

lib/commands/ui/simulation/simulation_exit_command.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class SimulationExitCommand {
6161
}
6262

6363
void _cleanUpAndPop() {
64-
context.read<SimulationDatabase>().dispose();
6564
router.pop(context);
6665
}
6766
}

lib/filters/matching_algorithms/matching_by_text_algorithm.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ class DefaultMatchingByTextAlgorithm extends MatchingByTextAlgorithm {
2222

2323
@override
2424
bool matches() {
25-
return text.containsAllLetters(from: target);
25+
return target.toLowerCase().containsAllLetters(from: text.toLowerCase());
2626
}
2727
}

lib/json/simulation_db_saving/competition_rules_provider_serializer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class CompetitionRulesProviderSerializer
3030
Json _serializePreset(DefaultCompetitionRulesPreset rulesPreset) {
3131
return {
3232
'type': 'fromPreset',
33-
'presetId': idsRepo.idOf(rulesPreset),
33+
'presetId': idsRepo.id(rulesPreset),
3434
};
3535
}
3636
}

lib/json/simulation_db_saving/competition_serializer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class CompetitionSerializer implements SimulationDbPartSerializer<Competition> {
2323
final labelsJson =
2424
competition.labels.map((label) => _labelJsonString(label)).toList();
2525
return {
26-
'hillId': idsRepo.idOf(competition.hill),
26+
'hillId': idsRepo.id(competition.hill),
2727
'labels': labelsJson,
2828
'date': competition.date.toIso8601String(),
2929
'rules': competitionRulesSerializer.serialize(competition.rules),

lib/json/simulation_db_saving/default_classification_rules_serializer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class DefaultClassificationRulesSerializer
3434
classificationScoreCreatorSerializer.serialize(rules.classificationScoreCreator);
3535
final pointsMapJson = rules.pointsMap;
3636
final competitionIdsJson =
37-
rules.competitions.map((competition) => idsRepo.idOf(competition)).toList();
37+
rules.competitions.map((competition) => idsRepo.id(competition)).toList();
3838
final pointsModifiersJson = rules.pointsModifiers
39-
.map((competition, modifier) => MapEntry(idsRepo.idOf(competition), modifier));
39+
.map((competition, modifier) => MapEntry(idsRepo.id(competition), modifier));
4040

4141
return {
4242
'type': rules is DefaultIndividualClassificationRules ? 'individual' : 'team',

lib/json/simulation_db_saving/event_series_calendar_serializer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ class EventSeriesCalendarSerializer
5858

5959
FutureOr<MapEntry<Object, Object>> _serializeQualification(
6060
MapEntry<Competition, Competition> entry) async {
61-
return MapEntry(idsRepo.idOf(entry.key), idsRepo.idOf(entry.value));
61+
return MapEntry(idsRepo.id(entry.key), idsRepo.id(entry.value));
6262
}
6363
}

0 commit comments

Comments
 (0)