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,275 +1,267 @@
 | 
			
		||||
<?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: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 rdf:resource="https://xmpp.org/rfcs/rfc6120.html"/>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>2.13.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>2.13.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>2.5rc3</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>2.5rc3</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.2</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.2</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0060.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.24.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0060.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.24.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0066.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Only jabber:x:oob</xmpp:note>
 | 
			
		||||
	<xmpp:version>1.5</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0066.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Only jabber:x:oob</xmpp:note>
 | 
			
		||||
        <xmpp:version>1.5</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0084.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Receiving data</xmpp:note>
 | 
			
		||||
	<xmpp:version>1.1.4</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0084.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Receiving data</xmpp:note>
 | 
			
		||||
        <xmpp:version>1.1.4</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0085.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>2.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0085.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>2.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.5.2</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.5.2</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0153.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0153.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0184.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.4.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0184.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.4.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0191.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.3.0</xmpp:version>
 | 
			
		||||
	<xmpp:note xml:lang="en">Not plugged into the UI</xmpp:note>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0191.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.3.0</xmpp:version>
 | 
			
		||||
        <xmpp:note xml:lang="en">Not plugged into the UI</xmpp:note>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.6</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.6</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.0.1</xmpp:version>
 | 
			
		||||
        <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-0297.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Exists only as part of support for XEP-0280</xmpp:note>
 | 
			
		||||
	<xmpp:version>1.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.0.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0300.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Supports only Sha256, Sha512 and blake2b512</xmpp:note>
 | 
			
		||||
	<xmpp:version>1.0.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0297.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Exists only as part of support for XEP-0280</xmpp:note>
 | 
			
		||||
        <xmpp:version>1.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0308.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.2.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0300.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Supports only Sha256, Sha512 and blake2b512</xmpp:note>
 | 
			
		||||
        <xmpp:version>1.0.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0333.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Read-only support</xmpp:note>
 | 
			
		||||
	<xmpp:version>0.4</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0308.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.2.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0334.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:note xml:lang="en">Write-only support</xmpp:note>
 | 
			
		||||
	<xmpp:version>0.3.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0333.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Read-only support</xmpp:note>
 | 
			
		||||
        <xmpp:version>0.4</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0334.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:note xml:lang="en">Write-only support</xmpp:note>
 | 
			
		||||
        <xmpp:version>0.3.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.6.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.1.0</xmpp:version>
 | 
			
		||||
	<xmpp:note xml:lang="en">Only handles the success case; not accessible via the App</xmpp:note>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.6.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0368.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>1.1.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.1.0</xmpp:version>
 | 
			
		||||
        <xmpp:note xml:lang="en">Only handles the success case; not accessible via the App</xmpp:note>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0380.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.4.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0368.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>1.1.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0384.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.8.3</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0380.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.4.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0420.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.4.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0384.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.8.3</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0424.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.3.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0420.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.4.1</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0444.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.1.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0424.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.3.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0446.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.2.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0444.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.1.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0447.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.1.2</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0446.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.2.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0448.html" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.2.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0447.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.1.2</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0449.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.1.1</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0448.html"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.2.0</xmpp:version>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
    <implements>
 | 
			
		||||
      <xmpp:SupportedXep>
 | 
			
		||||
	<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0461.html" />
 | 
			
		||||
	<xmpp:status>complete</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.2.0</xmpp:version>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0449.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.1.1</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:xep rdf:resource="https://xmpp.org/extensions/xep-0461.html"/>
 | 
			
		||||
        <xmpp:status>complete</xmpp:status>
 | 
			
		||||
        <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-file-upload-notification.md" />
 | 
			
		||||
	<xmpp:status>partial</xmpp:status>
 | 
			
		||||
	<xmpp:version>0.0.5</xmpp:version>
 | 
			
		||||
	<xmpp:note xml:lang="en">Sending and receiving implemented; cancellation not implemented</xmpp:note>
 | 
			
		||||
        <xmpp:xep rdf:resource="https://codeberg.org/moxxy/custom-xeps/src/branch/master/xep-xxxx-file-upload-notification.md"/>
 | 
			
		||||
        <xmpp:status>partial</xmpp:status>
 | 
			
		||||
        <xmpp:version>0.0.5</xmpp:version>
 | 
			
		||||
        <xmpp:note xml:lang="en">Sending and receiving implemented; cancellation not implemented</xmpp:note>
 | 
			
		||||
      </xmpp:SupportedXep>
 | 
			
		||||
    </implements>
 | 
			
		||||
  </Project>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user