Skip to content

Commit

Permalink
Do work around editing game variants in db editor. Now the editor sho…
Browse files Browse the repository at this point in the history
…ws, even if with bugs
  • Loading branch information
SiekamCebule committed Sep 17, 2024
1 parent 16a745c commit 61757a0
Show file tree
Hide file tree
Showing 17 changed files with 281 additions and 163 deletions.
109 changes: 29 additions & 80 deletions lib/bloc/database_editing/local_database_copy_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,104 +3,54 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:sj_manager/json/db_items_json.dart';
import 'package:sj_manager/models/simulation_db/competition/rules/competition_rules/default_competition_rules_preset.dart';
import 'package:sj_manager/models/simulation_db/event_series/event_series_calendar_preset.dart';
import 'package:sj_manager/models/simulation_db/event_series/event_series_setup.dart';
import 'package:sj_manager/models/user_db/db_items_file_system_paths.dart';
import 'package:sj_manager/models/game_variants/game_variant.dart';
import 'package:sj_manager/models/user_db/country/country.dart';
import 'package:sj_manager/models/user_db/hill/hill.dart';
import 'package:sj_manager/models/user_db/jumper/jumper.dart';
import 'package:sj_manager/models/user_db/items_repos_registry.dart';
import 'package:sj_manager/repositories/generic/db_items_json_configuration.dart';
import 'package:sj_manager/models/user_db/team/team.dart';
import 'package:sj_manager/repositories/countries/countries_repo.dart';
import 'package:sj_manager/repositories/countries/country_facts/teams_repo.dart';
import 'package:sj_manager/repositories/generic/editable_items_repo.dart';
import 'package:sj_manager/repositories/generic/items_ids_repo.dart';
import 'package:sj_manager/utils/file_system.dart';

import 'package:path/path.dart' as path;
import 'package:sj_manager/repositories/generic/items_repo.dart';

class LocalDatabaseCopyCubit extends Cubit<ItemsReposRegistry?> {
LocalDatabaseCopyCubit({
required this.originalDb,
required this.gameVariant,
required this.gameVariantsRepo,
required this.idsRepo,
}) : super(null);

ItemsReposRegistry originalDb;
final GameVariant gameVariant;
final ItemsRepo<GameVariant> gameVariantsRepo;
final ItemsIdsRepo idsRepo;

Future<void> setUp() async {
emit(
originalDb.clone(),
ItemsReposRegistry(initial: {
CountriesRepo(initial: gameVariant.countries.toList()),
TeamsRepo(initial: gameVariant.teams.toList()),
EditableItemsRepo<MaleJumper>(
initial: gameVariant.jumpers.whereType<MaleJumper>().toList()),
EditableItemsRepo<FemaleJumper>(
initial: gameVariant.jumpers.whereType<FemaleJumper>().toList()),
ItemsRepo<Hill>(initial: gameVariant.hills.toList()),
}),
);
}

Future<void> saveChangesToOriginalRepos(BuildContext context) async {
final reposMayChange = state!.last.whereType<EditableItemsRepo>();
for (var repo in reposMayChange) {
final itemsType = repo.itemsType;
originalDb.byTypeArgument(itemsType).set(repo.last);
if (!context.mounted) return;
final file = databaseFile(context.read(),
context.read<DbItemsFilePathsRegistry>().byTypeArgument(itemsType));
await _saveItemsToJsonByTypeArgument(itemsType, context: context, file: file);
}
}

Future<void> _saveItemsToJsonByTypeArgument(Type type,
{required BuildContext context, required File file}) async {
if (type == MaleJumper) {
await _saveItemsToJsonByType<MaleJumper>(
file: file,
context: context,
);
} else if (type == FemaleJumper) {
await _saveItemsToJsonByType<FemaleJumper>(
file: file,
context: context,
);
} else if (type == Hill) {
await _saveItemsToJsonByType<Hill>(
file: file,
context: context,
);
} else if (type == EventSeriesSetup) {
await _saveItemsToJsonByType<EventSeriesSetup>(
file: file,
context: context,
);
} else if (type == EventSeriesCalendarPreset) {
await _saveItemsToJsonByType<EventSeriesCalendarPreset>(
file: file,
context: context,
);
} else if (type == DefaultCompetitionRulesPreset) {
await _saveItemsToJsonByType<DefaultCompetitionRulesPreset>(
file: file,
context: context,
);
}
}

Future<void> _saveItemsToJsonByType<T>({
required BuildContext context,
required File file,
}) async {
await saveItemsMapToJsonFile(
file: file,
items: originalDb.get<T>().last.toList(),
toJson: context.read<DbItemsJsonConfiguration<T>>().toJson,
idsRepo: idsRepo,
Future<void> saveChangesToGameVariant(BuildContext context) async {
final newVariant = gameVariant.copyWith(
jumpers: state!.get<Jumper>().last.toList(),
countries: state!.get<Country>().last.toList(),
teams: state!.get<Team>().last.toList(),
hills: state!.get<Hill>().last.toList(),
);
}

Future<void> saveAs(BuildContext context, Directory directory) async {
for (var repo in state!.last) {
if (!context.mounted) return;
final fileName = path.basename(
context.read<DbItemsFilePathsRegistry>().byTypeArgument(repo.runtimeType));
final file = fileInDirectory(directory, fileName);
await _saveItemsToJsonByTypeArgument(repo.runtimeType,
context: context, file: file);
}
gameVariantsRepo.set(gameVariantsRepo.last.map((variant) {
return variant.id == newVariant.id ? newVariant : variant;
}));
// TODO: Save to file
}

Future<void> loadExternal(BuildContext context, Directory directory) async {
Expand All @@ -111,7 +61,6 @@ class LocalDatabaseCopyCubit extends Cubit<ItemsReposRegistry?> {
}

void dispose() {
originalDb.dispose();
state?.dispose();
}
}
3 changes: 3 additions & 0 deletions lib/l10n/app_pl.arb
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@
"ok": "Ok",
"loadingError": "Błąd wczytywania",
"invalidDatabaseFolderWarning": "Wybrany folder nie zawiera poprawnej bazy danych",
"pathNotFoundWhenLoadingDatabase": "Podczas ładowania bazy danych nie znaleziono ścieżki",
"countryNotFound": "Nie znaleziono kraju",
"osError": "Błąd systemu operacyjnego",
"load": "Wczytaj",
"saveAs": "Zapisz jako",
"filterByCountry": "Filtruj wg kraju",
Expand Down
15 changes: 11 additions & 4 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import 'package:sj_manager/json/simulation_db_saving/standings_serializer.dart';
import 'package:sj_manager/json/simulation_db_saving/team_competition_group_rules_serializer.dart';
import 'package:sj_manager/json/manual_json/json_team.dart';
import 'package:sj_manager/json/simulation_db_saving/wind_averager_serializer.dart';
import 'package:sj_manager/models/game_variants/game_variant.dart';
import 'package:sj_manager/models/simulation_db/classification/classification.dart';
import 'package:sj_manager/models/simulation_db/competition/rules/competition_round_rules/default_competition_round_rules.dart';
import 'package:sj_manager/models/simulation_db/competition/rules/competition_rules/default_competition_rules.dart';
Expand All @@ -81,9 +82,10 @@ import 'package:sj_manager/repositories/countries/country_flags/country_flags_re
import 'package:sj_manager/repositories/countries/country_flags/local_storage_country_flags_repo.dart';
import 'package:sj_manager/repositories/generic/editable_items_repo.dart';
import 'package:sj_manager/repositories/generic/items_ids_repo.dart';
import 'package:sj_manager/repositories/generic/items_repo.dart';
import 'package:sj_manager/repositories/settings/local_user_settings_repo.dart';
import 'package:sj_manager/repositories/settings/user_settings_repo.dart';
import 'package:sj_manager/setup/default_loaders.dart';
import 'package:sj_manager/setup/game_variants_loader.dart';
import 'package:sj_manager/ui/app.dart';
import 'package:sj_manager/ui/app_initializer.dart';
import 'package:sj_manager/ui/providers/locale_cubit.dart';
Expand Down Expand Up @@ -205,10 +207,10 @@ void main() async {
create: (context) => DbItemsFilePathsRegistry(initial: {
MaleJumper: 'jumpers_male.json',
FemaleJumper: 'jumpers_female.json',
Hill: 'hills.json',
/*Hill: 'hills.json',
EventSeriesSetup: 'event_series_setups.json',
EventSeriesCalendarPreset: 'event_series_calendar_presets.json',
DefaultCompetitionRulesPreset: 'default_competition_rules_presets.json',
DefaultCompetitionRulesPreset: 'default_competition_rules_presets.json',*/
Country: path.join('countries', 'countries.json'),
Team: path.join('teams', 'teams.json'),
}),
Expand Down Expand Up @@ -464,6 +466,9 @@ void main() async {
Provider.value(
value: pathsCache,
),
Provider(
create: (context) => ItemsRepo<GameVariant>(),
),
],
child: MultiBlocProvider(
providers: [
Expand All @@ -479,7 +484,9 @@ void main() async {
shouldSetUpRouting: true,
shouldSetUpUserData: true,
shouldLoadDatabase: true,
createLoaders: (context) => defaultDbItemsListLoaders(context),
createLoaders: (context) => [
GameVariantsLoader(context: context),
],
child: const MainScreen(),
);
}),
Expand Down
Loading

0 comments on commit 61757a0

Please sign in to comment.