Skip to content

Commit 9ccd8e6

Browse files
authored
Merge pull request #24 from CoderJava/feature/buat-fitur-blur-screenshot
Feature - Buat fitur blur screenshot beserta dengan pengaturannya
2 parents 88b983e + a856f9e commit 9ccd8e6

File tree

43 files changed

+2299
-100
lines changed

Some content is hidden

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

43 files changed

+2299
-100
lines changed

assets/translations/en-US.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,5 +267,19 @@
267267
"please_set_start_time": "Please set start time",
268268
"please_set_finish_time": "Please set finish time",
269269
"title_new_update_available": "New update available",
270-
"description_new_update_available": "Click here to download latest version"
270+
"description_new_update_available": "Click here to download latest version",
271+
"screenshot_blur": "Screenshot Blur",
272+
"description_screenshot_blur_user": "Set blurred screenshots. Only super admin can change this configuration.",
273+
"refresh": "Refresh",
274+
"invalid_id_or_user_id": "Invalid ID or user ID",
275+
"subtitle_screenshot_blur": "Control members blur screenshot for security and privacy.",
276+
"enable_all": "Enable all",
277+
"disable_all": "Disable all",
278+
"member_n": {
279+
"zero": "Member",
280+
"one": "Member ({})",
281+
"many": "Members ({})",
282+
"other": "Members ({})"
283+
},
284+
"user_setting_updated_successfully": "User setting updated successfully"
271285
}

lib/feature/data/datasource/setting/setting_remote_data_source.dart

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import 'package:dio/dio.dart';
22
import 'package:dipantau_desktop_client/config/base_url_config.dart';
33
import 'package:dipantau_desktop_client/config/flavor_config.dart';
4+
import 'package:dipantau_desktop_client/feature/data/model/all_user_setting/all_user_setting_response.dart';
45
import 'package:dipantau_desktop_client/feature/data/model/kv_setting/kv_setting_body.dart';
56
import 'package:dipantau_desktop_client/feature/data/model/kv_setting/kv_setting_response.dart';
7+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_body.dart';
8+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_response.dart';
69

710
abstract class SettingRemoteDataSource {
811
/// Panggil endpoint [host]/setting/key-value
@@ -18,6 +21,27 @@ abstract class SettingRemoteDataSource {
1821
late String pathSetKvSetting;
1922

2023
Future<bool> setKvSetting(KvSettingBody body);
24+
25+
/// Panggil endpoint [host]/setting/user/all
26+
///
27+
/// Throws [DioException] untuk semua error kode
28+
late String pathGetAllUserSetting;
29+
30+
Future<AllUserSettingResponse> getAllUserSetting();
31+
32+
/// Panggil endpoint [host]/setting/user
33+
///
34+
/// Throws [DioException] untuk semua error kode
35+
late String pathGetUserSetting;
36+
37+
Future<UserSettingResponse> getUserSetting();
38+
39+
/// Panggil endpoint [host]/setting/user
40+
///
41+
/// Throws [DioException] untuk semua error kode
42+
late String pathUpdateUserSetting;
43+
44+
Future<bool> updateUserSetting(UserSettingBody body);
2145
}
2246

2347
class SettingRemoteDataSourceImpl implements SettingRemoteDataSource {
@@ -72,4 +96,68 @@ class SettingRemoteDataSourceImpl implements SettingRemoteDataSource {
7296
throw DioException(requestOptions: RequestOptions(path: pathSetKvSetting));
7397
}
7498
}
99+
100+
@override
101+
String pathGetAllUserSetting = '';
102+
103+
@override
104+
Future<AllUserSettingResponse> getAllUserSetting() async {
105+
pathGetAllUserSetting = '$baseUrl/user/all';
106+
final response = await dio.get(
107+
pathGetAllUserSetting,
108+
options: Options(
109+
headers: {
110+
baseUrlConfig.requiredToken: true,
111+
},
112+
),
113+
);
114+
if (response.statusCode.toString().startsWith('2')) {
115+
return AllUserSettingResponse.fromJson(response.data);
116+
} else {
117+
throw DioException(requestOptions: RequestOptions(path: pathGetAllUserSetting));
118+
}
119+
}
120+
121+
@override
122+
String pathGetUserSetting = '';
123+
124+
@override
125+
Future<UserSettingResponse> getUserSetting() async {
126+
pathGetUserSetting = '$baseUrl/user';
127+
final response = await dio.get(
128+
pathGetUserSetting,
129+
options: Options(
130+
headers: {
131+
baseUrlConfig.requiredToken: true,
132+
},
133+
),
134+
);
135+
if (response.statusCode.toString().startsWith('2')) {
136+
return UserSettingResponse.fromJson(response.data);
137+
} else {
138+
throw DioException(requestOptions: RequestOptions(path: pathGetUserSetting));
139+
}
140+
}
141+
142+
@override
143+
String pathUpdateUserSetting = '';
144+
145+
@override
146+
Future<bool> updateUserSetting(UserSettingBody body) async {
147+
pathUpdateUserSetting = '$baseUrl/user';
148+
final response = await dio.post(
149+
pathUpdateUserSetting,
150+
data: body.toJson(),
151+
options: Options(
152+
headers: {
153+
baseUrlConfig.requiredToken: true,
154+
},
155+
),
156+
);
157+
if (response.statusCode.toString().startsWith('2')) {
158+
return true;
159+
} else {
160+
throw DioException(requestOptions: RequestOptions(path: pathUpdateUserSetting));
161+
}
162+
}
75163
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:dipantau_desktop_client/feature/data/model/user_setting/user_setting_response.dart';
2+
import 'package:equatable/equatable.dart';
3+
import 'package:json_annotation/json_annotation.dart';
4+
5+
part 'all_user_setting_response.g.dart';
6+
7+
@JsonSerializable()
8+
class AllUserSettingResponse extends Equatable {
9+
@JsonKey(name: 'data')
10+
final List<UserSettingResponse>? data;
11+
12+
AllUserSettingResponse({required this.data});
13+
14+
factory AllUserSettingResponse.fromJson(Map<String, dynamic> json) => _$AllUserSettingResponseFromJson(json);
15+
16+
Map<String, dynamic> toJson() => _$AllUserSettingResponseToJson(this);
17+
18+
@override
19+
List<Object?> get props => [
20+
data,
21+
];
22+
23+
@override
24+
String toString() {
25+
return 'AllUserSettingResponse{data: $data}';
26+
}
27+
}
28+
29+

lib/feature/data/model/track_user/track_user_response.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,17 @@ class ItemFileTrackUserResponse extends Equatable {
106106
final String? url;
107107
@JsonKey(name: 'size')
108108
final int? sizeInByte;
109+
@JsonKey(name: 'url_blur')
110+
final String? urlBlur;
111+
@JsonKey(name: 'size_blur')
112+
final int? sizeBlurInByte;
109113

110114
ItemFileTrackUserResponse({
111115
required this.id,
112116
required this.url,
113117
required this.sizeInByte,
118+
required this.urlBlur,
119+
required this.sizeBlurInByte,
114120
});
115121

116122
factory ItemFileTrackUserResponse.fromJson(Map<String, dynamic> json) => _$ItemFileTrackUserResponseFromJson(json);
@@ -122,10 +128,13 @@ class ItemFileTrackUserResponse extends Equatable {
122128
id,
123129
url,
124130
sizeInByte,
131+
urlBlur,
132+
sizeBlurInByte,
125133
];
126134

127135
@override
128136
String toString() {
129-
return 'ItemFileTrackUserResponse{id: $id, url: $url, sizeInByte: $sizeInByte}';
137+
return 'ItemFileTrackUserResponse{id: $id, url: $url, sizeInByte: $sizeInByte, urlBlur: $urlBlur, '
138+
'sizeBlurInByte: $sizeBlurInByte}';
130139
}
131140
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import 'package:equatable/equatable.dart';
2+
import 'package:json_annotation/json_annotation.dart';
3+
4+
part 'user_setting_body.g.dart';
5+
6+
@JsonSerializable()
7+
class UserSettingBody extends Equatable {
8+
@JsonKey(name: 'data')
9+
final List<ItemUserSettingBody> data;
10+
11+
UserSettingBody({
12+
required this.data,
13+
});
14+
15+
factory UserSettingBody.fromJson(Map<String, dynamic> json) => _$UserSettingBodyFromJson(json);
16+
17+
Map<String, dynamic> toJson() => _$UserSettingBodyToJson(this);
18+
19+
@override
20+
List<Object?> get props => [
21+
data,
22+
];
23+
24+
@override
25+
String toString() {
26+
return 'UserSettingBody{data: $data}';
27+
}
28+
}
29+
30+
@JsonSerializable()
31+
class ItemUserSettingBody extends Equatable {
32+
@JsonKey(name: 'id')
33+
final int id;
34+
@JsonKey(name: 'is_enable_blur_screenshot')
35+
final bool isEnableBlurScreenshot;
36+
@JsonKey(name: 'user_id')
37+
final int userId;
38+
39+
ItemUserSettingBody({
40+
required this.id,
41+
required this.isEnableBlurScreenshot,
42+
required this.userId,
43+
});
44+
45+
factory ItemUserSettingBody.fromJson(Map<String, dynamic> json) => _$ItemUserSettingBodyFromJson(json);
46+
47+
Map<String, dynamic> toJson() => _$ItemUserSettingBodyToJson(this);
48+
49+
@override
50+
List<Object?> get props => [
51+
id,
52+
isEnableBlurScreenshot,
53+
userId,
54+
];
55+
56+
@override
57+
String toString() {
58+
return 'ItemUserSettingBody{id: $id, isEnableBlurScreenshot: $isEnableBlurScreenshot, userId: $userId}';
59+
}
60+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'package:equatable/equatable.dart';
2+
import 'package:json_annotation/json_annotation.dart';
3+
4+
part 'user_setting_response.g.dart';
5+
6+
@JsonSerializable()
7+
class UserSettingResponse extends Equatable {
8+
@JsonKey(name: 'id')
9+
final int? id;
10+
@JsonKey(name: 'is_enable_blur_screenshot')
11+
final bool? isEnableBlurScreenshot;
12+
@JsonKey(name: 'user_id')
13+
final int? userId;
14+
@JsonKey(name: 'name')
15+
final String? name;
16+
17+
UserSettingResponse({
18+
required this.id,
19+
required this.isEnableBlurScreenshot,
20+
required this.userId,
21+
required this.name,
22+
});
23+
24+
factory UserSettingResponse.fromJson(Map<String, dynamic> json) => _$UserSettingResponseFromJson(json);
25+
26+
Map<String, dynamic> toJson() => _$UserSettingResponseToJson(this);
27+
28+
@override
29+
List<Object?> get props => [
30+
id,
31+
isEnableBlurScreenshot,
32+
userId,
33+
name,
34+
];
35+
36+
@override
37+
String toString() {
38+
return 'UserSettingResponse{id: $id, isEnableBlurScreenshot: $isEnableBlurScreenshot, userId: $userId, name: $name}';
39+
}
40+
}

0 commit comments

Comments
 (0)