Skip to content
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
15 changes: 10 additions & 5 deletions lib/bloc/settings_bloc/settings_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,16 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {

Future<void> _onCheckSettings(
CheckSettingsEvent event, Emitter<SettingsState> emit) async {
bool settingsStatus = await _settingsRepository.checkValidJSON();
if (settingsStatus) {
add(GetSettingsEvent());
} else {
emit(SettingsErrorState("Couldn't parse json file"));
try {
bool settingsStatus = await _settingsRepository.checkValidJSON();
if (settingsStatus) {
add(GetSettingsEvent());
} else {
// Config was invalid but has been rewritten with defaults, load it
add(GetSettingsEvent());
}
} catch (e) {
emit(SettingsErrorState('Failed to initialize settings: $e'));
}
}

Expand Down
14 changes: 13 additions & 1 deletion lib/repositories/settings_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,24 @@ import 'package:ccxgui/utils/logger.dart';

class SettingsRepository {
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
// Use application support directory instead of documents directory.
// On Windows this is AppData\Roaming, on macOS ~/Library/Application Support,
// on Linux ~/.local/share. This is the proper location for app config files
// and avoids issues with OneDrive sync, permissions, etc.
final directory = await getApplicationSupportDirectory()
.timeout(const Duration(seconds: 10), onTimeout: () {
throw Exception('Timeout getting application support directory');
});
return directory.path;
}

Future<File> get _localFile async {
final path = await _localPath;
// Ensure directory exists before returning file reference
final dir = Directory(path);
if (!await dir.exists()) {
await dir.create(recursive: true);
}
return File('$path/config.json');
}

Expand Down