Compare commits

...

2 Commits

Author SHA1 Message Date
cf0d473a40 ⬆️ Support newer version of server messaging 2024-05-05 01:53:31 +08:00
efc46dbbc5 🐛 Bug fixes 2024-05-03 23:38:51 +08:00
12 changed files with 57 additions and 50 deletions

View File

@ -13,7 +13,7 @@ class Channel {
int type;
Account account;
int accountId;
int realmId;
int? realmId;
Channel({
required this.id,
@ -28,7 +28,7 @@ class Channel {
required this.type,
required this.account,
required this.accountId,
required this.realmId,
this.realmId,
});
factory Channel.fromJson(Map<String, dynamic> json) => Channel(

View File

@ -47,7 +47,7 @@ class ChatProvider extends ChangeNotifier {
Future<Channel> fetchChannel(String alias) async {
final Client client = Client();
var uri = getRequestUri('messaging', '/api/channels/$alias');
var uri = getRequestUri('messaging', '/api/channels/global/$alias');
var res = await client.get(uri);
if (res.statusCode == 200) {
final result = jsonDecode(utf8.decode(res.bodyBytes));
@ -63,7 +63,7 @@ class ChatProvider extends ChangeNotifier {
Future<Call?> fetchOngoingCall(String alias) async {
final Client client = Client();
var uri = getRequestUri('messaging', '/api/channels/$alias/calls/ongoing');
var uri = getRequestUri('messaging', '/api/channels/global/$alias/calls/ongoing');
var res = await client.get(uri);
if (res.statusCode == 200) {
final result = jsonDecode(utf8.decode(res.bodyBytes));
@ -181,7 +181,7 @@ class ChatCallInstance {
throw Exception('unauthorized');
}
var uri = getRequestUri('messaging', '/api/channels/${channel.alias}/calls/ongoing/token');
var uri = getRequestUri('messaging', '/api/channels/global/${channel.alias}/calls/ongoing/token');
var res = await auth.client!.post(uri);
if (res.statusCode == 200) {

View File

@ -68,6 +68,7 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
void resetInputs() async {
final auth = context.read<AuthProvider>();
final prof = await auth.getProfiles();
setState(() {
_usernameController.text = prof['name'];
_nicknameController.text = prof['nick'];
_descriptionController.text = prof['description'];
@ -83,6 +84,7 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
_birthday = DateTime.parse(prof['profile']['birthday']);
_birthdayController.text = DateFormat('yyyy-MM-dd hh:mm').format(_birthday!);
}
});
}
void applyChanges() async {
@ -107,9 +109,7 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
);
if (res.statusCode == 200) {
await auth.fetchProfiles();
setState(() {
resetInputs();
});
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.personalizeApplied),
@ -122,7 +122,7 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
setState(() => _isSubmitting = false);
}
Future<void> applyAvatar(String position) async {
Future<void> applyImage(String position) async {
final auth = context.read<AuthProvider>();
if (!await auth.isAuthorized()) return;
@ -139,9 +139,7 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
var res = await auth.client!.send(req);
if (res.statusCode == 200) {
await auth.fetchProfiles();
setState(() {
resetInputs();
});
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!.personalizeApplied),
@ -161,10 +159,8 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
super.initState();
Future.delayed(Duration.zero, () {
setState(() {
resetInputs();
});
});
}
@override
@ -182,7 +178,8 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
bottom: 0,
left: 40,
child: FloatingActionButton.small(
onPressed: () => applyAvatar('avatar'),
heroTag: const Key('avatar-editor'),
onPressed: () => applyImage('avatar'),
child: const Icon(
Icons.camera,
),
@ -222,7 +219,8 @@ class _PersonalizeScreenWidgetState extends State<PersonalizeScreenWidget> {
bottom: 16,
right: 16,
child: FloatingActionButton(
onPressed: () => applyAvatar('banner'),
heroTag: const Key('banner-editor'),
onPressed: () => applyImage('banner'),
child: const Icon(
Icons.camera_alt,
),

View File

@ -39,8 +39,8 @@ class _ChannelEditorScreenState extends State<ChannelEditorScreen> {
}
final uri = widget.editing == null
? getRequestUri('messaging', '/api/channels')
: getRequestUri('messaging', '/api/channels/${widget.editing!.id}');
? getRequestUri('messaging', '/api/channels/global')
: getRequestUri('messaging', '/api/channels/global/${widget.editing!.id}');
final req = Request(widget.editing == null ? 'POST' : 'PUT', uri);
req.headers['Content-Type'] = 'application/json';

View File

@ -37,7 +37,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
_selfId = prof['id'];
var uri = getRequestUri(
'messaging', '/api/channels/${widget.channel.alias}/members');
'messaging', '/api/channels/global/${widget.channel.alias}/members');
var res = await auth.client!.get(uri);
if (res.statusCode == 200) {
@ -61,7 +61,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
}
var uri = getRequestUri(
'messaging', '/api/channels/${widget.channel.alias}/kick');
'messaging', '/api/channels/global/${widget.channel.alias}/kick');
var res = await auth.client!.post(
uri,
@ -92,7 +92,7 @@ class _ChatMemberScreenState extends State<ChatMemberScreen> {
}
var uri = getRequestUri(
'messaging', '/api/channels/${widget.channel.alias}/invite');
'messaging', '/api/channels/global/${widget.channel.alias}/invite');
var res = await auth.client!.post(
uri,

View File

@ -77,7 +77,7 @@ class _ChatScreenWidgetState extends State<ChatScreenWidget> {
var uri = getRequestUri(
'messaging',
'/api/channels/${widget.alias}/messages?take=$take&offset=$offset',
'/api/channels/global/${widget.alias}/messages?take=$take&offset=$offset',
);
var res = await auth.client!.get(uri);

View File

@ -58,7 +58,7 @@ class _ChatListWidgetState extends State<ChatListWidget> {
final auth = context.read<AuthProvider>();
if (!await auth.isAuthorized()) return;
var uri = getRequestUri('messaging', '/api/channels/me/available');
var uri = getRequestUri('messaging', '/api/channels/global/me/available');
var res = await auth.client!.get(uri);
if (res.statusCode == 200) {

View File

@ -32,17 +32,26 @@ class _UserInfoScreenState extends State<UserInfoScreen> {
_client.get(getRequestUri('passport', '/api/users/${widget.name}')),
_client.get(getRequestUri('passport', '/api/users/${widget.name}/page'))
], eagerError: true);
final mistakeRes = res.indexWhere((x) => x.statusCode != 200);
final mistakeRes = res.indexWhere((x) => x.statusCode != 200 && x.statusCode != 400);
if (mistakeRes > -1) {
var message = utf8.decode(res[0].bodyBytes);
var message = utf8.decode(res[mistakeRes].bodyBytes);
context.showErrorDialog(message);
throw Exception(message);
} else {
final info = Account.fromJson(jsonDecode(utf8.decode(res[0].bodyBytes)));
final page = PersonalPage.fromJson(jsonDecode(utf8.decode(res[1].bodyBytes)));
final page = res[1].statusCode == 200 ? PersonalPage.fromJson(jsonDecode(utf8.decode(res[1].bodyBytes))) : null;
setState(() {
_userinfo = info;
_page = page;
_page = page ??
PersonalPage(
id: 0,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
content: '',
script: '',
style: '',
accountId: info.id,
);
});
return info;
}

View File

@ -33,7 +33,7 @@ class _ChannelCallActionState extends State<ChannelCallAction> {
return;
}
var uri = getRequestUri('messaging', '/api/channels/${widget.channel.alias}/calls');
var uri = getRequestUri('messaging', '/api/channels/global/${widget.channel.alias}/calls');
var res = await auth.client!.post(uri);
if (res.statusCode != 200) {
@ -54,7 +54,7 @@ class _ChannelCallActionState extends State<ChannelCallAction> {
return;
}
var uri = getRequestUri('messaging', '/api/channels/${widget.channel.alias}/calls/ongoing');
var uri = getRequestUri('messaging', '/api/channels/global/${widget.channel.alias}/calls/ongoing');
var res = await auth.client!.delete(uri);
if (res.statusCode != 200) {

View File

@ -32,7 +32,7 @@ class _ChannelDeletionState extends State<ChannelDeletion> {
}
var res = await auth.client!.delete(
getRequestUri('messaging', '/api/channels/${widget.channel.id}'),
getRequestUri('messaging', '/api/channels/global/${widget.channel.id}'),
);
if (res.statusCode != 200) {
var message = utf8.decode(res.bodyBytes);
@ -54,7 +54,7 @@ class _ChannelDeletionState extends State<ChannelDeletion> {
}
var res = await auth.client!.post(
getRequestUri('messaging', '/api/channels/${widget.channel.alias}/leave'),
getRequestUri('messaging', '/api/channels/global/${widget.channel.alias}/leave'),
);
if (res.statusCode != 200) {
var message = utf8.decode(res.bodyBytes);

View File

@ -31,7 +31,7 @@ class _ChatMessageDeletionDialogState extends State<ChatMessageDeletionDialog> {
if (!await auth.isAuthorized()) return;
final uri = getRequestUri('messaging',
'/api/channels/${widget.channel}/messages/${widget.item.id}');
'/api/channels/global/${widget.channel}/messages/${widget.item.id}');
setState(() => _isSubmitting = true);
final res = await auth.client!.delete(uri);

View File

@ -53,8 +53,8 @@ class _ChatMessageEditorState extends State<ChatMessageEditor> {
if (!await auth.isAuthorized()) return;
final uri = widget.editing == null
? getRequestUri('messaging', '/api/channels/${widget.channel}/messages')
: getRequestUri('messaging', '/api/channels/${widget.channel}/messages/${widget.editing!.id}');
? getRequestUri('messaging', '/api/channels/global/${widget.channel}/messages')
: getRequestUri('messaging', '/api/channels/global/${widget.channel}/messages/${widget.editing!.id}');
final req = Request(widget.editing == null ? 'POST' : 'PUT', uri);
req.headers['Content-Type'] = 'application/json';