fluffychat merge

This commit is contained in:
ggurdin 2026-02-04 10:19:17 -05:00
commit d20d667bcf
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
20 changed files with 81 additions and 78 deletions

View file

@ -359,7 +359,7 @@ class ChatListController extends State<ChatList>
final roomId = response.roomId;
if (roomId != null) {
roomSearchResult.chunk.add(
PublicRoomsChunk(
PublishedRoomsChunk(
name: searchQuery,
guestCanJoin: false,
numJoinedMembers: 0,

View file

@ -415,7 +415,7 @@ class PublicRoomsHorizontalList extends StatelessWidget {
required this.publicRooms,
});
final List<PublicRoomsChunk>? publicRooms;
final List<PublishedRoomsChunk>? publicRooms;
@override
Widget build(BuildContext context) {

View file

@ -45,7 +45,7 @@ class SpaceView extends StatefulWidget {
}
class _SpaceViewState extends State<SpaceView> {
final List<SpaceRoomsChunk> _discoveredChildren = [];
final List<SpaceRoomsChunk$2> _discoveredChildren = [];
final TextEditingController _filterController = TextEditingController();
String? _nextBatch;
bool _noMoreRooms = false;
@ -95,7 +95,7 @@ class _SpaceViewState extends State<SpaceView> {
}
}
void _joinChildRoom(SpaceRoomsChunk item) async {
void _joinChildRoom(SpaceRoomsChunk$2 item) async {
final client = Matrix.of(context).client;
final space = client.getRoomById(widget.spaceId);

View file

@ -45,7 +45,11 @@ class SettingsController extends State<Settings> {
final matrix = Matrix.of(context);
final success = await showFutureLoadingDialog(
context: context,
future: () => matrix.client.setDisplayName(matrix.client.userID!, input),
future: () => matrix.client.setProfileField(
matrix.client.userID!,
'displayname',
{'displayname': input},
),
);
if (success.error == null) {
updateProfile();

View file

@ -16,7 +16,7 @@ import 'package:fluffychat/widgets/matrix.dart';
class PublicRoomBottomSheet extends StatefulWidget {
final String? roomAlias;
final BuildContext outerContext;
final PublicRoomsChunk? chunk;
final PublishedRoomsChunk? chunk;
final List<String>? via;
PublicRoomBottomSheet({
@ -32,7 +32,7 @@ class PublicRoomBottomSheet extends StatefulWidget {
static Future<String?> show({
required BuildContext context,
String? roomAlias,
PublicRoomsChunk? chunk,
PublishedRoomsChunk? chunk,
List<String>? via,
}) async {
final room = MatrixState.pangeaController.matrixState.client
@ -60,7 +60,7 @@ class PublicRoomBottomSheet extends StatefulWidget {
class PublicRoomBottomSheetState extends State<PublicRoomBottomSheet> {
BuildContext get outerContext => widget.outerContext;
PublicRoomsChunk? get chunk => widget.chunk;
PublishedRoomsChunk? get chunk => widget.chunk;
String? get roomAlias => widget.roomAlias;
List<String>? get via => widget.via;
@ -138,9 +138,9 @@ class PublicRoomBottomSheetState extends State<PublicRoomBottomSheet> {
);
}
bool testRoom(PublicRoomsChunk r) => r.canonicalAlias == roomAlias;
bool testRoom(PublishedRoomsChunk r) => r.canonicalAlias == roomAlias;
Future<PublicRoomsChunk> search() async {
Future<PublishedRoomsChunk> search() async {
final chunk = this.chunk;
if (chunk != null) return chunk;
final query = await Matrix.of(outerContext).client.queryPublicRooms(
@ -174,7 +174,7 @@ class PublicRoomBottomSheetState extends State<PublicRoomBottomSheet> {
),
],
),
body: FutureBuilder<PublicRoomsChunk>(
body: FutureBuilder<PublishedRoomsChunk>(
future: search(),
builder: (context, snapshot) {
return Padding(

View file

@ -34,8 +34,8 @@ extension DeleteRoom on Room {
await client.delete(id);
}
Future<List<SpaceRoomsChunk>> getSpaceChildrenToDelete() async {
final List<SpaceRoomsChunk> rooms = [];
Future<List<SpaceRoomsChunk$2>> getSpaceChildrenToDelete() async {
final List<SpaceRoomsChunk$2> rooms = [];
String? nextBatch;
int calls = 0;

View file

@ -23,7 +23,7 @@ class DeleteSpaceDialog extends StatefulWidget {
Room room,
BuildContext context,
) async {
final resp = await showDialog<List<SpaceRoomsChunk>?>(
final resp = await showDialog<List<SpaceRoomsChunk$2>?>(
context: context,
builder: (_) => DeleteSpaceDialog(space: room),
);
@ -40,7 +40,7 @@ class DeleteSpaceDialog extends StatefulWidget {
static Future<void> _deleteSpace(
Room space,
List<SpaceRoomsChunk> rooms,
List<SpaceRoomsChunk$2> rooms,
) async {
final List<Future<void>> futures = [];
for (final room in rooms) {
@ -66,8 +66,8 @@ class DeleteSpaceDialog extends StatefulWidget {
}
class DeleteSpaceDialogState extends State<DeleteSpaceDialog> {
List<SpaceRoomsChunk> _rooms = [];
final List<SpaceRoomsChunk> _roomsToDelete = [];
List<SpaceRoomsChunk$2> _rooms = [];
final List<SpaceRoomsChunk$2> _roomsToDelete = [];
bool _loadingRooms = true;
String? _roomLoadError;
@ -109,7 +109,7 @@ class DeleteSpaceDialogState extends State<DeleteSpaceDialog> {
void _onRoomSelected(
bool? selected,
SpaceRoomsChunk room,
SpaceRoomsChunk$2 room,
) {
if (selected == null ||
(selected && _roomsToDelete.contains(room)) ||
@ -134,7 +134,7 @@ class DeleteSpaceDialogState extends State<DeleteSpaceDialog> {
});
}
List<SpaceRoomsChunk> get _selectableRooms {
List<SpaceRoomsChunk$2> get _selectableRooms {
return _rooms.where((chunk) {
final room = widget.space.client.getRoomById(chunk.roomId);
return room != null &&

View file

@ -49,7 +49,7 @@ class CourseChatsController extends State<CourseChats>
String get roomId => widget.roomId;
Room? get room => widget.client.getRoomById(widget.roomId);
List<SpaceRoomsChunk>? discoveredChildren;
List<SpaceRoomsChunk$2>? discoveredChildren;
StreamSubscription? _roomSubscription;
String? _nextBatch;
bool noMoreRooms = false;
@ -109,7 +109,7 @@ class CourseChatsController extends State<CourseChats>
List<Room> joinedActivities() =>
joinedRooms.where((r) => r.isActivitySession).toList();
List<SpaceRoomsChunk> get discoveredGroupChats => (discoveredChildren ?? [])
List<SpaceRoomsChunk$2> get discoveredGroupChats => (discoveredChildren ?? [])
.where(
(chunk) =>
chunk.roomType == null ||
@ -174,7 +174,7 @@ class CourseChatsController extends State<CourseChats>
Future<void> _joinDefaultChats() async {
if (discoveredChildren == null) return;
final found = List<SpaceRoomsChunk>.from(discoveredChildren!);
final found = List<SpaceRoomsChunk$2>.from(discoveredChildren!);
final List<Future> joinFutures = [];
for (final chunk in found) {
@ -269,7 +269,7 @@ class CourseChatsController extends State<CourseChats>
// Failsafe to prevent too many calls to the server in a row
int callsToServer = 0;
List<SpaceRoomsChunk>? currentHierarchy =
List<SpaceRoomsChunk$2>? currentHierarchy =
discoveredChildren == null || reload
? null
: List.from(discoveredChildren!);
@ -443,7 +443,7 @@ class CourseChatsController extends State<CourseChats>
NavigationUtil.goToSpaceRoute(room.id, [], context);
}
void joinChildRoom(SpaceRoomsChunk item) async {
void joinChildRoom(SpaceRoomsChunk$2 item) async {
final space = widget.client.getRoomById(widget.roomId);
final roomId = await PublicRoomBottomSheet.show(
context: context,
@ -503,7 +503,7 @@ class CourseChatsController extends State<CourseChats>
bool _includeSpaceChild(
Room space,
SpaceRoomsChunk hierarchyMember,
SpaceRoomsChunk$2 hierarchyMember,
) {
if (!mounted) return false;
final bool isAnalyticsRoom =
@ -519,11 +519,11 @@ class CourseChatsController extends State<CourseChats>
return !isAnalyticsRoom && (isMember || isSuggested);
}
List<SpaceRoomsChunk> _filterHierarchyResponse(
List<SpaceRoomsChunk$2> _filterHierarchyResponse(
Room space,
List<SpaceRoomsChunk> hierarchyResponse,
List<SpaceRoomsChunk$2> hierarchyResponse,
) {
final List<SpaceRoomsChunk> filteredChildren = [];
final List<SpaceRoomsChunk$2> filteredChildren = [];
for (final child in hierarchyResponse) {
if (child.roomId == widget.roomId) {
continue;
@ -616,8 +616,8 @@ class CourseChatsController extends State<CourseChats>
}
int _sortSpaceChildren(
SpaceRoomsChunk a,
SpaceRoomsChunk b,
SpaceRoomsChunk$2 a,
SpaceRoomsChunk$2 b,
) {
final bool aIsSpace = a.roomType == 'm.space';
final bool bIsSpace = b.roomType == 'm.space';

View file

@ -4,7 +4,7 @@ import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart';
import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart';
class ExtendedSpaceRoomsChunk {
final SpaceRoomsChunk chunk;
final SpaceRoomsChunk$2 chunk;
final List<ActivityRoleModel> assignedRoles;
final ActivityPlanModel activity;

View file

@ -8,7 +8,7 @@ import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
class UnjoinedChatListItem extends StatelessWidget {
final SpaceRoomsChunk chunk;
final SpaceRoomsChunk$2 chunk;
final VoidCallback onTap;
const UnjoinedChatListItem({
super.key,

View file

@ -7,7 +7,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:universal_html/html.dart' as webfile;
import 'package:fluffychat/pages/chat/recording_dialog.dart';
import 'package:fluffychat/pages/chat/recording_view_model.dart';
import 'package:fluffychat/pangea/download/download_type_enum.dart';
class DownloadUtil {

View file

@ -4,7 +4,7 @@ import 'package:matrix/matrix_api_lite/generated/model.dart';
import 'package:fluffychat/pangea/spaces/space_constants.dart';
extension PangeaRoomsChunk on PublicRoomsChunk {
extension PangeaRoomsChunk on PublishedRoomsChunk {
/// Use Random with a seed to get the default
/// avatar associated with this space
String defaultAvatar() {

View file

@ -118,7 +118,11 @@ class CreatePangeaAccountPageState extends State<CreatePangeaAccountPage> {
final selectedAvatarPath = avatarPath(random.nextInt(4) + 1);
final avatarUrl =
Uri.parse("${AppConfig.assetsBaseURL}/$selectedAvatarPath");
await client.setAvatarUrl(client.userID!, avatarUrl);
await client.setProfileField(
client.userID!,
'avatar_url',
{'avatar_url': avatarUrl},
);
} catch (err, s) {
ErrorHandler.logError(
e: err,

View file

@ -195,9 +195,10 @@ class SignupPageController extends State<SignupPage> {
GoogleAnalytics.login("pangea", registerRes?.userId);
if (displayname != localPart && client.userID != null) {
await client.setDisplayName(
await client.setProfileField(
client.userID!,
displayname,
'displayname',
{'displayname': displayname},
);
}
}

View file

@ -63,7 +63,7 @@ class PublicCoursesResponse extends GetPublicRoomsResponse {
}
class PublicCoursesChunk {
final PublicRoomsChunk room;
final PublishedRoomsChunk room;
final String courseId;
PublicCoursesChunk({
@ -73,7 +73,7 @@ class PublicCoursesChunk {
factory PublicCoursesChunk.fromJson(Map<String, dynamic> json) {
return PublicCoursesChunk(
room: PublicRoomsChunk.fromJson(json),
room: PublishedRoomsChunk.fromJson(json),
courseId: json['course_id'] as String,
);
}

View file

@ -8,7 +8,7 @@ import 'package:matrix/encryption.dart';
import 'package:matrix/matrix.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/recording_dialog.dart';
import 'package:fluffychat/pages/chat/recording_view_model.dart';
import 'package:fluffychat/pangea/analytics_practice/analytics_practice_session_repo.dart';
import 'package:fluffychat/pangea/common/network/requests.dart';
import 'package:fluffychat/utils/other_party_can_receive.dart';

View file

@ -363,4 +363,7 @@ class MatrixLocals extends MatrixLocalizations {
? ''
: '${duration.inMinutes.toString().padLeft(2, '0')}:${(duration.inSeconds % 60).toString().padLeft(2, '0')}',
);
@override
String get refreshingLastEvent => l10n.loadingPleaseWait;
}

View file

@ -18,7 +18,7 @@ import 'adaptive_dialog_action.dart';
class PublicRoomDialog extends StatelessWidget {
final String? roomAlias;
final PublicRoomsChunk? chunk;
final PublishedRoomsChunk? chunk;
final List<String>? via;
const PublicRoomDialog({super.key, this.roomAlias, this.chunk, this.via});
@ -68,9 +68,9 @@ class PublicRoomDialog extends StatelessWidget {
return;
}
bool _testRoom(PublicRoomsChunk r) => r.canonicalAlias == roomAlias;
bool _testRoom(PublishedRoomsChunk r) => r.canonicalAlias == roomAlias;
Future<PublicRoomsChunk> _search(BuildContext context) async {
Future<PublishedRoomsChunk> _search(BuildContext context) async {
final chunk = this.chunk;
if (chunk != null) return chunk;
final query = await Matrix.of(context).client.queryPublicRooms(
@ -100,7 +100,7 @@ class PublicRoomDialog extends StatelessWidget {
),
content: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256),
child: FutureBuilder<PublicRoomsChunk>(
child: FutureBuilder<PublishedRoomsChunk>(
future: _search(context),
builder: (context, snapshot) {
final theme = Theme.of(context);

View file

@ -521,14 +521,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.9.9"
enhanced_enum:
dependency: transitive
description:
name: enhanced_enum
sha256: "074c5a8b9664799ca91e1e8b68003b8694cb19998671cbafd9c7779c13fcdecf"
url: "https://pub.dev"
source: hosted
version: "0.2.4"
equatable:
dependency: transitive
description:
@ -856,14 +848,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter_openssl_crypto:
dependency: "direct main"
description:
name: flutter_openssl_crypto
sha256: "293b4fcda13ab0710645a16e82f3d5b7de19bfc0ab2d06bcdb87637222eda5e1"
url: "https://pub.dev"
source: hosted
version: "0.5.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
@ -876,10 +860,10 @@ packages:
dependency: transitive
description:
name: flutter_rust_bridge
sha256: b416ff56002789e636244fb4cc449f587656eff995e5a7169457eb0593fcaddb
sha256: "37ef40bc6f863652e865f0b2563ea07f0d3c58d8efad803cc01933a4b2ee067e"
url: "https://pub.dev"
source: hosted
version: "2.10.0"
version: "2.11.1"
flutter_secure_storage:
dependency: "direct main"
description:
@ -962,10 +946,10 @@ packages:
dependency: "direct main"
description:
name: flutter_vodozemac
sha256: "2405ca121b84d1cd83200a14021022e1691b123a23bcefc36adc7740cefbc1f9"
sha256: "54cd3790b6dfdc1afce928f8c46f7eeea9e4f8326f077400894935926f202057"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
version: "0.3.0"
flutter_web_auth_2:
dependency: "direct main"
description:
@ -1358,6 +1342,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.6.7"
js_interop:
dependency: transitive
description:
name: js_interop
sha256: "7ec859c296958ccea34dc770504bd3ff4ae52fdd9e7eeb2bacc7081ad476a1f5"
url: "https://pub.dev"
source: hosted
version: "0.0.1"
json_annotation:
dependency: transitive
description:
@ -1521,12 +1513,10 @@ packages:
matrix:
dependency: "direct main"
description:
path: "."
ref: merge-upstream
resolved-ref: "1e5975c8dae6af46444f07868bb2ddf5689c3cbe"
url: "https://github.com/pangeachat/matrix-dart-sdk.git"
source: git
version: "1.0.1"
path: "/Users/ggurdin/pangea/matrix-dart-sdk"
relative: false
source: path
version: "2.0.1"
meta:
dependency: transitive
description:
@ -2704,10 +2694,10 @@ packages:
dependency: transitive
description:
name: vodozemac
sha256: dba14017e042748fb22d270e8ab1d3e46965b89788dd3857dba938ec07571968
sha256: "95cac62ffab94db99e134c8f9aac198f8131a4eed0bed76a6cfc9c72add229b9"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.3.0"
wakelock_plus:
dependency: "direct main"
description:

View file

@ -44,10 +44,9 @@ dependencies:
sdk: flutter
flutter_map: ^8.2.2
flutter_new_badger: ^1.1.1
flutter_openssl_crypto: ^0.5.0
flutter_secure_storage: ^9.2.4
flutter_shortcuts_new: ^2.0.0
flutter_vodozemac: ^0.2.2
flutter_vodozemac: ^0.3.0
flutter_web_auth_2: ^3.1.1 # Version 4 blocked by https://github.com/MixinNetwork/flutter-plugins/issues/379
flutter_webrtc: ^1.2.0
geolocator: ^14.0.2
@ -62,11 +61,13 @@ dependencies:
latlong2: ^0.9.1
linkify: ^5.0.0
# #Pangea
# matrix: ^2.0.1
# matrix:
# git: https://github.com/famedly/matrix-dart-sdk.git
matrix:
git:
url: https://github.com/pangeachat/matrix-dart-sdk.git # repo
ref: merge-upstream
path: /Users/ggurdin/pangea/matrix-dart-sdk
# git:
# url: https://github.com/pangeachat/matrix-dart-sdk.git # repo
# ref: merge-upstream
# Pangea#
mime: ^2.0.0
native_imaging: ^0.2.0