Remove blurHash references from User model and related components
This commit is contained in:
@@ -6,7 +6,6 @@ class User extends Equatable {
|
|||||||
final String email;
|
final String email;
|
||||||
final String? displayName;
|
final String? displayName;
|
||||||
final String? avatarUrl;
|
final String? avatarUrl;
|
||||||
final String? blurHash;
|
|
||||||
final DateTime createdAt;
|
final DateTime createdAt;
|
||||||
final DateTime? lastLoginAt;
|
final DateTime? lastLoginAt;
|
||||||
|
|
||||||
@@ -16,7 +15,6 @@ class User extends Equatable {
|
|||||||
required this.email,
|
required this.email,
|
||||||
this.displayName,
|
this.displayName,
|
||||||
this.avatarUrl,
|
this.avatarUrl,
|
||||||
this.blurHash,
|
|
||||||
required this.createdAt,
|
required this.createdAt,
|
||||||
this.lastLoginAt,
|
this.lastLoginAt,
|
||||||
});
|
});
|
||||||
@@ -28,7 +26,6 @@ class User extends Equatable {
|
|||||||
email,
|
email,
|
||||||
displayName,
|
displayName,
|
||||||
avatarUrl,
|
avatarUrl,
|
||||||
blurHash,
|
|
||||||
createdAt,
|
createdAt,
|
||||||
lastLoginAt,
|
lastLoginAt,
|
||||||
];
|
];
|
||||||
@@ -39,7 +36,6 @@ class User extends Equatable {
|
|||||||
String? email,
|
String? email,
|
||||||
String? displayName,
|
String? displayName,
|
||||||
String? avatarUrl,
|
String? avatarUrl,
|
||||||
String? blurHash,
|
|
||||||
DateTime? createdAt,
|
DateTime? createdAt,
|
||||||
DateTime? lastLoginAt,
|
DateTime? lastLoginAt,
|
||||||
}) {
|
}) {
|
||||||
@@ -49,7 +45,6 @@ class User extends Equatable {
|
|||||||
email: email ?? this.email,
|
email: email ?? this.email,
|
||||||
displayName: displayName ?? this.displayName,
|
displayName: displayName ?? this.displayName,
|
||||||
avatarUrl: avatarUrl ?? this.avatarUrl,
|
avatarUrl: avatarUrl ?? this.avatarUrl,
|
||||||
blurHash: blurHash ?? this.blurHash,
|
|
||||||
createdAt: createdAt ?? this.createdAt,
|
createdAt: createdAt ?? this.createdAt,
|
||||||
lastLoginAt: lastLoginAt ?? this.lastLoginAt,
|
lastLoginAt: lastLoginAt ?? this.lastLoginAt,
|
||||||
);
|
);
|
||||||
@@ -62,7 +57,6 @@ class User extends Equatable {
|
|||||||
email: json['email'] as String,
|
email: json['email'] as String,
|
||||||
displayName: json['displayName'] as String?,
|
displayName: json['displayName'] as String?,
|
||||||
avatarUrl: json['avatarUrl'] as String?,
|
avatarUrl: json['avatarUrl'] as String?,
|
||||||
blurHash: json['blurHash'] as String?,
|
|
||||||
createdAt: DateTime.parse(
|
createdAt: DateTime.parse(
|
||||||
json['createdAt'] as String? ?? DateTime.now().toIso8601String(),
|
json['createdAt'] as String? ?? DateTime.now().toIso8601String(),
|
||||||
),
|
),
|
||||||
@@ -79,7 +73,6 @@ class User extends Equatable {
|
|||||||
'email': email,
|
'email': email,
|
||||||
'displayName': displayName,
|
'displayName': displayName,
|
||||||
'avatarUrl': avatarUrl,
|
'avatarUrl': avatarUrl,
|
||||||
'blurHash': blurHash,
|
|
||||||
'createdAt': createdAt.toIso8601String(),
|
'createdAt': createdAt.toIso8601String(),
|
||||||
'lastLoginAt': lastLoginAt?.toIso8601String(),
|
'lastLoginAt': lastLoginAt?.toIso8601String(),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -186,13 +186,11 @@ class ApiClient {
|
|||||||
String? displayName,
|
String? displayName,
|
||||||
String? email,
|
String? email,
|
||||||
String? avatarUrl,
|
String? avatarUrl,
|
||||||
String? blurHash,
|
|
||||||
}) async {
|
}) async {
|
||||||
final data = <String, dynamic>{};
|
final data = <String, dynamic>{};
|
||||||
if (displayName != null) data['displayName'] = displayName;
|
if (displayName != null) data['displayName'] = displayName;
|
||||||
if (email != null) data['email'] = email;
|
if (email != null) data['email'] = email;
|
||||||
if (avatarUrl != null) data['avatarUrl'] = avatarUrl;
|
if (avatarUrl != null) data['avatarUrl'] = avatarUrl;
|
||||||
if (blurHash != null) data['blurHash'] = blurHash;
|
|
||||||
|
|
||||||
return putRaw('/user/profile', data: data);
|
return putRaw('/user/profile', data: data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_blurhash/flutter_blurhash.dart' as flutter_blurhash;
|
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:blurhash_dart/blurhash_dart.dart' as blurhash_dart;
|
|
||||||
import 'package:image/image.dart' as img;
|
|
||||||
import 'package:get_it/get_it.dart';
|
import 'package:get_it/get_it.dart';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import '../blocs/auth/auth_bloc.dart';
|
import '../blocs/auth/auth_bloc.dart';
|
||||||
@@ -29,7 +26,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
// Profile fields
|
// Profile fields
|
||||||
late TextEditingController _displayNameController;
|
late TextEditingController _displayNameController;
|
||||||
String? _avatarUrl;
|
String? _avatarUrl;
|
||||||
String? _blurHash;
|
|
||||||
|
|
||||||
// Security fields
|
// Security fields
|
||||||
late TextEditingController _currentPasswordController;
|
late TextEditingController _currentPasswordController;
|
||||||
@@ -63,7 +59,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
_currentUser = authState.user;
|
_currentUser = authState.user;
|
||||||
_displayNameController.text = _currentUser?.displayName ?? '';
|
_displayNameController.text = _currentUser?.displayName ?? '';
|
||||||
_avatarUrl = _currentUser?.avatarUrl;
|
_avatarUrl = _currentUser?.avatarUrl;
|
||||||
_blurHash = _currentUser?.blurHash;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,13 +74,7 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
final bytes = await file.readAsBytes();
|
final bytes = await file.readAsBytes();
|
||||||
final filename = result.files.single.name;
|
final filename = result.files.single.name;
|
||||||
|
|
||||||
final image = img.decodeImage(bytes);
|
|
||||||
if (image == null) throw Exception('Invalid image');
|
|
||||||
// Generate blur hash
|
|
||||||
final blurHash = blurhash_dart.BlurHash.encode(image).hash;
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_blurHash = blurHash;
|
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -132,7 +121,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
? null
|
? null
|
||||||
: _displayNameController.text,
|
: _displayNameController.text,
|
||||||
avatarUrl: _avatarUrl,
|
avatarUrl: _avatarUrl,
|
||||||
blurHash: _blurHash,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
final updatedUser = _currentUser!.copyWith(
|
final updatedUser = _currentUser!.copyWith(
|
||||||
@@ -140,7 +128,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
? null
|
? null
|
||||||
: _displayNameController.text,
|
: _displayNameController.text,
|
||||||
avatarUrl: _avatarUrl,
|
avatarUrl: _avatarUrl,
|
||||||
blurHash: _blurHash,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
@@ -493,12 +480,20 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
|||||||
backgroundColor: AppTheme.secondaryText.withValues(
|
backgroundColor: AppTheme.secondaryText.withValues(
|
||||||
alpha: 0.2,
|
alpha: 0.2,
|
||||||
),
|
),
|
||||||
child: _avatarUrl != null && _blurHash != null
|
child: _avatarUrl != null
|
||||||
? ClipOval(
|
? ClipOval(
|
||||||
child: flutter_blurhash.BlurHash(
|
child: Image.network(
|
||||||
hash: _blurHash!,
|
_avatarUrl!,
|
||||||
image: _avatarUrl,
|
fit: BoxFit.cover,
|
||||||
imageFit: BoxFit.cover,
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
errorBuilder: (context, error, stackTrace) {
|
||||||
|
return Icon(
|
||||||
|
Icons.person,
|
||||||
|
size: 50,
|
||||||
|
color: AppTheme.secondaryText,
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
: Icon(
|
: Icon(
|
||||||
|
|||||||
@@ -41,14 +41,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.2.0"
|
version: "9.2.0"
|
||||||
blurhash_dart:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: blurhash_dart
|
|
||||||
sha256: "43955b6c2e30a7d440028d1af0fa185852f3534b795cc6eb81fbf397b464409f"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.1"
|
|
||||||
cached_network_image:
|
cached_network_image:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -254,14 +246,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.1.1"
|
version: "9.1.1"
|
||||||
flutter_blurhash:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_blurhash
|
|
||||||
sha256: e97b9aff13b9930bbaa74d0d899fec76e3f320aba3190322dcc5d32104e3d25d
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.9.1"
|
|
||||||
flutter_cache_manager:
|
flutter_cache_manager:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -68,8 +68,6 @@ dependencies:
|
|||||||
just_audio: ^0.10.5
|
just_audio: ^0.10.5
|
||||||
flutter_web_plugins:
|
flutter_web_plugins:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_blurhash: ^0.9.1
|
|
||||||
blurhash_dart: ^1.2.1
|
|
||||||
image: ^4.7.2
|
image: ^4.7.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
@@ -3801,15 +3801,14 @@ func getUserProfileHandler(w http.ResponseWriter, r *http.Request, db *database.
|
|||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
DisplayName *string `json:"displayName"`
|
DisplayName *string `json:"displayName"`
|
||||||
AvatarURL *string `json:"avatarUrl"`
|
AvatarURL *string `json:"avatarUrl"`
|
||||||
BlurHash *string `json:"blurHash"`
|
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
LastLoginAt *time.Time `json:"lastLoginAt"`
|
LastLoginAt *time.Time `json:"lastLoginAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.QueryRowContext(r.Context(),
|
err = db.QueryRowContext(r.Context(),
|
||||||
`SELECT id, username, email, display_name, avatar_url, blur_hash, created_at, last_login_at
|
`SELECT id, username, email, display_name, avatar_url, created_at, last_login_at
|
||||||
FROM users WHERE id = $1`, userID).
|
FROM users WHERE id = $1`, userID).
|
||||||
Scan(&user.ID, &user.Username, &user.Email, &user.DisplayName, &user.AvatarURL, &user.BlurHash, &user.CreatedAt, &user.LastLoginAt)
|
Scan(&user.ID, &user.Username, &user.Email, &user.DisplayName, &user.AvatarURL, &user.CreatedAt, &user.LastLoginAt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
errors.WriteError(w, errors.CodeNotFound, "User not found", http.StatusNotFound)
|
errors.WriteError(w, errors.CodeNotFound, "User not found", http.StatusNotFound)
|
||||||
@@ -3842,7 +3841,6 @@ func updateUserProfileHandler(w http.ResponseWriter, r *http.Request, db *databa
|
|||||||
DisplayName *string `json:"displayName"`
|
DisplayName *string `json:"displayName"`
|
||||||
Email *string `json:"email"`
|
Email *string `json:"email"`
|
||||||
AvatarURL *string `json:"avatarUrl"`
|
AvatarURL *string `json:"avatarUrl"`
|
||||||
BlurHash *string `json:"blurHash"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = json.NewDecoder(r.Body).Decode(&req); err != nil {
|
if err = json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||||
@@ -3870,11 +3868,6 @@ func updateUserProfileHandler(w http.ResponseWriter, r *http.Request, db *databa
|
|||||||
args = append(args, *req.AvatarURL)
|
args = append(args, *req.AvatarURL)
|
||||||
argIndex++
|
argIndex++
|
||||||
}
|
}
|
||||||
if req.BlurHash != nil {
|
|
||||||
setParts = append(setParts, fmt.Sprintf("blur_hash = $%d", argIndex))
|
|
||||||
args = append(args, *req.BlurHash)
|
|
||||||
argIndex++
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(setParts) == 0 {
|
if len(setParts) == 0 {
|
||||||
// No fields to update
|
// No fields to update
|
||||||
@@ -3905,9 +3898,6 @@ func updateUserProfileHandler(w http.ResponseWriter, r *http.Request, db *databa
|
|||||||
if req.AvatarURL != nil {
|
if req.AvatarURL != nil {
|
||||||
metadata["avatarUrl"] = *req.AvatarURL
|
metadata["avatarUrl"] = *req.AvatarURL
|
||||||
}
|
}
|
||||||
if req.BlurHash != nil {
|
|
||||||
metadata["blurHash"] = *req.BlurHash
|
|
||||||
}
|
|
||||||
|
|
||||||
auditLogger.Log(r.Context(), audit.Entry{
|
auditLogger.Log(r.Context(), audit.Entry{
|
||||||
UserID: &userID,
|
UserID: &userID,
|
||||||
|
|||||||
Reference in New Issue
Block a user