unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#39965: [PATCH] Add support for multiple gravatar-like services
@ 2020-03-07  0:11 ` Philip K
  2020-03-07  7:51   ` Eli Zaretskii
                     ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Philip K @ 2020-03-07  0:11 UTC (permalink / raw)
  To: 39965; +Cc: philip.kaludercic

Specifically, the non-proprietary services libravatar (now default)
and unicornify have been added. The behaviour is customised via the
new variable `gravatar-service'.
---
 lisp/image/gravatar.el            | 19 +++++++++++++++----
 test/lisp/image/gravatar-tests.el |  1 +
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
index b8542bc3c3..c1ae0cefe3 100644
--- a/lisp/image/gravatar.el
+++ b/lisp/image/gravatar.el
@@ -118,9 +118,16 @@ gravatar-force-default
   :version "27.1"
   :group 'gravatar)
 
-(defconst gravatar-base-url
-  "https://www.gravatar.com/avatar"
-  "Base URL for getting gravatars.")
+(defcustom gravatar-service 'libravatar
+  "Symbol denoting gravatar-like service to use."
+  :type '(choice (const libravatar)
+                 (const gravatar)
+                 (const unicornify))
+  :version "27.1"
+  :link '(url-link "https://www.libravatar.org/")
+  :link '(url-link "https://unicornify.pictures/")
+  :link '(url-link "https://gravatar.com/")
+  :group 'gravatar)
 
 (defun gravatar-hash (mail-address)
   "Return the Gravatar hash for MAIL-ADDRESS."
@@ -142,7 +149,11 @@ gravatar-build-url
   "Return the URL of a gravatar for MAIL-ADDRESS."
   ;; https://gravatar.com/site/implement/images/
   (format "%s/%s?%s"
-          gravatar-base-url
+          (cond ((eq gravatar-service 'gravatar)
+                 "https://www.gravatar.com/avatar")
+                ((eq gravatar-service 'unicornify)
+                 "https://unicornify.pictures/avatar/")
+                (t "https://seccdn.libravatar.org/avatar"))
           (gravatar-hash mail-address)
           (gravatar--query-string)))
 
diff --git a/test/lisp/image/gravatar-tests.el b/test/lisp/image/gravatar-tests.el
index e66b5c6803..31a28293fa 100644
--- a/test/lisp/image/gravatar-tests.el
+++ b/test/lisp/image/gravatar-tests.el
@@ -65,6 +65,7 @@ gravatar-build-url
   "Test `gravatar-build-url'."
   (let ((gravatar-default-image nil)
         (gravatar-force-default nil)
+        (gravatar-service 'gravatar)
         (gravatar-size nil))
     (should (equal (gravatar-build-url "foo") "\
 https://www.gravatar.com/avatar/acbd18db4cc2f85cedef654fccc4a4d8?r=g"))))
-- 
2.20.1






^ permalink raw reply related	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-07  0:11 ` bug#39965: [PATCH] Add support for multiple gravatar-like services Philip K
@ 2020-03-07  7:51   ` Eli Zaretskii
  2020-03-09 10:39   ` Robert Pluim
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2020-03-07  7:51 UTC (permalink / raw)
  To: Philip K; +Cc: philip.kaludercic, 39965

> From: Philip K <philip@warpmail.net>
> Date: Sat,  7 Mar 2020 01:11:41 +0100
> Cc: philip.kaludercic@fau.de
> 
> Specifically, the non-proprietary services libravatar (now default)
> and unicornify have been added. The behaviour is customised via the
> new variable `gravatar-service'.

Thanks.  I will let the Gnus folks to review this, but I have one nit:

> +  :version "27.1"

This should say "28.1", as the emacs-27 branch doesn't accept new
features.

Also, we need a NEWS entry describing the new option(s), and possibly
also a corresponding change for the Gnus manual.





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-07  0:11 ` bug#39965: [PATCH] Add support for multiple gravatar-like services Philip K
  2020-03-07  7:51   ` Eli Zaretskii
@ 2020-03-09 10:39   ` Robert Pluim
       [not found]     ` <ykgnr1y1poro.fsf@fau.de>
  2020-03-10  9:31   ` Philip K.
  2020-03-24 17:00   ` Robert Pluim
  3 siblings, 1 reply; 18+ messages in thread
From: Robert Pluim @ 2020-03-09 10:39 UTC (permalink / raw)
  To: Philip K; +Cc: philip.kaludercic, 39965

>>>>> On Sat,  7 Mar 2020 01:11:41 +0100, Philip K <philip@warpmail.net> said:

    Philip> Specifically, the non-proprietary services libravatar (now default)
    Philip> and unicornify have been added. The behaviour is customised via the
    Philip> new variable `gravatar-service'.
    Philip> ---
    Philip>  lisp/image/gravatar.el            | 19 +++++++++++++++----
    Philip>  test/lisp/image/gravatar-tests.el |  1 +
    Philip>  2 files changed, 16 insertions(+), 4 deletions(-)

    Philip> diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
    Philip> index b8542bc3c3..c1ae0cefe3 100644
    Philip> --- a/lisp/image/gravatar.el
    Philip> +++ b/lisp/image/gravatar.el
    Philip> @@ -118,9 +118,16 @@ gravatar-force-default
    Philip>    :version "27.1"
    Philip>    :group 'gravatar)
 
    Philip> -(defconst gravatar-base-url
    Philip> -  "https://www.gravatar.com/avatar"
    Philip> -  "Base URL for getting gravatars.")
    Philip> +(defcustom gravatar-service 'libravatar
    Philip> +  "Symbol denoting gravatar-like service to use."
    Philip> +  :type '(choice (const libravatar)
    Philip> +                 (const gravatar)
    Philip> +                 (const unicornify))
    Philip> +  :version "27.1"
    Philip> +  :link '(url-link "https://www.libravatar.org/")
    Philip> +  :link '(url-link "https://unicornify.pictures/")
    Philip> +  :link '(url-link "https://gravatar.com/")
    Philip> +  :group 'gravatar)

If you make this an alist then your cond below becomes just
'alist-get', and you have the URLS in just one place.

    Philip>  (defun gravatar-hash (mail-address)
    Philip>    "Return the Gravatar hash for MAIL-ADDRESS."
    Philip> @@ -142,7 +149,11 @@ gravatar-build-url
    Philip>    "Return the URL of a gravatar for MAIL-ADDRESS."
    Philip>    ;; https://gravatar.com/site/implement/images/
    Philip>    (format "%s/%s?%s"
    Philip> -          gravatar-base-url
    Philip> +          (cond ((eq gravatar-service 'gravatar)
    Philip> +                 "https://www.gravatar.com/avatar")
    Philip> +                ((eq gravatar-service 'unicornify)
    Philip> +                 "https://unicornify.pictures/avatar/")
    Philip> +                (t "https://seccdn.libravatar.org/avatar"))
    Philip>            (gravatar-hash mail-address)
    Philip>            (gravatar--query-string)))

This is changing the default from gravatar->libravatar, won't that
break stuff?

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
       [not found]     ` <ykgnr1y1poro.fsf@fau.de>
@ 2020-03-09 15:04       ` Robert Pluim
  2020-03-09 15:10         ` Philip Kaludercic
  0 siblings, 1 reply; 18+ messages in thread
From: Robert Pluim @ 2020-03-09 15:04 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 39965


(please keep 39965@debbugs.gnu.org in the CC list)

>>>>> On Mon, 09 Mar 2020 15:48:59 +0100, Philip Kaludercic <philip.kaludercic@fau.de> said:

    >> 
    >> If you make this an alist then your cond below becomes just
    >> 'alist-get', and you have the URLS in just one place.

    Philip> That's right, I had already "fixed" that in the next version of the
    Philip> patch, but primarily because libravatar requires a bit more to work
    Philip> correctly than just alist-get.

OK

    Philip> Sadly I cannot send the patch right now, because git-send-email doesn't
    Philip> work from where I am writing.

git format-patch HEAD~ + attaching the result will work as
well, assuming your MUA doesnʼt mangle patches :-)

    >> This is changing the default from gravatar->libravatar, won't that
    >> break stuff?

    Philip> All Gravatar avatars should still be resolved as they have been until
    Philip> now (just via Libravatar's servers). The only user-visible change is
    Philip> that people who just use Libravatar will also have avatar images.

    Philip> If there is too much Resistance towards changing this, it shouldn't be a
    Philip> problem to keep gravatar the default, but as mentioned in the commit
    Philip> message, I think that it is somewhat dubious for *Emacs* to default to a
    Philip> proprietary service.

If the avatars are still resolved, then I think thereʼs no issue with
changing the default (especially considering it wasnʼt configurable
before). Thanks for clarifying.

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-09 15:04       ` Robert Pluim
@ 2020-03-09 15:10         ` Philip Kaludercic
  2020-03-09 15:35           ` Robert Pluim
  0 siblings, 1 reply; 18+ messages in thread
From: Philip Kaludercic @ 2020-03-09 15:10 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 39965

[-- Attachment #1: Type: text/plain, Size: 931 bytes --]

Robert Pluim <rpluim@gmail.com> writes:

> (please keep 39965@debbugs.gnu.org in the CC list)

Sorry for that!

>>>>>> On Mon, 09 Mar 2020 15:48:59 +0100, Philip Kaludercic <philip.kaludercic@fau.de> said:
>
>     >> 
>     >> If you make this an alist then your cond below becomes just
>     >> 'alist-get', and you have the URLS in just one place.
>
>     Philip> That's right, I had already "fixed" that in the next version of the
>     Philip> patch, but primarily because libravatar requires a bit more to work
>     Philip> correctly than just alist-get.
>
> OK
>
>     Philip> Sadly I cannot send the patch right now, because git-send-email doesn't
>     Philip> work from where I am writing.
>
> git format-patch HEAD~ + attaching the result will work as
> well, assuming your MUA doesnʼt mangle patches :-)

In that case I'm attaching the patch to this mail, I hope Gnus handels
it corretly. 


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-support-for-multiple-gravatar-like-services.patch --]
[-- Type: text/x-diff, Size: 3790 bytes --]

From 5c967bc9e2c3bc72e3803d84b23b8b121328c49c Mon Sep 17 00:00:00 2001
From: Philip K <philip@warpmail.net>
Date: Fri, 6 Mar 2020 12:40:28 +0100
Subject: [PATCH] Add support for multiple gravatar-like services

Specifically, the non-proprietary services libravatar (now default)
and unicornify have been added. The behaviour is customised via the
new variable `gravatar-service'.
---
 etc/NEWS                          |  7 ++++++
 lisp/image/gravatar.el            | 37 +++++++++++++++++++++++++++----
 test/lisp/image/gravatar-tests.el |  1 +
 3 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 7f70d149d6..24edf2de6a 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -171,6 +171,13 @@ key             binding
 / v             package-menu-filter-by-version
 / /             package-menu-filter-clear
 
+** gravatar.el
+
+---
+*** New variable `gravatar-service' changes avatar service.
+Now supports Libravatar (as default) and Unicornify, next to the
+already implemented Gravatar.
+
 \f
 * New Modes and Packages in Emacs 28.1
 
diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
index b8542bc3c3..4ac545730a 100644
--- a/lisp/image/gravatar.el
+++ b/lisp/image/gravatar.el
@@ -118,9 +118,37 @@ gravatar-force-default
   :version "27.1"
   :group 'gravatar)
 
-(defconst gravatar-base-url
-  "https://www.gravatar.com/avatar"
-  "Base URL for getting gravatars.")
+(defconst gravatar-service-alist
+  `((gravatar . ,(lambda (_addr) "https://www.gravatar.com/avatar"))
+    (unicornify . ,(lambda (_addr) "https://unicornify.pictures/avatar/"))
+    (libravatar . ,#'gravatar--service-libravatar))
+  "Alist of supported gravatar services.")
+
+(defcustom gravatar-service 'libravatar
+  "Symbol denoting gravatar-like service to use.
+Note that certain services might ignore other options, such as
+`gravatar-default-image' or certain values as with
+`gravatar-rating'."
+  :type `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
+                           gravatar-service-alist))
+  :version "28.1"
+  :link '(url-link "https://www.libravatar.org/")
+  :link '(url-link "https://unicornify.pictures/")
+  :link '(url-link "https://gravatar.com/")
+  :group 'gravatar)
+
+(defun gravatar--service-libravatar (addr)
+  "Find domain that hosts avatars for email address ADDR."
+  ;; implements https://wiki.libravatar.org/api/
+  (require 'dns)
+  (let* ((domain (save-match-data
+                   (unless (string-match ".+@\\(.+\\)" addr)
+                     (error "%s is not an email address" addr))
+                   (match-string 1 addr)))
+         (result (dns-query (concat "_avatars._tcp." domain) 'SRV)))
+    (if result
+        (concat "http://" result "/address")
+      "https://seccdn.libravatar.org/avatar")))
 
 (defun gravatar-hash (mail-address)
   "Return the Gravatar hash for MAIL-ADDRESS."
@@ -142,7 +170,8 @@ gravatar-build-url
   "Return the URL of a gravatar for MAIL-ADDRESS."
   ;; https://gravatar.com/site/implement/images/
   (format "%s/%s?%s"
-          gravatar-base-url
+          (funcall (cdr (assq gravatar-service gravatar-service-alist))
+                   mail-address)
           (gravatar-hash mail-address)
           (gravatar--query-string)))
 
diff --git a/test/lisp/image/gravatar-tests.el b/test/lisp/image/gravatar-tests.el
index e66b5c6803..31a28293fa 100644
--- a/test/lisp/image/gravatar-tests.el
+++ b/test/lisp/image/gravatar-tests.el
@@ -65,6 +65,7 @@ gravatar-build-url
   "Test `gravatar-build-url'."
   (let ((gravatar-default-image nil)
         (gravatar-force-default nil)
+        (gravatar-service 'gravatar)
         (gravatar-size nil))
     (should (equal (gravatar-build-url "foo") "\
 https://www.gravatar.com/avatar/acbd18db4cc2f85cedef654fccc4a4d8?r=g"))))
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-09 15:10         ` Philip Kaludercic
@ 2020-03-09 15:35           ` Robert Pluim
  2020-03-09 23:53             ` Philip K.
  0 siblings, 1 reply; 18+ messages in thread
From: Robert Pluim @ 2020-03-09 15:35 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 39965

>>>>> On Mon, 09 Mar 2020 16:10:48 +0100, Philip Kaludercic <philip.kaludercic@fau.de> said:

    Philip> In that case I'm attaching the patch to this mail, I hope Gnus handels
    Philip> it corretly. 

I hand't realised you were using the One True Emacs Mail Agent. Of
course it works.

    Philip> From 5c967bc9e2c3bc72e3803d84b23b8b121328c49c Mon Sep 17 00:00:00 2001
    Philip> From: Philip K <philip@warpmail.net>
    Philip> Date: Fri, 6 Mar 2020 12:40:28 +0100
    Philip> Subject: [PATCH] Add support for multiple gravatar-like services

    Philip> Specifically, the non-proprietary services libravatar (now default)
    Philip> and unicornify have been added. The behaviour is customised via the
    Philip> new variable `gravatar-service'.

This is missing a ChangeLog style comment. There are various ways to
produce that, the easiest is probably:

C-x v d ; vc-dir
m ; mark the files you want to commit
v ; vc-next-action, which will put you in a commit message buffer
C-c C-w ; this will look through the diffs of the files youʼre
        ; commiting and pre-populate the commit message with
        ; file/function/variable names. You then fill in the details
        ; of what you changed.

Of course, a preamble like you had explaining the 'why' of the change
is also good.

See "** Commit messages" in CONTRIBUTE for a more detailed description
of the desired format for commit messages.

    Philip> +---
    Philip> +*** New variable `gravatar-service' changes avatar service.
    Philip> +Now supports Libravatar (as default) and Unicornify, next to the
    Philip> +already implemented Gravatar.
    Philip> +

We normally call these 'user options', and donʼt use back-quotes in
NEWS, and try to have the first line be a complete sentence, so:

** Gravatar

===
*** New user-option 'gravatar-service' for host to query for gravatars.
Defaults to Libravatar, with Unicornify and Gravatar as options.

Thanks for your patch.

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-09 15:35           ` Robert Pluim
@ 2020-03-09 23:53             ` Philip K.
  2020-03-10  1:58               ` Noam Postavsky
  0 siblings, 1 reply; 18+ messages in thread
From: Philip K. @ 2020-03-09 23:53 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 39965

Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Mon, 09 Mar 2020 16:10:48 +0100, Philip Kaludercic <philip.kaludercic@fau.de> said:
>
>     Philip> From 5c967bc9e2c3bc72e3803d84b23b8b121328c49c Mon Sep 17 00:00:00 2001
>     Philip> From: Philip K <philip@warpmail.net>
>     Philip> Date: Fri, 6 Mar 2020 12:40:28 +0100
>     Philip> Subject: [PATCH] Add support for multiple gravatar-like services
>
>     Philip> Specifically, the non-proprietary services libravatar (now default)
>     Philip> and unicornify have been added. The behaviour is customised via the
>     Philip> new variable `gravatar-service'.
>
> This is missing a ChangeLog style comment. There are various ways to
> produce that, the easiest is probably:
>
> C-x v d ; vc-dir
> m ; mark the files you want to commit
> v ; vc-next-action, which will put you in a commit message buffer
> C-c C-w ; this will look through the diffs of the files youʼre
>         ; commiting and pre-populate the commit message with
>         ; file/function/variable names. You then fill in the details
>         ; of what you changed.
>
> Of course, a preamble like you had explaining the 'why' of the change
> is also good.
>
> See "** Commit messages" in CONTRIBUTE for a more detailed description
> of the desired format for commit messages.

I have been trying what you mention and what the "Commit message"
section describes, but I just cannot execute C-c C-w, nor
can I find it anywhere. What command is it supposed to call? We are
talking about the "*vc-log*" buffer, aren't we?

> We normally call these 'user options', and donʼt use back-quotes in
> NEWS, and try to have the first line be a complete sentence, so:
>
> ** Gravatar
>
> ===
> *** New user-option 'gravatar-service' for host to query for gravatars.
> Defaults to Libravatar, with Unicornify and Gravatar as options.

I'll just use your log message, it sound a lot better.

-- 
	With kind regards,
	Philip K.





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-09 23:53             ` Philip K.
@ 2020-03-10  1:58               ` Noam Postavsky
  0 siblings, 0 replies; 18+ messages in thread
From: Noam Postavsky @ 2020-03-10  1:58 UTC (permalink / raw)
  To: Philip K.; +Cc: Robert Pluim, 39965

philip@warpmail.net (Philip K.) writes:

> I have been trying what you mention and what the "Commit message"
> section describes, but I just cannot execute C-c C-w, nor
> can I find it anywhere. What command is it supposed to call? We are
> talking about the "*vc-log*" buffer, aren't we?

Assuming you are running Emacs 27, then yes, it should work in the
*vc-log* buffer.

    C-c C-w runs the command log-edit-generate-changelog-from-diff (found
    in vc-git-log-edit-mode-map), which is an interactive compiled Lisp
    function in ‘log-edit.el’.





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-07  0:11 ` bug#39965: [PATCH] Add support for multiple gravatar-like services Philip K
  2020-03-07  7:51   ` Eli Zaretskii
  2020-03-09 10:39   ` Robert Pluim
@ 2020-03-10  9:31   ` Philip K.
  2020-03-11  7:38     ` Robert Pluim
  2020-03-17 13:51     ` Robert Pluim
  2020-03-24 17:00   ` Robert Pluim
  3 siblings, 2 replies; 18+ messages in thread
From: Philip K. @ 2020-03-10  9:31 UTC (permalink / raw)
  To: rpluim; +Cc: 39965

[-- Attachment #1: Type: text/plain, Size: 60 bytes --]


Sorry for the delay, I hope the commit message is ok now.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-support-for-multiple-Gravatar-services.patch --]
[-- Type: text/x-diff, Size: 3442 bytes --]

From 45ef168f4c7b2c0195de040570fa613c89e41ae4 Mon Sep 17 00:00:00 2001
From: Philip K <philip@warpmail.net>
Date: Tue, 10 Mar 2020 10:21:08 +0100
Subject: [PATCH] Add support for multiple Gravatar services

Now supports Libravatar and Unicornify, next to Gravatar.

* lisp/image/gravatar.el (gravatar-base-url): Remove constant.
(gravatar-service-alist): List supported services.
(gravatar-service): Add user option to specify service, defaults to
Libravatar.
(gravatar--service-libravatar): Add libravatar image host resolver
implementation.
(gravatar-build-url): Use alist gravatar-service-alist instead of
gravatar-base-url.
* etc/NEWS: Add note.
---
 etc/NEWS               |  6 ++++++
 lisp/image/gravatar.el | 37 +++++++++++++++++++++++++++++++++----
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 7f70d149d6..7d9f858555 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -171,6 +171,12 @@ key             binding
 / v             package-menu-filter-by-version
 / /             package-menu-filter-clear
 
+** Gravatar
+
+===
+*** New user-option 'gravatar-service' for host to query for gravatars.
+Defaults to Libravatar, with Unicornify and Gravatar as options.
+
 \f
 * New Modes and Packages in Emacs 28.1
 
diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
index b8542bc3c3..9b4e93275d 100644
--- a/lisp/image/gravatar.el
+++ b/lisp/image/gravatar.el
@@ -118,9 +118,37 @@ gravatar-force-default
   :version "27.1"
   :group 'gravatar)
 
-(defconst gravatar-base-url
-  "https://www.gravatar.com/avatar"
-  "Base URL for getting gravatars.")
+(defconst gravatar-service-alist
+  `((gravatar . ,(lambda (_addr) "https://www.gravatar.com/avatar"))
+    (unicornify . ,(lambda (_addr) "https://unicornify.pictures/avatar/"))
+    (libravatar . ,#'gravatar--service-libravatar))
+  "Alist of supported gravatar services.")
+
+(defcustom gravatar-service 'libravatar
+  "Symbol denoting gravatar-like service to use.
+Note that certain services might ignore other options, such as
+`gravatar-default-image' or certain values as with
+`gravatar-rating'."
+  :type `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
+                           gravatar-service-alist))
+  :version "28.1"
+  :link '(url-link "https://www.libravatar.org/")
+  :link '(url-link "https://unicornify.pictures/")
+  :link '(url-link "https://gravatar.com/")
+  :group 'gravatar)
+
+(defun gravatar--service-libravatar (addr)
+  "Find domain that hosts avatars for email address ADDR."
+  ;; implements https://wiki.libravatar.org/api/
+  (require 'dns)
+  (let* ((domain (save-match-data
+                   (unless (string-match ".+@\\(.+\\)" addr)
+                     (error "%s is not an email address" addr))
+                   (match-string 1 addr)))
+         (result (dns-query (concat "_avatars._tcp." domain) 'SRV)))
+    (if result
+        (concat "http://" result "/address")
+      "https://seccdn.libravatar.org/avatar")))
 
 (defun gravatar-hash (mail-address)
   "Return the Gravatar hash for MAIL-ADDRESS."
@@ -142,7 +170,8 @@ gravatar-build-url
   "Return the URL of a gravatar for MAIL-ADDRESS."
   ;; https://gravatar.com/site/implement/images/
   (format "%s/%s?%s"
-          gravatar-base-url
+          (funcall (alist-get gravatar-service gravatar-service-alist)
+                   mail-address)
           (gravatar-hash mail-address)
           (gravatar--query-string)))
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-10  9:31   ` Philip K.
@ 2020-03-11  7:38     ` Robert Pluim
  2020-03-11  8:50       ` Philip Kaludercic
  2020-03-11 16:08       ` Eli Zaretskii
  2020-03-17 13:51     ` Robert Pluim
  1 sibling, 2 replies; 18+ messages in thread
From: Robert Pluim @ 2020-03-11  7:38 UTC (permalink / raw)
  To: Philip K.; +Cc: 39965

>>>>> On Tue, 10 Mar 2020 10:31:27 +0100, Philip K. <philip.kaludercic@fau.de> said:

    Philip> Sorry for the delay, I hope the commit message is ok now.

Thanks, much better. Eli, is this a small enough change to commit as
'Copyright-paperwork-exempt'?

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-11  7:38     ` Robert Pluim
@ 2020-03-11  8:50       ` Philip Kaludercic
  2020-03-11 16:09         ` Eli Zaretskii
  2020-03-11 16:08       ` Eli Zaretskii
  1 sibling, 1 reply; 18+ messages in thread
From: Philip Kaludercic @ 2020-03-11  8:50 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 39965

Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Tue, 10 Mar 2020 10:31:27 +0100, Philip K. <philip.kaludercic@fau.de> said:
>
>     Philip> Sorry for the delay, I hope the commit message is ok now.
>
> Thanks, much better. Eli, is this a small enough change to commit as
> 'Copyright-paperwork-exempt'?
>
> Robert

I actually signed the copyright assignment last year, for contributing
to an ELPA package. I thought that applied to the Emacs core too?





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-11  7:38     ` Robert Pluim
  2020-03-11  8:50       ` Philip Kaludercic
@ 2020-03-11 16:08       ` Eli Zaretskii
  2020-03-11 17:00         ` Philip K.
  1 sibling, 1 reply; 18+ messages in thread
From: Eli Zaretskii @ 2020-03-11 16:08 UTC (permalink / raw)
  To: Robert Pluim; +Cc: philip.kaludercic, 39965

> From: Robert Pluim <rpluim@gmail.com>
> Cc: 39965@debbugs.gnu.org, eliz@gnu.org
> Date: Wed, 11 Mar 2020 08:38:32 +0100
> 
> >>>>> On Tue, 10 Mar 2020 10:31:27 +0100, Philip K. <philip.kaludercic@fau.de> said:
> 
>     Philip> Sorry for the delay, I hope the commit message is ok now.
> 
> Thanks, much better. Eli, is this a small enough change to commit as
> 'Copyright-paperwork-exempt'?

There's no need, since Philip has an assignment on file.

But I didn't understand how was the issue of preferring Libravatar
resolved?  Didn't someone say it wasn't a free service?





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-11  8:50       ` Philip Kaludercic
@ 2020-03-11 16:09         ` Eli Zaretskii
  0 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2020-03-11 16:09 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: rpluim, 39965

> From: Philip Kaludercic <philip.kaludercic@fau.de>
> Cc: 39965@debbugs.gnu.org,  eliz@gnu.org
> Date: Wed, 11 Mar 2020 09:50:08 +0100
> 
> I actually signed the copyright assignment last year, for contributing
> to an ELPA package. I thought that applied to the Emacs core too?

The assignment is for Emacs, and it applies to ELPA as well.





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-11 16:08       ` Eli Zaretskii
@ 2020-03-11 17:00         ` Philip K.
  2020-03-12  7:41           ` Robert Pluim
  0 siblings, 1 reply; 18+ messages in thread
From: Philip K. @ 2020-03-11 17:00 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rpluim, 39965

Eli Zaretskii <eliz@gnu.org> writes:

> But I didn't understand how was the issue of preferring Libravatar
> resolved?  Didn't someone say it wasn't a free service?

No, I might have said that Gravatar is non-free, and as such shouldn't
be the default.

-- 
	With kind regards,
	Philip K.





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-11 17:00         ` Philip K.
@ 2020-03-12  7:41           ` Robert Pluim
  0 siblings, 0 replies; 18+ messages in thread
From: Robert Pluim @ 2020-03-12  7:41 UTC (permalink / raw)
  To: Philip K.; +Cc: 39965

>>>>> On Wed, 11 Mar 2020 18:00:06 +0100, philip@warpmail.net (Philip K.) said:

    Philip> Eli Zaretskii <eliz@gnu.org> writes:
    >> But I didn't understand how was the issue of preferring Libravatar
    >> resolved?  Didn't someone say it wasn't a free service?

    Philip> No, I might have said that Gravatar is non-free, and as such shouldn't
    Philip> be the default.

Right, and the default will become Libravatar, which is a free
service.

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-10  9:31   ` Philip K.
  2020-03-11  7:38     ` Robert Pluim
@ 2020-03-17 13:51     ` Robert Pluim
  2020-03-17 14:37       ` Philip K.
  1 sibling, 1 reply; 18+ messages in thread
From: Robert Pluim @ 2020-03-17 13:51 UTC (permalink / raw)
  To: Philip K.; +Cc: 39965

>>>>> On Tue, 10 Mar 2020 10:31:27 +0100, Philip K. <philip.kaludercic@fau.de> said:

    Philip> Sorry for the delay, I hope the commit message is ok now.

Sorry for my delay in getting back to you. I have one question:

    Philip> +(defun gravatar--service-libravatar (addr)
    Philip> +  "Find domain that hosts avatars for email address ADDR."
    Philip> +  ;; implements https://wiki.libravatar.org/api/
    Philip> +  (require 'dns)
    Philip> +  (let* ((domain (save-match-data
    Philip> +                   (unless (string-match ".+@\\(.+\\)" addr)
    Philip> +                     (error "%s is not an email address" addr))
    Philip> +                   (match-string 1 addr)))
    Philip> +         (result (dns-query (concat "_avatars._tcp." domain) 'SRV)))
    Philip> +    (if result
    Philip> +        (concat "http://" result "/address")
    Philip> +      "https://seccdn.libravatar.org/avatar")))

Here you do the SRV lookup for the TCP service, but I believe thereʼs
an HTTPS service type available as well. Could you look that up first,
then the TCP one, then fall back to the default libravatar URL?

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-17 13:51     ` Robert Pluim
@ 2020-03-17 14:37       ` Philip K.
  0 siblings, 0 replies; 18+ messages in thread
From: Philip K. @ 2020-03-17 14:37 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 39965

[-- Attachment #1: Type: text/plain, Size: 518 bytes --]


Robert Pluim <rpluim@gmail.com> writes:

> Sorry for my delay in getting back to you. I have one question:
>
> [...]
>
> Here you do the SRV lookup for the TCP service, but I believe thereʼs
> an HTTPS service type available as well. Could you look that up first,
> then the TCP one, then fall back to the default libravatar URL?

You're right, I missed that. This patch checks the avatar-sec and avatar
record. I rewrote it a bit, to avoid duplication, so I hope the style is
ok.

-- 
	Philip K.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-support-for-multiple-Gravatar-services.patch --]
[-- Type: text/x-diff, Size: 3442 bytes --]

From 45ef168f4c7b2c0195de040570fa613c89e41ae4 Mon Sep 17 00:00:00 2001
From: Philip K <philip@warpmail.net>
Date: Tue, 10 Mar 2020 10:21:08 +0100
Subject: [PATCH] Add support for multiple Gravatar services

Now supports Libravatar and Unicornify, next to Gravatar.

* lisp/image/gravatar.el (gravatar-base-url): Remove constant.
(gravatar-service-alist): List supported services.
(gravatar-service): Add user option to specify service, defaults to
Libravatar.
(gravatar--service-libravatar): Add libravatar image host resolver
implementation.
(gravatar-build-url): Use alist gravatar-service-alist instead of
gravatar-base-url.
* etc/NEWS: Add note.
---
 etc/NEWS               |  6 ++++++
 lisp/image/gravatar.el | 37 +++++++++++++++++++++++++++++++++----
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 7f70d149d6..7d9f858555 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -171,6 +171,12 @@ key             binding
 / v             package-menu-filter-by-version
 / /             package-menu-filter-clear
 
+** Gravatar
+
+===
+*** New user-option 'gravatar-service' for host to query for gravatars.
+Defaults to Libravatar, with Unicornify and Gravatar as options.
+
 \f
 * New Modes and Packages in Emacs 28.1
 
diff --git a/lisp/image/gravatar.el b/lisp/image/gravatar.el
index b8542bc3c3..9b4e93275d 100644
--- a/lisp/image/gravatar.el
+++ b/lisp/image/gravatar.el
@@ -118,9 +118,37 @@ gravatar-force-default
   :version "27.1"
   :group 'gravatar)
 
-(defconst gravatar-base-url
-  "https://www.gravatar.com/avatar"
-  "Base URL for getting gravatars.")
+(defconst gravatar-service-alist
+  `((gravatar . ,(lambda (_addr) "https://www.gravatar.com/avatar"))
+    (unicornify . ,(lambda (_addr) "https://unicornify.pictures/avatar/"))
+    (libravatar . ,#'gravatar--service-libravatar))
+  "Alist of supported gravatar services.")
+
+(defcustom gravatar-service 'libravatar
+  "Symbol denoting gravatar-like service to use.
+Note that certain services might ignore other options, such as
+`gravatar-default-image' or certain values as with
+`gravatar-rating'."
+  :type `(choice ,@(mapcar (lambda (s) `(const ,(car s)))
+                           gravatar-service-alist))
+  :version "28.1"
+  :link '(url-link "https://www.libravatar.org/")
+  :link '(url-link "https://unicornify.pictures/")
+  :link '(url-link "https://gravatar.com/")
+  :group 'gravatar)
+
+(defun gravatar--service-libravatar (addr)
+  "Find domain that hosts avatars for email address ADDR."
+  ;; implements https://wiki.libravatar.org/api/
+  (require 'dns)
+  (let* ((domain (save-match-data
+                   (unless (string-match ".+@\\(.+\\)" addr)
+                     (error "%s is not an email address" addr))
+                   (match-string 1 addr)))
+         (result (dns-query (concat "_avatars._tcp." domain) 'SRV)))
+    (if result
+        (concat "http://" result "/address")
+      "https://seccdn.libravatar.org/avatar")))
 
 (defun gravatar-hash (mail-address)
   "Return the Gravatar hash for MAIL-ADDRESS."
@@ -142,7 +170,8 @@ gravatar-build-url
   "Return the URL of a gravatar for MAIL-ADDRESS."
   ;; https://gravatar.com/site/implement/images/
   (format "%s/%s?%s"
-          gravatar-base-url
+          (funcall (alist-get gravatar-service gravatar-service-alist)
+                   mail-address)
           (gravatar-hash mail-address)
           (gravatar--query-string)))
 
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* bug#39965: [PATCH] Add support for multiple gravatar-like services
  2020-03-07  0:11 ` bug#39965: [PATCH] Add support for multiple gravatar-like services Philip K
                     ` (2 preceding siblings ...)
  2020-03-10  9:31   ` Philip K.
@ 2020-03-24 17:00   ` Robert Pluim
  3 siblings, 0 replies; 18+ messages in thread
From: Robert Pluim @ 2020-03-24 17:00 UTC (permalink / raw)
  To: Philip K.; +Cc: 39965-done

>>>>> On Tue, 17 Mar 2020 19:06:19 +0100, philip@warpmail.net (Philip K.) said:

    Philip> Robert Pluim <rpluim@gmail.com> writes:
    >> This one still checks only the avatar record (and is it avatar-sec or
    >> avatar_sec?).

    Philip> Oops, I seem to have selected the wrong patch. I double checked this
    Philip> time. And regarding your question, according to [0] it has to be
    Philip> "avatar-sec.". Sorry for all the trouble!

Thanks. Pushed to master as 421eeff243 (with my typo in NEWS fixed).

Closing bug.

Robert





^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-03-24 17:00 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <87mu8ej1pg.fsf@bulbul>
2020-03-07  0:11 ` bug#39965: [PATCH] Add support for multiple gravatar-like services Philip K
2020-03-07  7:51   ` Eli Zaretskii
2020-03-09 10:39   ` Robert Pluim
     [not found]     ` <ykgnr1y1poro.fsf@fau.de>
2020-03-09 15:04       ` Robert Pluim
2020-03-09 15:10         ` Philip Kaludercic
2020-03-09 15:35           ` Robert Pluim
2020-03-09 23:53             ` Philip K.
2020-03-10  1:58               ` Noam Postavsky
2020-03-10  9:31   ` Philip K.
2020-03-11  7:38     ` Robert Pluim
2020-03-11  8:50       ` Philip Kaludercic
2020-03-11 16:09         ` Eli Zaretskii
2020-03-11 16:08       ` Eli Zaretskii
2020-03-11 17:00         ` Philip K.
2020-03-12  7:41           ` Robert Pluim
2020-03-17 13:51     ` Robert Pluim
2020-03-17 14:37       ` Philip K.
2020-03-24 17:00   ` Robert Pluim

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).