add profile page, privacy options
All checks were successful
Release / meta (push) Successful in 11s
Release / linux-build (push) Successful in 1m0s
Release / web-build (push) Successful in 2m29s
Release / android-build (push) Successful in 10m26s
Release / release-master (push) Successful in 37s
Release / release-dev (push) Successful in 49s
All checks were successful
Release / meta (push) Successful in 11s
Release / linux-build (push) Successful in 1m0s
Release / web-build (push) Successful in 2m29s
Release / android-build (push) Successful in 10m26s
Release / release-master (push) Successful in 37s
Release / release-dev (push) Successful in 49s
This commit is contained in:
@@ -109,15 +109,21 @@ class UserData {
|
||||
required this.fullName,
|
||||
required this.userId,
|
||||
required this.email,
|
||||
String? entriesVisibility,
|
||||
String? mileageVisibility,
|
||||
bool? elevated,
|
||||
bool? disabled,
|
||||
}) : elevated = elevated ?? false,
|
||||
}) : entriesVisibility = entriesVisibility ?? 'private',
|
||||
mileageVisibility = mileageVisibility ?? 'private',
|
||||
elevated = elevated ?? false,
|
||||
disabled = disabled ?? false;
|
||||
|
||||
final String userId;
|
||||
final String username;
|
||||
final String fullName;
|
||||
final String email;
|
||||
final String entriesVisibility;
|
||||
final String mileageVisibility;
|
||||
final bool elevated;
|
||||
final bool disabled;
|
||||
}
|
||||
@@ -128,6 +134,8 @@ class AuthenticatedUserData extends UserData {
|
||||
required super.username,
|
||||
required super.fullName,
|
||||
required super.email,
|
||||
super.entriesVisibility,
|
||||
super.mileageVisibility,
|
||||
bool? elevated,
|
||||
bool? isElevated,
|
||||
bool? disabled,
|
||||
@@ -148,6 +156,8 @@ class UserSummary extends UserData {
|
||||
required super.fullName,
|
||||
required super.userId,
|
||||
required super.email,
|
||||
super.entriesVisibility,
|
||||
super.mileageVisibility,
|
||||
super.elevated = false,
|
||||
super.disabled = false,
|
||||
});
|
||||
@@ -159,11 +169,71 @@ class UserSummary extends UserData {
|
||||
fullName: _asString(json['full_name'] ?? json['name']),
|
||||
userId: _asString(json['user_id'] ?? json['id']),
|
||||
email: _asString(json['email']),
|
||||
entriesVisibility: _asString(
|
||||
json['user_entries_visibility'] ?? json['entries_visibility'],
|
||||
'private',
|
||||
),
|
||||
mileageVisibility: _asString(
|
||||
json['user_mileage_visibility'] ?? json['mileage_visibility'],
|
||||
'private',
|
||||
),
|
||||
elevated: _asBool(json['elevated'] ?? json['is_elevated'], false),
|
||||
disabled: _asBool(json['disabled'], false),
|
||||
);
|
||||
}
|
||||
|
||||
class UserProfileDetail {
|
||||
final String username;
|
||||
final String fullName;
|
||||
final double mileage;
|
||||
final List<LocoSummary> topLocos;
|
||||
final List<Leg> legs;
|
||||
final Map<String, dynamic> privacyInfo;
|
||||
final String friendshipStatus;
|
||||
|
||||
UserProfileDetail({
|
||||
required this.username,
|
||||
required this.fullName,
|
||||
required this.mileage,
|
||||
required this.topLocos,
|
||||
required this.legs,
|
||||
this.privacyInfo = const {},
|
||||
this.friendshipStatus = 'none',
|
||||
});
|
||||
|
||||
factory UserProfileDetail.fromJson(Map<String, dynamic> json) {
|
||||
List<dynamic>? topLocosRaw;
|
||||
final tl = json['top_locos'];
|
||||
if (tl is List) {
|
||||
topLocosRaw = tl;
|
||||
}
|
||||
List<dynamic>? legsRaw;
|
||||
final legData = json['user_legs'];
|
||||
if (legData is List) {
|
||||
legsRaw = legData;
|
||||
}
|
||||
return UserProfileDetail(
|
||||
username: _asString(json['username']),
|
||||
fullName: _asString(json['full_name']),
|
||||
mileage: _asDouble(json['mileage']),
|
||||
topLocos: (topLocosRaw ?? const [])
|
||||
.whereType<Map>()
|
||||
.map((e) => LocoSummary.fromJson(
|
||||
e.map((k, v) => MapEntry(k.toString(), v)),
|
||||
))
|
||||
.toList(),
|
||||
legs: (legsRaw ?? const [])
|
||||
.whereType<Map>()
|
||||
.map((e) => Leg.fromJson(e.map((k, v) => MapEntry(k.toString(), v))))
|
||||
.toList(),
|
||||
privacyInfo: json['privacy_info'] is Map
|
||||
? Map<String, dynamic>.from(json['privacy_info'] as Map)
|
||||
: const {},
|
||||
friendshipStatus: _asString(json['friendship_status'], 'none'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Friendship {
|
||||
final String? id;
|
||||
final String status;
|
||||
@@ -408,6 +478,16 @@ class HomepageStats {
|
||||
fullName: userData['full_name'] ?? '',
|
||||
userId: userData['user_id'] ?? '',
|
||||
email: userData['email'] ?? '',
|
||||
entriesVisibility: _asString(
|
||||
userData['user_entries_visibility'] ??
|
||||
userData['entries_visibility'],
|
||||
'private',
|
||||
),
|
||||
mileageVisibility: _asString(
|
||||
userData['user_mileage_visibility'] ??
|
||||
userData['mileage_visibility'],
|
||||
'private',
|
||||
),
|
||||
elevated:
|
||||
_asBool(userData['elevated'] ?? userData['is_elevated'], false),
|
||||
disabled: _asBool(userData['disabled'], false),
|
||||
|
||||
Reference in New Issue
Block a user