Skip to content

Commit 730c291

Browse files
authored
chore: remove change and reset path settings (#8010)
* chore: remove change and reset path settings * chore: show reset when custom * chore: tooltip * chore: reorganize code * chore: reorganize code * chore: use bloc instead and move logic to repository * chore: listener * chore: enable for cloud * chore: add bloc test
1 parent 800cefa commit 730c291

File tree

13 files changed

+477
-185
lines changed

13 files changed

+477
-185
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:equatable/equatable.dart';
2+
3+
class UserDataLocation extends Equatable {
4+
const UserDataLocation({
5+
required this.path,
6+
required this.isCustom,
7+
});
8+
9+
final String path;
10+
final bool isCustom;
11+
12+
@override
13+
List<Object?> get props => [path, isCustom];
14+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import 'package:appflowy/startup/startup.dart';
2+
import 'package:appflowy/startup/tasks/rust_sdk.dart';
3+
import 'package:appflowy/user/application/user_settings_service.dart';
4+
import 'package:appflowy/workspace/application/settings/prelude.dart';
5+
import 'package:appflowy_backend/protobuf/flowy-error/protobuf.dart';
6+
import 'package:appflowy_result/appflowy_result.dart';
7+
8+
import '../models/user_data_location.dart';
9+
import 'settings_repository.dart';
10+
11+
class RustSettingsRepositoryImpl implements SettingsRepository {
12+
const RustSettingsRepositoryImpl();
13+
14+
final _userBackendService = const UserSettingsBackendService();
15+
16+
@override
17+
Future<FlowyResult<UserDataLocation, FlowyError>>
18+
getUserDataLocation() async {
19+
final defaultDirectory = (await appFlowyApplicationDataDirectory()).path;
20+
final result = await _userBackendService.getUserSetting();
21+
22+
return result.map(
23+
(settings) {
24+
final userDirectory = settings.userFolder;
25+
return UserDataLocation(
26+
path: userDirectory,
27+
isCustom: userDirectory.contains(defaultDirectory),
28+
);
29+
},
30+
);
31+
}
32+
33+
@override
34+
Future<FlowyResult<UserDataLocation, FlowyError>>
35+
resetUserDataLocation() async {
36+
final directory = await appFlowyApplicationDataDirectory();
37+
await getIt<ApplicationDataStorage>().setPath(directory.path);
38+
39+
return FlowyResult.success(
40+
UserDataLocation(
41+
path: directory.path,
42+
isCustom: false,
43+
),
44+
);
45+
}
46+
47+
@override
48+
Future<FlowyResult<UserDataLocation, FlowyError>> setCustomLocation(
49+
String path,
50+
) async {
51+
final defaultDirectory = (await appFlowyApplicationDataDirectory()).path;
52+
await getIt<ApplicationDataStorage>().setCustomPath(path);
53+
54+
return FlowyResult.success(
55+
UserDataLocation(
56+
path: path,
57+
isCustom: path.contains(defaultDirectory),
58+
),
59+
);
60+
}
61+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:appflowy_backend/protobuf/flowy-error/protobuf.dart';
2+
import 'package:appflowy_result/appflowy_result.dart';
3+
4+
import '../models/user_data_location.dart';
5+
6+
abstract class SettingsRepository {
7+
Future<FlowyResult<UserDataLocation, FlowyError>> getUserDataLocation();
8+
9+
Future<FlowyResult<UserDataLocation, FlowyError>> resetUserDataLocation();
10+
11+
Future<FlowyResult<UserDataLocation, FlowyError>> setCustomLocation(
12+
String path,
13+
);
14+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import 'package:appflowy_result/appflowy_result.dart';
2+
import 'package:flutter_bloc/flutter_bloc.dart';
3+
4+
import '../data/repositories/settings_repository.dart';
5+
import 'data_location_event.dart';
6+
import 'data_location_state.dart';
7+
8+
class DataLocationBloc extends Bloc<DataLocationEvent, DataLocationState> {
9+
DataLocationBloc({
10+
required SettingsRepository repository,
11+
}) : _repository = repository,
12+
super(DataLocationState.initial()) {
13+
on<DataLocationInitial>(_onStarted);
14+
on<DataLocationResetToDefault>(_onResetToDefault);
15+
on<DataLocationSetCustomPath>(_onSetCustomPath);
16+
on<DataLocationClearState>(_onClearState);
17+
}
18+
19+
final SettingsRepository _repository;
20+
21+
Future<void> _onStarted(
22+
DataLocationInitial event,
23+
Emitter<DataLocationState> emit,
24+
) async {
25+
final userDataLocation =
26+
await _repository.getUserDataLocation().toNullable();
27+
28+
emit(
29+
DataLocationState(
30+
userDataLocation: userDataLocation,
31+
didResetToDefault: false,
32+
),
33+
);
34+
}
35+
36+
Future<void> _onResetToDefault(
37+
DataLocationResetToDefault event,
38+
Emitter<DataLocationState> emit,
39+
) async {
40+
final defaultLocation =
41+
await _repository.resetUserDataLocation().toNullable();
42+
43+
emit(
44+
DataLocationState(
45+
userDataLocation: defaultLocation,
46+
didResetToDefault: true,
47+
),
48+
);
49+
}
50+
51+
Future<void> _onClearState(
52+
DataLocationClearState event,
53+
Emitter<DataLocationState> emit,
54+
) async {
55+
emit(
56+
state.copyWith(
57+
didResetToDefault: false,
58+
),
59+
);
60+
}
61+
62+
Future<void> _onSetCustomPath(
63+
DataLocationSetCustomPath event,
64+
Emitter<DataLocationState> emit,
65+
) async {
66+
final userDataLocation =
67+
await _repository.setCustomLocation(event.path).toNullable();
68+
69+
emit(
70+
state.copyWith(
71+
userDataLocation: userDataLocation,
72+
didResetToDefault: false,
73+
),
74+
);
75+
}
76+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
sealed class DataLocationEvent {
2+
const DataLocationEvent();
3+
4+
factory DataLocationEvent.initial() = DataLocationInitial;
5+
6+
factory DataLocationEvent.resetToDefault() = DataLocationResetToDefault;
7+
8+
factory DataLocationEvent.setCustomPath(String path) =
9+
DataLocationSetCustomPath;
10+
11+
factory DataLocationEvent.clearState() = DataLocationClearState;
12+
}
13+
14+
class DataLocationInitial extends DataLocationEvent {}
15+
16+
class DataLocationResetToDefault extends DataLocationEvent {}
17+
18+
class DataLocationSetCustomPath extends DataLocationEvent {
19+
const DataLocationSetCustomPath(this.path);
20+
21+
final String path;
22+
}
23+
24+
class DataLocationClearState extends DataLocationEvent {}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:equatable/equatable.dart';
2+
3+
import '../data/models/user_data_location.dart';
4+
5+
class DataLocationState extends Equatable {
6+
const DataLocationState({
7+
required this.userDataLocation,
8+
required this.didResetToDefault,
9+
});
10+
11+
factory DataLocationState.initial() =>
12+
const DataLocationState(userDataLocation: null, didResetToDefault: false);
13+
14+
final UserDataLocation? userDataLocation;
15+
final bool didResetToDefault;
16+
17+
@override
18+
List<Object?> get props => [userDataLocation, didResetToDefault];
19+
20+
DataLocationState copyWith({
21+
UserDataLocation? userDataLocation,
22+
bool? didResetToDefault,
23+
}) {
24+
return DataLocationState(
25+
userDataLocation: userDataLocation ?? this.userDataLocation,
26+
didResetToDefault: didResetToDefault ?? this.didResetToDefault,
27+
);
28+
}
29+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export 'logic/data_location_bloc.dart';
2+
export 'logic/data_location_event.dart';
3+
export 'logic/data_location_state.dart';
4+
export 'data/models/user_data_location.dart';
5+
export 'data/repositories/settings_repository.dart';
6+
export 'data/repositories/rust_settings_repository_impl.dart';

frontend/appflowy_flutter/lib/user/application/user_settings_service.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import 'package:appflowy_backend/protobuf/flowy-user/user_setting.pb.dart';
66
import 'package:appflowy_result/appflowy_result.dart';
77

88
class UserSettingsBackendService {
9+
const UserSettingsBackendService();
10+
911
Future<AppearanceSettingsPB> getAppearanceSetting() async {
1012
final result = await UserEventGetAppearanceSetting().send();
1113

frontend/appflowy_flutter/lib/workspace/application/settings/settings_location_cubit.dart

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)