From ab778f8a9cf47c4e27fe688a61effb0caa4f8a6e Mon Sep 17 00:00:00 2001 From: Austin Hellyer Date: Wed, 28 Dec 2016 11:11:46 -0800 Subject: Support webp/gif avatars If the avatar hash begins with "a_", then the avatar is animated and is a GIF. Otherwise, use WEBP. --- src/model/user.rs | 28 ++++++++++++++++++++++++---- tests/test_user.rs | 6 ++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/model/user.rs b/src/model/user.rs index af026ea..46da757 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -35,9 +35,19 @@ use ::client::CACHE; impl CurrentUser { /// Returns the formatted URL of the user's icon, if one exists. + /// + /// This will produce a WEBP image URL, or GIF if the user has a GIF avatar. pub fn avatar_url(&self) -> Option { - self.avatar.as_ref().map(|av| - format!(cdn!("/avatars/{}/{}.jpg"), self.id.0, av)) + self.avatar.as_ref() + .map(|av| { + let ext = if av.starts_with("a_") { + "gif" + } else { + "webp" + }; + + format!(cdn!("/avatars/{}/{}.{}?size=1024"), self.id.0, av, ext) + }) } /// Edits the current user's profile settings. @@ -99,9 +109,19 @@ impl CurrentUser { impl User { /// Returns the formatted URL of the user's icon, if one exists. + /// + /// This will produce a WEBP image URL, or GIF if the user has a GIF avatar. pub fn avatar_url(&self) -> Option { - self.avatar.as_ref().map(|av| - format!(cdn!("/avatars/{}/{}.jpg"), self.id.0, av)) + self.avatar.as_ref() + .map(|av| { + let ext = if av.starts_with("a_") { + "gif" + } else { + "webp" + }; + + format!(cdn!("/avatars/{}/{}.{}?size=1024"), self.id.0, av, ext) + }) } /// Gets user as `Member` of a guild. diff --git a/tests/test_user.rs b/tests/test_user.rs index b4509f3..3da1ec6 100644 --- a/tests/test_user.rs +++ b/tests/test_user.rs @@ -16,9 +16,11 @@ fn gen() -> User { fn test_core() { let mut user = gen(); - assert!(user.avatar_url().unwrap().ends_with("/avatars/210/abc.jpg")); + assert!(user.avatar_url().unwrap().ends_with("/avatars/210/abc.webp?size=1024")); - user.avatar = None; + user.avatar = Some("a_aaa".to_owned()); + assert!(user.avatar_url().unwrap().ends_with("/avatars/210/a_aaa.gif?size=1024")); + user.avatar = None; assert!(user.avatar_url().is_none()); } -- cgit v1.2.3