/// <summary>
        /// Provides a mapping for the image defaults.
        /// </summary>
        private static string GetDefaultImageString(DefaultImageType defaultImageType)
        {
            switch (defaultImageType)
            {
            case DefaultImageType.Identicon: return("identicon");

            case DefaultImageType.MonsterId: return("monsterid");

            case DefaultImageType.Wavatar: return("wavatar");

            case DefaultImageType.Retro: return("retro");

            default: return("404");
            }
        }
        private Task <Image> LoadFromGravatarAsync(string imageFileName, string email, int imageSize, DefaultImageType defaultImageType)
        {
            var imageUrl = BuildGravatarUrl(email, imageSize, false, Rating.G, defaultImageType);

            return(DownloadImage(imageUrl, imageFileName));
        }
        /// <summary>
        /// Builds a <see cref="Uri"/> corresponding to a given email address.
        /// </summary>
        /// <param name="email">The email address for which to build the <see cref="Uri"/>.</param>
        /// <param name="size">The size of the image to request.  The default is 32.</param>
        /// <param name="useHttps">Indicates whether or not the request should be performed over Secure HTTP.</param>
        /// <param name="rating">The maximum rating of the returned image.</param>
        /// <param name="defaultImageType">The Gravatar service that will be used for fall-back.</param>
        /// <returns>The constructed <see cref="Uri"/>.</returns>
        private static Uri BuildGravatarUrl(string email, int size, bool useHttps, Rating rating, DefaultImageType defaultImageType)
        {
            var builder = new UriBuilder("http://www.gravatar.com/avatar/");

            if (useHttps)
            {
                builder.Scheme = "https";
            }

            builder.Path += HashEmail(email);

            var query = string.Format("s={0}&r={1}&d={2}",
                                      size,
                                      rating.ToString().ToLowerInvariant(),
                                      GetDefaultImageString(defaultImageType));

            builder.Query = query;

            return(builder.Uri);
        }
Beispiel #4
0
 private async Task <Image> LoadFromGravatarAsync(string imageFileName, string email, int imageSize, DefaultImageType defaultImageType)
 {
     try
     {
         var imageUrl = BuildGravatarUrl(email, imageSize, false, Rating.G, defaultImageType);
         using (var webClient = new WebClient {
             Proxy = WebRequest.DefaultWebProxy
         })
         {
             webClient.Proxy.Credentials = CredentialCache.DefaultCredentials;
             using (var imageStream = await webClient.OpenReadTaskAsync(imageUrl))
             {
                 await _cache.AddImageAsync(imageFileName, imageStream);
             }
             return(await _cache.GetImageAsync(imageFileName, null));
         }
     }
     catch (Exception ex)
     {
         //catch IO errors
         Trace.WriteLine(ex.Message);
     }
     return(null);
 }