refactor: Move packages into packages/
This commit is contained in:
69
packages/moxxmpp/lib/src/xeps/xep_0333.dart
Normal file
69
packages/moxxmpp/lib/src/xeps/xep_0333.dart
Normal file
@@ -0,0 +1,69 @@
|
||||
import 'package:moxxmpp/src/events.dart';
|
||||
import 'package:moxxmpp/src/jid.dart';
|
||||
import 'package:moxxmpp/src/managers/base.dart';
|
||||
import 'package:moxxmpp/src/managers/data.dart';
|
||||
import 'package:moxxmpp/src/managers/handlers.dart';
|
||||
import 'package:moxxmpp/src/managers/namespaces.dart';
|
||||
import 'package:moxxmpp/src/namespaces.dart';
|
||||
import 'package:moxxmpp/src/stanza.dart';
|
||||
import 'package:moxxmpp/src/stringxml.dart';
|
||||
|
||||
XMLNode makeChatMarkerMarkable() {
|
||||
return XMLNode.xmlns(
|
||||
tag: 'markable',
|
||||
xmlns: chatMarkersXmlns,
|
||||
);
|
||||
}
|
||||
|
||||
XMLNode makeChatMarker(String tag, String id) {
|
||||
assert(['received', 'displayed', 'acknowledged'].contains(tag), 'Invalid chat marker');
|
||||
return XMLNode.xmlns(
|
||||
tag: tag,
|
||||
xmlns: chatMarkersXmlns,
|
||||
attributes: { 'id': id },
|
||||
);
|
||||
}
|
||||
|
||||
class ChatMarkerManager extends XmppManagerBase {
|
||||
@override
|
||||
String getName() => 'ChatMarkerManager';
|
||||
|
||||
@override
|
||||
String getId() => chatMarkerManager;
|
||||
|
||||
@override
|
||||
List<String> getDiscoFeatures() => [ chatMarkersXmlns ];
|
||||
|
||||
@override
|
||||
List<StanzaHandler> getIncomingStanzaHandlers() => [
|
||||
StanzaHandler(
|
||||
stanzaTag: 'message',
|
||||
tagXmlns: chatMarkersXmlns,
|
||||
callback: _onMessage,
|
||||
// Before the message handler
|
||||
priority: -99,
|
||||
)
|
||||
];
|
||||
|
||||
@override
|
||||
Future<bool> isSupported() async => true;
|
||||
|
||||
Future<StanzaHandlerData> _onMessage(Stanza message, StanzaHandlerData state) async {
|
||||
final marker = message.firstTagByXmlns(chatMarkersXmlns)!;
|
||||
|
||||
// Handle the <markable /> explicitly
|
||||
if (marker.tag == 'markable') return state.copyWith(isMarkable: true);
|
||||
|
||||
if (!['received', 'displayed', 'acknowledged'].contains(marker.tag)) {
|
||||
logger.warning("Unknown message marker '${marker.tag}' found.");
|
||||
} else {
|
||||
getAttributes().sendEvent(ChatMarkerEvent(
|
||||
from: JID.fromString(message.from!),
|
||||
type: marker.tag,
|
||||
id: marker.attributes['id']! as String,
|
||||
),);
|
||||
}
|
||||
|
||||
return state.copyWith(done: true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user