feat(xep): Remove Extensible File Thumbnails
This commit is contained in:
parent
a18507cc3a
commit
b14363319a
13
flake.nix
13
flake.nix
@ -12,12 +12,6 @@
|
||||
config = {
|
||||
android_sdk.accept_license = true;
|
||||
allowUnfree = true;
|
||||
|
||||
# Fix to allow building the NDK package
|
||||
# TODO: Remove once https://github.com/tadfisher/android-nixpkgs/issues/62 is resolved
|
||||
permittedInsecurePackages = [
|
||||
"python-2.7.18.6"
|
||||
];
|
||||
};
|
||||
};
|
||||
# Everything to make Flutter happy
|
||||
@ -34,13 +28,6 @@
|
||||
platforms-android-30
|
||||
platforms-android-31
|
||||
platforms-android-33
|
||||
|
||||
# For flutter_zxing
|
||||
cmake-3-18-1
|
||||
#ndk-21-4-7075529
|
||||
(ndk-21-4-7075529.overrideAttrs (old: {
|
||||
buildInputs = old.buildInputs ++ [ pkgs.python27 ];
|
||||
}))
|
||||
]);
|
||||
lib = pkgs.lib;
|
||||
pinnedJDK = pkgs.jdk17;
|
||||
|
@ -18,6 +18,7 @@
|
||||
- **BREAKING**: `ChatState.toString()` is now `ChatState.toName()`
|
||||
- **BREAKING**: Overriding `BaseOmemoManager` is no longer required. `OmemoManager` now takes callback methods instead.
|
||||
- Removed `ErrorResponseDiscoError` from the possible XEP-0030 errors.
|
||||
- **BREAKING**: Removed "Extensible File Thumbnails" (The `Thumbnail` type)
|
||||
|
||||
## 0.3.1
|
||||
|
||||
|
@ -39,7 +39,6 @@ export 'package:moxxmpp/src/socket.dart';
|
||||
export 'package:moxxmpp/src/stanza.dart';
|
||||
export 'package:moxxmpp/src/stringxml.dart';
|
||||
export 'package:moxxmpp/src/util/typed_map.dart';
|
||||
export 'package:moxxmpp/src/xeps/staging/extensible_file_thumbnails.dart';
|
||||
export 'package:moxxmpp/src/xeps/staging/fast.dart';
|
||||
export 'package:moxxmpp/src/xeps/staging/file_upload_notification.dart';
|
||||
export 'package:moxxmpp/src/xeps/xep_0004.dart';
|
||||
|
@ -69,6 +69,9 @@ const delayedDeliveryXmlns = 'urn:xmpp:delay';
|
||||
// XEP-0234
|
||||
const jingleFileTransferXmlns = 'urn:xmpp:jingle:apps:file-transfer:5';
|
||||
|
||||
// XEP-0264
|
||||
const jingleContentThumbnailXmlns = 'urn:xmpp:thumbs:1';
|
||||
|
||||
// XEP-0280
|
||||
const carbonsXmlns = 'urn:xmpp:carbons:2';
|
||||
|
||||
|
@ -1,57 +0,0 @@
|
||||
import 'package:moxxmpp/src/stringxml.dart';
|
||||
|
||||
/// NOTE: Specified by https://codeberg.org/moxxy/custom-xeps/src/branch/master/xep-xxxx-extensible-file-thumbnails.md
|
||||
|
||||
const fileThumbnailsXmlns = 'proto:urn:xmpp:eft:0';
|
||||
const blurhashThumbnailType = '$fileThumbnailsXmlns:blurhash';
|
||||
|
||||
abstract class Thumbnail {}
|
||||
|
||||
class BlurhashThumbnail extends Thumbnail {
|
||||
BlurhashThumbnail(this.hash);
|
||||
final String hash;
|
||||
}
|
||||
|
||||
Thumbnail? parseFileThumbnailElement(XMLNode node) {
|
||||
assert(
|
||||
node.attributes['xmlns'] == fileThumbnailsXmlns,
|
||||
'Invalid element xmlns',
|
||||
);
|
||||
assert(node.tag == 'file-thumbnail', 'Invalid element name');
|
||||
|
||||
switch (node.attributes['type']!) {
|
||||
case blurhashThumbnailType:
|
||||
{
|
||||
final hash = node.firstTag('blurhash')!.innerText();
|
||||
return BlurhashThumbnail(hash);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
XMLNode? _fromThumbnail(Thumbnail thumbnail) {
|
||||
if (thumbnail is BlurhashThumbnail) {
|
||||
return XMLNode(
|
||||
tag: 'blurhash',
|
||||
text: thumbnail.hash,
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
XMLNode constructFileThumbnailElement(Thumbnail thumbnail) {
|
||||
final node = _fromThumbnail(thumbnail)!;
|
||||
var type = '';
|
||||
if (thumbnail is BlurhashThumbnail) {
|
||||
type = blurhashThumbnailType;
|
||||
}
|
||||
|
||||
return XMLNode.xmlns(
|
||||
tag: 'file-thumbnail',
|
||||
xmlns: fileThumbnailsXmlns,
|
||||
attributes: {'type': type},
|
||||
children: [node],
|
||||
);
|
||||
}
|
59
packages/moxxmpp/lib/src/xeps/xep_0264.dart
Normal file
59
packages/moxxmpp/lib/src/xeps/xep_0264.dart
Normal file
@ -0,0 +1,59 @@
|
||||
import 'package:moxxmpp/src/namespaces.dart';
|
||||
import 'package:moxxmpp/src/stringxml.dart';
|
||||
|
||||
extension _StringToInt on String {
|
||||
int toInt() => int.parse(this);
|
||||
}
|
||||
|
||||
class JingleContentThumbnail {
|
||||
const JingleContentThumbnail(
|
||||
this.uri,
|
||||
this.mediaType,
|
||||
this.width,
|
||||
this.height,
|
||||
);
|
||||
|
||||
factory JingleContentThumbnail.fromXML(XMLNode thumbnail) {
|
||||
assert(
|
||||
thumbnail.tag == 'thumbnail',
|
||||
'thumbnail must be Jingle Content Thumbnail',
|
||||
);
|
||||
assert(
|
||||
thumbnail.attributes['xmlns'] == jingleContentThumbnailXmlns,
|
||||
'thumbnail must be Jingle Content Thumbnail',
|
||||
);
|
||||
|
||||
return JingleContentThumbnail(
|
||||
Uri.parse(thumbnail.attributes['uri']! as String),
|
||||
thumbnail.attributes['media-type'] as String?,
|
||||
(thumbnail.attributes['width'] as String?)?.toInt(),
|
||||
(thumbnail.attributes['height'] as String?)?.toInt(),
|
||||
);
|
||||
}
|
||||
|
||||
/// The URI of the thumbnail data.
|
||||
final Uri uri;
|
||||
|
||||
/// The MIME type of the thumbnail
|
||||
final String? mediaType;
|
||||
|
||||
/// The width of the thumbnail.
|
||||
final int? width;
|
||||
|
||||
/// The height of the thumbnail.
|
||||
final int? height;
|
||||
|
||||
/// Convert the thumbnail to its XML representation.
|
||||
XMLNode toXML() {
|
||||
return XMLNode.xmlns(
|
||||
tag: 'thumbnail',
|
||||
xmlns: jingleContentThumbnailXmlns,
|
||||
attributes: {
|
||||
'uri': uri.toString(),
|
||||
if (mediaType != null) 'media-type': mediaType!,
|
||||
if (width != null) 'width': width.toString(),
|
||||
if (height != null) 'height': height.toString(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@ 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';
|
||||
import 'package:moxxmpp/src/xeps/staging/extensible_file_thumbnails.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0264.dart';
|
||||
|
||||
class StatelessMediaSharingData implements StanzaHandlerExtension {
|
||||
const StatelessMediaSharingData({
|
||||
@ -20,7 +20,7 @@ class StatelessMediaSharingData implements StanzaHandlerExtension {
|
||||
final int size;
|
||||
final String description;
|
||||
final Map<String, String> hashes; // algo -> hash value
|
||||
final List<Thumbnail> thumbnails;
|
||||
final List<JingleContentThumbnail> thumbnails;
|
||||
|
||||
final String url;
|
||||
}
|
||||
@ -48,16 +48,11 @@ StatelessMediaSharingData parseSIMSElement(XMLNode node) {
|
||||
break;
|
||||
}
|
||||
|
||||
final thumbnails = List<Thumbnail>.empty(growable: true);
|
||||
for (final child in file.children) {
|
||||
// TODO(Unknown): Handle other thumbnails
|
||||
if (child.tag == 'file-thumbnail' &&
|
||||
child.attributes['xmlns'] == fileThumbnailsXmlns) {
|
||||
final thumb = parseFileThumbnailElement(child);
|
||||
if (thumb != null) {
|
||||
thumbnails.add(thumb);
|
||||
}
|
||||
}
|
||||
// Thumbnails
|
||||
final thumbnails = List<JingleContentThumbnail>.empty(growable: true);
|
||||
for (final i
|
||||
in file.findTags('thumbnail', xmlns: jingleContentThumbnailXmlns)) {
|
||||
thumbnails.add(JingleContentThumbnail.fromXML(i));
|
||||
}
|
||||
|
||||
return StatelessMediaSharingData(
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:moxxmpp/src/namespaces.dart';
|
||||
import 'package:moxxmpp/src/stringxml.dart';
|
||||
import 'package:moxxmpp/src/xeps/staging/extensible_file_thumbnails.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0264.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0300.dart';
|
||||
|
||||
class FileMetadataData {
|
||||
@ -39,12 +39,10 @@ class FileMetadataData {
|
||||
}
|
||||
|
||||
// Thumbnails
|
||||
final thumbnails = List<Thumbnail>.empty(growable: true);
|
||||
for (final i in node.findTags('file-thumbnail')) {
|
||||
final thumbnail = parseFileThumbnailElement(i);
|
||||
if (thumbnail != null) {
|
||||
thumbnails.add(thumbnail);
|
||||
}
|
||||
final thumbnails = List<JingleContentThumbnail>.empty(growable: true);
|
||||
for (final i
|
||||
in node.findTags('thumbnail', xmlns: jingleContentThumbnailXmlns)) {
|
||||
thumbnails.add(JingleContentThumbnail.fromXML(i));
|
||||
}
|
||||
|
||||
// Length and height
|
||||
@ -75,7 +73,7 @@ class FileMetadataData {
|
||||
final String? mediaType;
|
||||
final int? width;
|
||||
final int? height;
|
||||
final List<Thumbnail> thumbnails;
|
||||
final List<JingleContentThumbnail> thumbnails;
|
||||
final String? desc;
|
||||
final Map<HashFunction, String> hashes;
|
||||
final int? length;
|
||||
@ -119,7 +117,7 @@ class FileMetadataData {
|
||||
|
||||
for (final thumbnail in thumbnails) {
|
||||
node.addChild(
|
||||
constructFileThumbnailElement(thumbnail),
|
||||
thumbnail.toXML(),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,29 +1,22 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
|
||||
xmlns='http://usefulinc.com/ns/doap#'
|
||||
xmlns:foaf='http://xmlns.com/foaf/0.1/'
|
||||
xmlns:xmpp='https://linkmauve.fr/ns/xmpp-doap#'>
|
||||
<Project xml:lang='en'>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#">
|
||||
<Project xml:lang="en">
|
||||
<name>moxxmpp</name>
|
||||
<created>2021-12-26</created>
|
||||
<homepage rdf:resource='https://codeberg.org/moxxy/moxxmpp'/>
|
||||
<homepage rdf:resource="https://codeberg.org/moxxy/moxxmpp"/>
|
||||
<os>Linux</os>
|
||||
<os>Windows</os>
|
||||
<os>macOS</os>
|
||||
<os>Android</os>
|
||||
<os>iOS</os>
|
||||
|
||||
<programming-language>Dart</programming-language>
|
||||
|
||||
<maintainer>
|
||||
<foaf:Person>
|
||||
<foaf:name>Alexander "Polynomdivision"</foaf:name>
|
||||
<foaf:homepage rdf:resource="https://blog.polynom.me"/>
|
||||
</foaf:Person>
|
||||
</maintainer>
|
||||
|
||||
<implements rdf:resource="https://xmpp.org/rfcs/rfc6120.html"/>
|
||||
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
|
||||
@ -111,6 +104,13 @@
|
||||
<xmpp:version>1.6</xmpp:version>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0264.html"/>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:version>0.4.1</xmpp:version>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html"/>
|
||||
@ -256,14 +256,6 @@
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://codeberg.org/moxxy/custom-xeps/src/branch/master/xep-xxxx-extensible-file-thumbnails.md" />
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:version>0.2.1</xmpp:version>
|
||||
<xmpp:note xml:lang="en">Only Blurhash is implemented</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://codeberg.org/moxxy/custom-xeps/src/branch/master/xep-xxxx-file-upload-notification.md"/>
|
||||
|
Loading…
Reference in New Issue
Block a user