develop-replyToMessages #67
lib
api
holidays
marianumcloud
talk
chat
getParticipants
room
sendMessage
webdav
queries
listFiles
mhsl
breaker
getBreakers
customTimetableEvent
message
getMessages
webuntis
queries
getHolidays
getRooms
getSubjects
getTimetable
model
notification
storage
view
pages
talk
settings
widget
debug
@@ -1,16 +1,23 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../../api/apiResponse.dart';
|
import '../../api/apiResponse.dart';
|
||||||
import '../../api/marianumcloud/talk/chat/getChatCache.dart';
|
import '../../api/marianumcloud/talk/chat/getChatCache.dart';
|
||||||
import '../../api/marianumcloud/talk/chat/getChatResponse.dart';
|
import '../../api/marianumcloud/talk/chat/getChatResponse.dart';
|
||||||
|
import '../../storage/base/settingsProvider.dart';
|
||||||
import '../dataHolder.dart';
|
import '../dataHolder.dart';
|
||||||
|
|
||||||
class ChatProps extends DataHolder {
|
class ChatProps extends DataHolder {
|
||||||
String _queryToken = '';
|
String _queryToken = '';
|
||||||
DateTime _lastTokenSet = DateTime.now();
|
DateTime _lastTokenSet = DateTime.now();
|
||||||
int? referenceMessageId;
|
int? _referenceMessageId;
|
||||||
|
|
||||||
GetChatResponse? _getChatResponse;
|
GetChatResponse? _getChatResponse;
|
||||||
GetChatResponse get getChatResponse => _getChatResponse!;
|
GetChatResponse get getChatResponse => _getChatResponse!;
|
||||||
|
|
||||||
|
int? get getReferenceMessageId => _referenceMessageId;
|
||||||
|
set unsafeInternalSetReferenceMessageId(int? reference) => _referenceMessageId = reference;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<ApiResponse?> properties() => [_getChatResponse];
|
List<ApiResponse?> properties() => [_getChatResponse];
|
||||||
|
|
||||||
@@ -31,9 +38,18 @@ class ChatProps extends DataHolder {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setReferenceMessageId(int? messageId) {
|
void setReferenceMessageId(int? messageId, BuildContext context, String sendToToken) {
|
||||||
referenceMessageId = messageId;
|
Future.microtask(() {
|
||||||
notifyListeners();
|
_referenceMessageId = messageId;
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
var settings = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
|
if(messageId != null) {
|
||||||
|
settings.val(write: true).talkSettings.draftReplies[sendToToken] = messageId;
|
||||||
|
} else {
|
||||||
|
settings.val(write: true).talkSettings.draftReplies.removeWhere((key, value) => key == sendToToken);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void setQueryToken(String token) {
|
void setQueryToken(String token) {
|
||||||
|
@@ -7,8 +7,9 @@ class TalkSettings {
|
|||||||
bool sortFavoritesToTop;
|
bool sortFavoritesToTop;
|
||||||
bool sortUnreadToTop;
|
bool sortUnreadToTop;
|
||||||
Map<String, String> drafts;
|
Map<String, String> drafts;
|
||||||
|
Map<String, int> draftReplies;
|
||||||
|
|
||||||
TalkSettings({required this.sortFavoritesToTop, required this.sortUnreadToTop, required this.drafts});
|
TalkSettings({required this.sortFavoritesToTop, required this.sortUnreadToTop, required this.drafts, required this.draftReplies});
|
||||||
|
|
||||||
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
||||||
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
||||||
|
@@ -10,6 +10,7 @@ TalkSettings _$TalkSettingsFromJson(Map<String, dynamic> json) => TalkSettings(
|
|||||||
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
||||||
sortUnreadToTop: json['sortUnreadToTop'] as bool,
|
sortUnreadToTop: json['sortUnreadToTop'] as bool,
|
||||||
drafts: Map<String, String>.from(json['drafts'] as Map),
|
drafts: Map<String, String>.from(json['drafts'] as Map),
|
||||||
|
draftReplies: Map<String, int>.from(json['draftReplies'] as Map),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
||||||
@@ -17,4 +18,5 @@ Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
|||||||
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
||||||
'sortUnreadToTop': instance.sortUnreadToTop,
|
'sortUnreadToTop': instance.sortUnreadToTop,
|
||||||
'drafts': instance.drafts,
|
'drafts': instance.drafts,
|
||||||
|
'draftReplies': instance.draftReplies,
|
||||||
};
|
};
|
||||||
|
@@ -279,7 +279,7 @@ class _ChatBubbleState extends State<ChatBubble> with SingleTickerProviderStateM
|
|||||||
_position = const Offset(0, 0);
|
_position = const Offset(0, 0);
|
||||||
});
|
});
|
||||||
if(widget.bubbleData.isReplyable) {
|
if(widget.bubbleData.isReplyable) {
|
||||||
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(widget.bubbleData.id);
|
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(widget.bubbleData.id, context, widget.chatData.token);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongPress: showOptionsDialog,
|
onLongPress: showOptionsDialog,
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:nextcloud/nextcloud.dart';
|
import 'package:nextcloud/nextcloud.dart';
|
||||||
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
||||||
@@ -81,7 +80,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
settings = Provider.of<SettingsProvider>(context, listen: false);
|
settings = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
Provider.of<ChatProps>(context, listen: false).referenceMessageId = null;
|
Provider.of<ChatProps>(context, listen: false).unsafeInternalSetReferenceMessageId =
|
||||||
|
settings.val().talkSettings.draftReplies[widget.sendToToken];
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -99,8 +99,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
children: [
|
children: [
|
||||||
Consumer<ChatProps>(
|
Consumer<ChatProps>(
|
||||||
builder: (context, data, child) {
|
builder: (context, data, child) {
|
||||||
if(data.referenceMessageId != null) {
|
if(data.getReferenceMessageId != null) {
|
||||||
var referenceMessage = data.getChatResponse.sortByTimestamp().where((element) => element.id == data.referenceMessageId).last;
|
var referenceMessage = data.getChatResponse.sortByTimestamp().where((element) => element.id == data.getReferenceMessageId).last;
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -111,7 +111,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => data.setReferenceMessageId(null),
|
onPressed: () => data.setReferenceMessageId(null, context, widget.sendToToken),
|
||||||
icon: const Icon(Icons.close_outlined),
|
icon: const Icon(Icons.close_outlined),
|
||||||
padding: const EdgeInsets.only(left: 0),
|
padding: const EdgeInsets.only(left: 0),
|
||||||
),
|
),
|
||||||
@@ -194,7 +194,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
const SizedBox(width: 15),
|
const SizedBox(width: 15),
|
||||||
FloatingActionButton(
|
FloatingActionButton(
|
||||||
mini: true,
|
mini: true,
|
||||||
onPressed: (){
|
onPressed: () {
|
||||||
if(_textBoxController.text.isEmpty) return;
|
if(_textBoxController.text.isEmpty) return;
|
||||||
if(isLoading) return;
|
if(isLoading) return;
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
});
|
});
|
||||||
SendMessage(widget.sendToToken, SendMessageParams(
|
SendMessage(widget.sendToToken, SendMessageParams(
|
||||||
_textBoxController.text,
|
_textBoxController.text,
|
||||||
replyTo: Provider.of<ChatProps>(context, listen: false).referenceMessageId.toString()
|
replyTo: Provider.of<ChatProps>(context, listen: false).getReferenceMessageId.toString()
|
||||||
)).run().then((value) {
|
)).run().then((value) {
|
||||||
_query();
|
_query();
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -211,8 +211,8 @@ class _ChatTextfieldState extends State<ChatTextfield> {
|
|||||||
});
|
});
|
||||||
_textBoxController.text = '';
|
_textBoxController.text = '';
|
||||||
setDraft('');
|
setDraft('');
|
||||||
|
Provider.of<ChatProps>(context, listen: false).setReferenceMessageId(null, context, widget.sendToToken);
|
||||||
});
|
});
|
||||||
Provider.of<ChatProps>(context, listen: false).referenceMessageId = null;
|
|
||||||
},
|
},
|
||||||
backgroundColor: Theme.of(context).primaryColor,
|
backgroundColor: Theme.of(context).primaryColor,
|
||||||
elevation: 5,
|
elevation: 5,
|
||||||
|
@@ -29,6 +29,7 @@ class DefaultSettings {
|
|||||||
sortFavoritesToTop: true,
|
sortFavoritesToTop: true,
|
||||||
sortUnreadToTop: false,
|
sortUnreadToTop: false,
|
||||||
drafts: {},
|
drafts: {},
|
||||||
|
draftReplies: {},
|
||||||
),
|
),
|
||||||
fileSettings: FileSettings(
|
fileSettings: FileSettings(
|
||||||
sortFoldersToTop: true,
|
sortFoldersToTop: true,
|
||||||
|
Reference in New Issue
Block a user