branch: elpa/jabber
commit e75325c38f3f63f8c58e7856fa9e89a147a0986a
Author: Thanos Apollo <[email protected]>
Commit: Thanos Apollo <[email protected]>
xdata: Separate form parsing
---
lisp/jabber-disco.el | 10 +++++-----
lisp/jabber-register.el | 5 +++--
lisp/jabber-widget.el | 13 ++-----------
lisp/jabber-xdata.el | 38 ++++++++++++++++++++++++++++++++++++++
4 files changed, 48 insertions(+), 18 deletions(-)
diff --git a/lisp/jabber-disco.el b/lisp/jabber-disco.el
index 800f675795..799ec5de8d 100644
--- a/lisp/jabber-disco.el
+++ b/lisp/jabber-disco.el
@@ -31,6 +31,7 @@
(require 'cl-lib)
(require 'jabber-iq)
(require 'jabber-xml)
+(require 'jabber-xdata)
;; Global reference declarations
@@ -131,7 +132,6 @@ nil, access is always granted.")
(declare-function jabber-send-current-presence "jabber-presence.el"
(&optional jc))
-(declare-function jabber-widget-xdata-formtype "jabber-widget.el" (x))
(defvar jabber-presence-element-functions nil) ; jabber-presence.el
;;
@@ -337,8 +337,8 @@ Return the concatenated sorted feature entries."
FORMS is a list of <x> XML nodes (already filtered for FORM_TYPE).
Return the concatenated sorted form entries."
(let ((sorted (sort forms (lambda (a b)
- (string< (jabber-widget-xdata-formtype a)
- (jabber-widget-xdata-formtype b))))))
+ (string< (jabber-xdata-form-type a)
+ (jabber-xdata-form-type b))))))
(mapconcat
(lambda (form)
(let ((fields (sort (jabber-xml-get-children form 'field)
@@ -346,7 +346,7 @@ Return the concatenated sorted form entries."
(string< (jabber-xml-get-attribute a 'var)
(jabber-xml-get-attribute b 'var))))))
(concat
- (jabber-widget-xdata-formtype form) "<"
+ (jabber-xdata-form-type form) "<"
(mapconcat
(lambda (field)
(if (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
@@ -370,7 +370,7 @@ Return the concatenated sorted form entries."
(forms (cl-remove-if-not
(lambda (x)
(and (string= (jabber-xml-get-xmlns x) jabber-xdata-xmlns)
- (jabber-widget-xdata-formtype x)))
+ (jabber-xdata-form-type x)))
(jabber-xml-get-children query 'x)))
(s (encode-coding-string
(concat (jabber-caps--identity-string identities)
diff --git a/lisp/jabber-register.el b/lisp/jabber-register.el
index ce296c6198..79bbf26d13 100644
--- a/lisp/jabber-register.el
+++ b/lisp/jabber-register.el
@@ -29,6 +29,7 @@
(require 'jabber-iq)
(require 'jabber-widget)
+(require 'jabber-xdata)
;; Global reference declarations
@@ -103,7 +104,7 @@ obtained from `xml-parse-region'."
;; for sure how to put a default username in it.
(jabber-widget-render-xdata-form x
(if (and register-account
- (string=
(jabber-widget-xdata-formtype x) jabber-register-xmlns))
+ (string=
(jabber-xdata-form-type x) jabber-register-xmlns))
(list (cons "username" username))
nil))))
(if (not have-xdata)
@@ -173,4 +174,4 @@ obtained from `xml-parse-region'."
(provide 'jabber-register)
-;;; jabber-register.el ends here
\ No newline at end of file
+;;; jabber-register.el ends here
diff --git a/lisp/jabber-widget.el b/lisp/jabber-widget.el
index 636d224441..057bd77833 100644
--- a/lisp/jabber-widget.el
+++ b/lisp/jabber-widget.el
@@ -31,6 +31,7 @@
(require 'wid-edit)
(require 'jabber-util)
(require 'jabber-disco)
+(require 'jabber-xdata)
(defvar jabber-widget-alist nil
"Alist of widgets currently used.")
@@ -354,16 +355,6 @@ Return a list of strings, each of which to be included as
cdata in a
(indent-to 30)
(insert (apply #'concat values) "\n"))))
-(defun jabber-widget-xdata-formtype (x)
- "Return the form type of the xdata form in X, by XEP-0068.
-Return nil if no form type is specified."
- (catch 'found-formtype
- (dolist (field (jabber-xml-get-children x 'field))
- (when (and (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
- (string= (jabber-xml-get-attribute field 'type) "hidden"))
- (throw 'found-formtype (car (jabber-xml-node-children
- (car (jabber-xml-get-children field
'value)))))))))
-
(provide 'jabber-widget)
-;;; jabber-widget.el ends here
\ No newline at end of file
+;;; jabber-widget.el ends here
diff --git a/lisp/jabber-xdata.el b/lisp/jabber-xdata.el
new file mode 100644
index 0000000000..1c320184d2
--- /dev/null
+++ b/lisp/jabber-xdata.el
@@ -0,0 +1,38 @@
+;;; jabber-xdata.el --- XMPP data form helpers -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026 Thanos Apollo
+
+;; Maintainer: Thanos Apollo <[email protected]>
+
+;; This file is a part of jabber.el.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+
+;;; Commentary:
+
+;; Parse XMPP data forms without depending on widget rendering.
+
+;;; Code:
+
+(require 'jabber-xml)
+
+(defun jabber-xdata-form-type (x)
+ "Return the form type of the XData form X.
+Return nil when X has no XEP-0068 FORM_TYPE field."
+ (catch 'form-type
+ (dolist (field (jabber-xml-get-children x 'field))
+ (when (and (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
+ (string= (jabber-xml-get-attribute field 'type) "hidden"))
+ (throw 'form-type
+ (car (jabber-xml-node-children
+ (car (jabber-xml-get-children field 'value)))))))))
+
+(define-obsolete-function-alias 'jabber-widget-xdata-formtype
+ #'jabber-xdata-form-type "0.11.0")
+
+(provide 'jabber-xdata)
+
+;;; jabber-xdata.el ends here