diff --git a/lib/pangea/activity_planner/activity_plan_model.dart b/lib/pangea/activity_planner/activity_plan_model.dart index 7b72b877e..978d448a6 100644 --- a/lib/pangea/activity_planner/activity_plan_model.dart +++ b/lib/pangea/activity_planner/activity_plan_model.dart @@ -44,8 +44,9 @@ class ActivityPlanModel { _roles = roles, _imageURL = imageURL; - String? get imageURL => - _imageURL != null ? "${Environment.cmsApi}$_imageURL" : null; + Uri? get imageURL => _imageURL != null + ? Uri.tryParse("${Environment.cmsApi}$_imageURL") + : null; Map get roles { if (_roles != null) return _roles!; diff --git a/lib/pangea/chat_settings/pages/edit_course.dart b/lib/pangea/chat_settings/pages/edit_course.dart index fea6057cf..c8a024ba1 100644 --- a/lib/pangea/chat_settings/pages/edit_course.dart +++ b/lib/pangea/chat_settings/pages/edit_course.dart @@ -204,8 +204,7 @@ class EditCourseController extends State { fit: BoxFit.cover, ) : ImageByUrl( - imageUrl: - _room?.avatar?.toString(), + imageUrl: _room?.avatar, width: 200.0, borderRadius: BorderRadius.circular(0.0), diff --git a/lib/pangea/common/widgets/url_image_widget.dart b/lib/pangea/common/widgets/url_image_widget.dart index 23874ab36..30bff2b9b 100644 --- a/lib/pangea/common/widgets/url_image_widget.dart +++ b/lib/pangea/common/widgets/url_image_widget.dart @@ -11,7 +11,7 @@ import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; class ImageByUrl extends StatelessWidget { - final String? imageUrl; + final Uri? imageUrl; final double width; final BorderRadius borderRadius; final Widget? replacement; @@ -41,19 +41,19 @@ class ImageByUrl extends StatelessWidget { height: width, child: ClipRRect( borderRadius: borderRadius, - child: imageUrl!.startsWith("mxc") + child: imageUrl!.toString().startsWith("mxc") ? MxcImage( - uri: Uri.parse(imageUrl!), + uri: imageUrl, width: width, height: width, - cacheKey: imageUrl, + cacheKey: imageUrl.toString(), fit: BoxFit.cover, ) : CachedNetworkImage( width: width, height: width, fit: BoxFit.cover, - imageUrl: imageUrl!, + imageUrl: imageUrl.toString(), placeholder: ( context, url, diff --git a/lib/pangea/course_chats/course_chats_page.dart b/lib/pangea/course_chats/course_chats_page.dart index 6945aadfe..1b962497b 100644 --- a/lib/pangea/course_chats/course_chats_page.dart +++ b/lib/pangea/course_chats/course_chats_page.dart @@ -57,7 +57,9 @@ class CourseChatsController extends State @override void initState() { - loadHierarchy(reload: true); + loadHierarchy(reload: true).then( + (_) => _joinDefaultChats(), + ); // Listen for changes to the activeSpace's hierarchy, // and reload the hierarchy when they come through @@ -212,7 +214,6 @@ class CourseChatsController extends State try { await _loadHierarchy(activeSpace: room, reload: reload); - if (mounted) await _joinDefaultChats(); if (mounted) { final futures = [ loadRoomSummaries( diff --git a/lib/pangea/course_chats/course_default_chats_enum.dart b/lib/pangea/course_chats/course_default_chats_enum.dart index a8390cb58..e9e335fbd 100644 --- a/lib/pangea/course_chats/course_default_chats_enum.dart +++ b/lib/pangea/course_chats/course_default_chats_enum.dart @@ -1,4 +1,5 @@ import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/chat/constants/default_power_level.dart'; import 'package:fluffychat/pangea/spaces/space_constants.dart'; enum CourseDefaultChatsEnum { @@ -26,4 +27,11 @@ enum CourseDefaultChatsEnum { CourseDefaultChatsEnum.introductions => l10n.introChatDesc, CourseDefaultChatsEnum.announcements => l10n.announcementsChatDesc, }; + + dynamic powerLevels(String userID) => switch (this) { + CourseDefaultChatsEnum.introductions => + RoomDefaults.defaultPowerLevels(userID), + CourseDefaultChatsEnum.announcements => + RoomDefaults.restrictedPowerLevels(userID), + }; } diff --git a/lib/pangea/course_creation/selected_course_page.dart b/lib/pangea/course_creation/selected_course_page.dart index f43fa3401..65642cd6e 100644 --- a/lib/pangea/course_creation/selected_course_page.dart +++ b/lib/pangea/course_creation/selected_course_page.dart @@ -109,7 +109,7 @@ class SelectedCourseController extends State }, ), ], - avatarUrl: course.imageUrl, + avatarUrl: course.imageUrl.toString(), spaceChild: 0, ) .then((spaceId) => completer.complete(spaceId)) diff --git a/lib/pangea/course_creation/selected_course_view.dart b/lib/pangea/course_creation/selected_course_view.dart index 463ceb453..fad7bfbe8 100644 --- a/lib/pangea/course_creation/selected_course_view.dart +++ b/lib/pangea/course_creation/selected_course_view.dart @@ -75,9 +75,8 @@ class SelectedCourseView extends StatelessWidget { ClipPath( clipper: MapClipper(), child: ImageByUrl( - imageUrl: controller - .widget.roomChunk?.avatarUrl - ?.toString() ?? + imageUrl: controller.widget + .roomChunk?.avatarUrl ?? course.imageUrl, width: 100.0, borderRadius: diff --git a/lib/pangea/course_plans/course_topics/course_topic_model.dart b/lib/pangea/course_plans/course_topics/course_topic_model.dart index 36e1404d1..aa2f3434d 100644 --- a/lib/pangea/course_plans/course_topics/course_topic_model.dart +++ b/lib/pangea/course_plans/course_topics/course_topic_model.dart @@ -79,9 +79,9 @@ class CourseTopicModel { return allLocationMedia; } - String? get imageUrl => loadedLocationMediaIds.isEmpty + Uri? get imageUrl => loadedLocationMediaIds.isEmpty ? null - : "${Environment.cmsApi}${loadedLocationMediaIds.first}"; + : Uri.tryParse("${Environment.cmsApi}${loadedLocationMediaIds.first}"); bool get activityListComplete => activityIds.length == loadedActivities.length; diff --git a/lib/pangea/course_plans/courses/course_plan_model.dart b/lib/pangea/course_plans/courses/course_plan_model.dart index f696c3a9b..f944739ab 100644 --- a/lib/pangea/course_plans/courses/course_plan_model.dart +++ b/lib/pangea/course_plans/courses/course_plan_model.dart @@ -127,9 +127,11 @@ class CoursePlanModel { uuids: mediaIds, ), ); - String? get imageUrl => loadedMediaUrls.mediaUrls.isEmpty + Uri? get imageUrl => loadedMediaUrls.mediaUrls.isEmpty ? loadedTopics.values .lastWhereOrNull((topic) => topic.imageUrl != null) ?.imageUrl - : "${Environment.cmsApi}${loadedMediaUrls.mediaUrls.first.url}"; + : Uri.tryParse( + "${Environment.cmsApi}${loadedMediaUrls.mediaUrls.first.url}", + ); } diff --git a/lib/pangea/course_plans/courses/course_plan_room_extension.dart b/lib/pangea/course_plans/courses/course_plan_room_extension.dart index 94a59ae83..cb9110a17 100644 --- a/lib/pangea/course_plans/courses/course_plan_room_extension.dart +++ b/lib/pangea/course_plans/courses/course_plan_room_extension.dart @@ -193,13 +193,14 @@ extension CoursePlanRoomExtension on Room { preset: CreateRoomPreset.publicChat, visibility: Visibility.private, name: name, - roomAliasName: "${type.alias}_${id.localpart}", + roomAliasName: + "${type.alias}_${id.localpart}_${DateTime.now().millisecondsSinceEpoch}", initialState: [ StateEvent( type: EventTypes.RoomAvatar, content: {'url': uploadURL}, ), - RoomDefaults.defaultPowerLevels(client.userID!), + type.powerLevels(client.userID!), await client.pangeaJoinRules( 'knock_restricted', allow: [ diff --git a/lib/pangea/login/pages/public_courses_page.dart b/lib/pangea/login/pages/public_courses_page.dart index db782fcf4..18c0f3dde 100644 --- a/lib/pangea/login/pages/public_courses_page.dart +++ b/lib/pangea/login/pages/public_courses_page.dart @@ -274,8 +274,7 @@ class PublicCoursesPageState extends State { spacing: 8.0, children: [ ImageByUrl( - imageUrl: - roomChunk.avatarUrl?.toString(), + imageUrl: roomChunk.avatarUrl, width: 58.0, borderRadius: BorderRadius.circular(10.0), diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index bfba786b1..4745ba53d 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -108,7 +108,7 @@ class Avatar extends StatelessWidget { // #Pangea : !(mxContent.toString().startsWith('mxc://')) ? ImageByUrl( - imageUrl: mxContent.toString(), + imageUrl: mxContent, width: size, replacement: Center( child: Icon( diff --git a/pubspec.yaml b/pubspec.yaml index 0e30c0b85..0270e844f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ description: Learn a language while texting your friends. # Pangea# publish_to: none # On version bump also increase the build number for F-Droid -version: 4.1.16+2 +version: 4.1.16+3 environment: sdk: ">=3.0.0 <4.0.0"