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

View File

@ -47,7 +47,7 @@ class ChatProvider extends ChangeNotifier {
Future<Channel> fetchChannel(String alias) async { Future<Channel> fetchChannel(String alias) async {
final Client client = Client(); 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); var res = await client.get(uri);
if (res.statusCode == 200) { if (res.statusCode == 200) {
final result = jsonDecode(utf8.decode(res.bodyBytes)); final result = jsonDecode(utf8.decode(res.bodyBytes));
@ -63,7 +63,7 @@ class ChatProvider extends ChangeNotifier {
Future<Call?> fetchOngoingCall(String alias) async { Future<Call?> fetchOngoingCall(String alias) async {
final Client client = Client(); 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); var res = await client.get(uri);
if (res.statusCode == 200) { if (res.statusCode == 200) {
final result = jsonDecode(utf8.decode(res.bodyBytes)); final result = jsonDecode(utf8.decode(res.bodyBytes));
@ -181,7 +181,7 @@ class ChatCallInstance {
throw Exception('unauthorized'); 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); var res = await auth.client!.post(uri);
if (res.statusCode == 200) { if (res.statusCode == 200) {

View File

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

View File

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

View File

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

View File

@ -77,7 +77,7 @@ class _ChatScreenWidgetState extends State<ChatScreenWidget> {
var uri = getRequestUri( var uri = getRequestUri(
'messaging', '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); var res = await auth.client!.get(uri);

View File

@ -58,7 +58,7 @@ class _ChatListWidgetState extends State<ChatListWidget> {
final auth = context.read<AuthProvider>(); final auth = context.read<AuthProvider>();
if (!await auth.isAuthorized()) return; 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); var res = await auth.client!.get(uri);
if (res.statusCode == 200) { 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}')),
_client.get(getRequestUri('passport', '/api/users/${widget.name}/page')) _client.get(getRequestUri('passport', '/api/users/${widget.name}/page'))
], eagerError: true); ], eagerError: true);
final mistakeRes = res.indexWhere((x) => x.statusCode != 200); final mistakeRes = res.indexWhere((x) => x.statusCode != 200 && x.statusCode != 400);
if (mistakeRes > -1) { if (mistakeRes > -1) {
var message = utf8.decode(res[0].bodyBytes); var message = utf8.decode(res[mistakeRes].bodyBytes);
context.showErrorDialog(message); context.showErrorDialog(message);
throw Exception(message); throw Exception(message);
} else { } else {
final info = Account.fromJson(jsonDecode(utf8.decode(res[0].bodyBytes))); 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(() { setState(() {
_userinfo = info; _userinfo = info;
_page = page; _page = page ??
PersonalPage(
id: 0,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
content: '',
script: '',
style: '',
accountId: info.id,
);
}); });
return info; return info;
} }

View File

@ -33,7 +33,7 @@ class _ChannelCallActionState extends State<ChannelCallAction> {
return; 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); var res = await auth.client!.post(uri);
if (res.statusCode != 200) { if (res.statusCode != 200) {
@ -54,7 +54,7 @@ class _ChannelCallActionState extends State<ChannelCallAction> {
return; 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); var res = await auth.client!.delete(uri);
if (res.statusCode != 200) { if (res.statusCode != 200) {

View File

@ -32,7 +32,7 @@ class _ChannelDeletionState extends State<ChannelDeletion> {
} }
var res = await auth.client!.delete( 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) { if (res.statusCode != 200) {
var message = utf8.decode(res.bodyBytes); var message = utf8.decode(res.bodyBytes);
@ -54,7 +54,7 @@ class _ChannelDeletionState extends State<ChannelDeletion> {
} }
var res = await auth.client!.post( 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) { if (res.statusCode != 200) {
var message = utf8.decode(res.bodyBytes); var message = utf8.decode(res.bodyBytes);

View File

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

View File

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