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? displayName;
|
||||
final String? avatarUrl;
|
||||
final String? blurHash;
|
||||
final DateTime createdAt;
|
||||
final DateTime? lastLoginAt;
|
||||
|
||||
@@ -16,7 +15,6 @@ class User extends Equatable {
|
||||
required this.email,
|
||||
this.displayName,
|
||||
this.avatarUrl,
|
||||
this.blurHash,
|
||||
required this.createdAt,
|
||||
this.lastLoginAt,
|
||||
});
|
||||
@@ -28,7 +26,6 @@ class User extends Equatable {
|
||||
email,
|
||||
displayName,
|
||||
avatarUrl,
|
||||
blurHash,
|
||||
createdAt,
|
||||
lastLoginAt,
|
||||
];
|
||||
@@ -39,7 +36,6 @@ class User extends Equatable {
|
||||
String? email,
|
||||
String? displayName,
|
||||
String? avatarUrl,
|
||||
String? blurHash,
|
||||
DateTime? createdAt,
|
||||
DateTime? lastLoginAt,
|
||||
}) {
|
||||
@@ -49,7 +45,6 @@ class User extends Equatable {
|
||||
email: email ?? this.email,
|
||||
displayName: displayName ?? this.displayName,
|
||||
avatarUrl: avatarUrl ?? this.avatarUrl,
|
||||
blurHash: blurHash ?? this.blurHash,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
lastLoginAt: lastLoginAt ?? this.lastLoginAt,
|
||||
);
|
||||
@@ -62,7 +57,6 @@ class User extends Equatable {
|
||||
email: json['email'] as String,
|
||||
displayName: json['displayName'] as String?,
|
||||
avatarUrl: json['avatarUrl'] as String?,
|
||||
blurHash: json['blurHash'] as String?,
|
||||
createdAt: DateTime.parse(
|
||||
json['createdAt'] as String? ?? DateTime.now().toIso8601String(),
|
||||
),
|
||||
@@ -79,7 +73,6 @@ class User extends Equatable {
|
||||
'email': email,
|
||||
'displayName': displayName,
|
||||
'avatarUrl': avatarUrl,
|
||||
'blurHash': blurHash,
|
||||
'createdAt': createdAt.toIso8601String(),
|
||||
'lastLoginAt': lastLoginAt?.toIso8601String(),
|
||||
};
|
||||
|
||||
@@ -186,13 +186,11 @@ class ApiClient {
|
||||
String? displayName,
|
||||
String? email,
|
||||
String? avatarUrl,
|
||||
String? blurHash,
|
||||
}) async {
|
||||
final data = <String, dynamic>{};
|
||||
if (displayName != null) data['displayName'] = displayName;
|
||||
if (email != null) data['email'] = email;
|
||||
if (avatarUrl != null) data['avatarUrl'] = avatarUrl;
|
||||
if (blurHash != null) data['blurHash'] = blurHash;
|
||||
|
||||
return putRaw('/user/profile', data: data);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_blurhash/flutter_blurhash.dart' as flutter_blurhash;
|
||||
import 'package:file_picker/file_picker.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 'dart:io';
|
||||
import '../blocs/auth/auth_bloc.dart';
|
||||
@@ -29,7 +26,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
// Profile fields
|
||||
late TextEditingController _displayNameController;
|
||||
String? _avatarUrl;
|
||||
String? _blurHash;
|
||||
|
||||
// Security fields
|
||||
late TextEditingController _currentPasswordController;
|
||||
@@ -63,7 +59,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
_currentUser = authState.user;
|
||||
_displayNameController.text = _currentUser?.displayName ?? '';
|
||||
_avatarUrl = _currentUser?.avatarUrl;
|
||||
_blurHash = _currentUser?.blurHash;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,13 +74,7 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
final bytes = await file.readAsBytes();
|
||||
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(() {
|
||||
_blurHash = blurHash;
|
||||
_isLoading = true;
|
||||
});
|
||||
|
||||
@@ -132,7 +121,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
? null
|
||||
: _displayNameController.text,
|
||||
avatarUrl: _avatarUrl,
|
||||
blurHash: _blurHash,
|
||||
);
|
||||
|
||||
final updatedUser = _currentUser!.copyWith(
|
||||
@@ -140,7 +128,6 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
? null
|
||||
: _displayNameController.text,
|
||||
avatarUrl: _avatarUrl,
|
||||
blurHash: _blurHash,
|
||||
);
|
||||
|
||||
if (mounted) {
|
||||
@@ -493,12 +480,20 @@ class _AccountSettingsDialogState extends State<AccountSettingsDialog> {
|
||||
backgroundColor: AppTheme.secondaryText.withValues(
|
||||
alpha: 0.2,
|
||||
),
|
||||
child: _avatarUrl != null && _blurHash != null
|
||||
child: _avatarUrl != null
|
||||
? ClipOval(
|
||||
child: flutter_blurhash.BlurHash(
|
||||
hash: _blurHash!,
|
||||
image: _avatarUrl,
|
||||
imageFit: BoxFit.cover,
|
||||
child: Image.network(
|
||||
_avatarUrl!,
|
||||
fit: BoxFit.cover,
|
||||
width: 100,
|
||||
height: 100,
|
||||
errorBuilder: (context, error, stackTrace) {
|
||||
return Icon(
|
||||
Icons.person,
|
||||
size: 50,
|
||||
color: AppTheme.secondaryText,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
: Icon(
|
||||
|
||||
@@ -41,14 +41,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -254,14 +246,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -68,8 +68,6 @@ dependencies:
|
||||
just_audio: ^0.10.5
|
||||
flutter_web_plugins:
|
||||
sdk: flutter
|
||||
flutter_blurhash: ^0.9.1
|
||||
blurhash_dart: ^1.2.1
|
||||
image: ^4.7.2
|
||||
|
||||
dev_dependencies:
|
||||
|
||||
@@ -3801,15 +3801,14 @@ func getUserProfileHandler(w http.ResponseWriter, r *http.Request, db *database.
|
||||
Email string `json:"email"`
|
||||
DisplayName *string `json:"displayName"`
|
||||
AvatarURL *string `json:"avatarUrl"`
|
||||
BlurHash *string `json:"blurHash"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
LastLoginAt *time.Time `json:"lastLoginAt"`
|
||||
}
|
||||
|
||||
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).
|
||||
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 == sql.ErrNoRows {
|
||||
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"`
|
||||
Email *string `json:"email"`
|
||||
AvatarURL *string `json:"avatarUrl"`
|
||||
BlurHash *string `json:"blurHash"`
|
||||
}
|
||||
|
||||
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)
|
||||
argIndex++
|
||||
}
|
||||
if req.BlurHash != nil {
|
||||
setParts = append(setParts, fmt.Sprintf("blur_hash = $%d", argIndex))
|
||||
args = append(args, *req.BlurHash)
|
||||
argIndex++
|
||||
}
|
||||
|
||||
if len(setParts) == 0 {
|
||||
// No fields to update
|
||||
@@ -3905,9 +3898,6 @@ func updateUserProfileHandler(w http.ResponseWriter, r *http.Request, db *databa
|
||||
if req.AvatarURL != nil {
|
||||
metadata["avatarUrl"] = *req.AvatarURL
|
||||
}
|
||||
if req.BlurHash != nil {
|
||||
metadata["blurHash"] = *req.BlurHash
|
||||
}
|
||||
|
||||
auditLogger.Log(r.Context(), audit.Entry{
|
||||
UserID: &userID,
|
||||
|
||||
Reference in New Issue
Block a user