xmpp: Implement the basis for XEP-0446 and XEP-0447
This commit is contained in:
parent
b5e1da839a
commit
150df70b11
@ -32,3 +32,12 @@ const csiXmlns = "urn:xmpp:csi:0";
|
|||||||
|
|
||||||
// XEP-0359
|
// XEP-0359
|
||||||
const stableIdXmlns = "urn:xmpp:sid:0";
|
const stableIdXmlns = "urn:xmpp:sid:0";
|
||||||
|
|
||||||
|
// XEP-0446
|
||||||
|
const fileMetadataXmlns = "urn:xmpp:file:metadata:0";
|
||||||
|
|
||||||
|
// XEP-0447
|
||||||
|
const sfsXmlns = "urn:xmpp:sfs:0";
|
||||||
|
|
||||||
|
// ???
|
||||||
|
const urlDataXmlns = "http://jabber.org/protocol/url-data";
|
||||||
|
51
lib/xmpp/xeps/xep_0446.dart
Normal file
51
lib/xmpp/xeps/xep_0446.dart
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import "package:moxxyv2/xmpp/stringxml.dart";
|
||||||
|
import "package:moxxyv2/xmpp/namespaces.dart";
|
||||||
|
|
||||||
|
// TODO: Thumbnail
|
||||||
|
class FileMetadataData {
|
||||||
|
final String? mediaType;
|
||||||
|
|
||||||
|
// TODO: Maybe create a special type for this
|
||||||
|
final String? dimensions;
|
||||||
|
|
||||||
|
final String? desc;
|
||||||
|
final Map<String, String>? hashes;
|
||||||
|
final int? length;
|
||||||
|
final String? name;
|
||||||
|
final int? size;
|
||||||
|
|
||||||
|
const FileMetadataData({
|
||||||
|
this.mediaType,
|
||||||
|
this.dimensions,
|
||||||
|
this.desc,
|
||||||
|
this.hashes,
|
||||||
|
this.length,
|
||||||
|
this.name,
|
||||||
|
this.size
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
FileMetadataData parseFileMetadataElement(XMLNode node) {
|
||||||
|
assert(node.attributes["xmlns"] == fileMetadataXmlns);
|
||||||
|
assert(node.tag == "file");
|
||||||
|
|
||||||
|
final lengthElement = node.firstTag("length");
|
||||||
|
final int? length = lengthElement != null ? int.parse(lengthElement.innerText()) : null;
|
||||||
|
final sizeElement = node.firstTag("size");
|
||||||
|
final int? size = sizeElement != null ? int.parse(sizeElement.innerText()) : null;
|
||||||
|
|
||||||
|
final Map<String, String> hashes = {};
|
||||||
|
for (final e in node.findTags("hash")) {
|
||||||
|
hashes[e.attributes["algo"]] = e.innerText();
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileMetadataData(
|
||||||
|
mediaType: node.firstTag("media-type")?.innerText(),
|
||||||
|
dimensions: node.firstTag("dimensions")?.innerText(),
|
||||||
|
desc: node.firstTag("desc")?.innerText(),
|
||||||
|
hashes: hashes,
|
||||||
|
length: length,
|
||||||
|
name: node.firstTag("name")?.innerText(),
|
||||||
|
size: size
|
||||||
|
);
|
||||||
|
}
|
25
lib/xmpp/xeps/xep_0447.dart
Normal file
25
lib/xmpp/xeps/xep_0447.dart
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import "package:moxxyv2/xmpp/stringxml.dart";
|
||||||
|
import "package:moxxyv2/xmpp/namespaces.dart";
|
||||||
|
import "package:moxxyv2/xmpp/xeps/xep_0446.dart";
|
||||||
|
|
||||||
|
class StatelessFileSharingData {
|
||||||
|
final FileMetadataData metadata;
|
||||||
|
final String url;
|
||||||
|
|
||||||
|
const StatelessFileSharingData({ required this.metadata, required this.url });
|
||||||
|
}
|
||||||
|
|
||||||
|
StatelessFileSharingData parseSFSElement(XMLNode node) {
|
||||||
|
assert(node.attributes["xmlns"] == sfsXmlns);
|
||||||
|
assert(node.tag == "file-sharing");
|
||||||
|
|
||||||
|
final metadata = parseFileMetadataElement(node.firstTag("file")!);
|
||||||
|
final sources = node.firstTag("sources")!;
|
||||||
|
final urldata = sources.firstTag("url-data", xmlns: urlDataXmlns);
|
||||||
|
final url = urldata?.attributes["target"]!;
|
||||||
|
|
||||||
|
return StatelessFileSharingData(
|
||||||
|
metadata: metadata,
|
||||||
|
url: url
|
||||||
|
);
|
||||||
|
}
|
16
moxxy.doap
16
moxxy.doap
@ -84,5 +84,21 @@
|
|||||||
<xmpp:version>1.1.0</xmpp:version>
|
<xmpp:version>1.1.0</xmpp:version>
|
||||||
</xmpp:SupportedXep>
|
</xmpp:SupportedXep>
|
||||||
</implements>
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0446.html" />
|
||||||
|
<xmpp:status>partial</xmpp:status>
|
||||||
|
<xmpp:version>0.1.0</xmpp:version>
|
||||||
|
<xmpp:note xml:lang="en">Not connected read-only implementation</xmpp:note>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0447.html" />
|
||||||
|
<xmpp:status>partial</xmpp:status>
|
||||||
|
<xmpp:version>0.1.2</xmpp:version>
|
||||||
|
<xmpp:note xml:lang="en">Not connected read-only implementation</xmpp:note>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
</Project>
|
</Project>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
|
Loading…
Reference in New Issue
Block a user