Exemple #1
0
        /// <summary>
        /// 更新今日图片。
        /// </summary>
        /// <param name="todayImage">待更新的今日图片。</param>
        public async Task UpdateTodayImageAsync(TodayImage todayImage)
        {
            Preferences.Set(ExpiresAtKey, todayImage.ExpiresAt);
            if (todayImage.Scope == TodayImage.ModificationScope.ExpiresAt)
            {
                return;
            }

            Preferences.Set(FullStartDateKey, todayImage.FullStartDate);
            Preferences.Set(CopyrightKey, todayImage.Copyright);
            Preferences.Set(CopyrightLinkKey, todayImage.CopyrightLink);

            using (var imageFileStream =
                       new FileStream(TodayImagePath, FileMode.Create))
            {
                await imageFileStream.WriteAsync(todayImage.ImageBytes, 0,
                                                 todayImage.ImageBytes.Length);
            }
        }
Exemple #2
0
        /// <summary>
        /// 获得今日图片。
        /// </summary>
        /// <param name="includingImageStream">包含图片流。</param>
        public async Task <TodayImage> GetTodayImageAsync(
            bool includingImageStream)
        {
            var todayImage = new TodayImage
            {
                FullStartDate =
                    Preferences.Get(FullStartDateKey, FullStartDateDefault),
                ExpiresAt     = Preferences.Get(ExpiresAtKey, ExpiresAtDefault),
                Copyright     = Preferences.Get(CopyrightKey, CopyrightDefault),
                CopyrightLink =
                    Preferences.Get(CopyrightLinkKey, CopyrightLinkDefault)
            };

            if (!File.Exists(TodayImagePath))
            {
                using (var imageFileStream =
                           new FileStream(TodayImagePath, FileMode.OpenOrCreate))
                    using (var imageAssetStream = Assembly.GetExecutingAssembly()
                                                  .GetManifestResourceStream("NEUVolunteer." + FileName))
                    {
                        await imageAssetStream.CopyToAsync(imageFileStream);
                    }
            }

            if (!includingImageStream)
            {
                return(todayImage);
            }

            var imageMemoryStream = new MemoryStream();

            using (var imageFileStream =
                       new FileStream(TodayImagePath, FileMode.Open))
            {
                await imageFileStream.CopyToAsync(imageMemoryStream);
            }

            todayImage.ImageBytes = imageMemoryStream.GetBuffer();


            return(todayImage);
        }
Exemple #3
0
        CheckUpdateAsync()
        {
            var todayImage = await todayImageStorage.GetTodayImageAsync(false);

            if (todayImage.ExpiresAt > DateTime.Now)
            {
                return(new TodayImageServiceCheckUpdateResult
                {
                    HasUpdate = false
                });
            }

            BingImageOfTheDayImage bingImage;

            using (var httpClient = new HttpClient())
            {
                HttpResponseMessage response;
                try
                {
                    response = await httpClient.GetAsync(
                        "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN");

                    response.EnsureSuccessStatusCode();
                }
                catch (Exception e)
                {
                    await alertService.ShowAlertAsync(
                        ErrorMessages.HTTP_CLIENT_ERROR_TITLE,
                        ErrorMessages.HttpClientErrorMessage(Server, e.Message),
                        ErrorMessages.HTTP_CLIENT_ERROR_BUTTON);

                    return(new TodayImageServiceCheckUpdateResult
                    {
                        HasUpdate = false
                    });
                }

                var json = await response.Content.ReadAsStringAsync();

                bingImage = JsonConvert
                            .DeserializeObject <BingImageOfTheDay>(json).Images[0];
            }

            var bingImageFullStartDate = DateTime.ParseExact(
                bingImage.Fullstartdate, "yyyyMMddHHmm",
                CultureInfo.InvariantCulture);
            var todayImageFullStartDate = DateTime.ParseExact(
                todayImage.FullStartDate, "yyyyMMddHHmm",
                CultureInfo.InvariantCulture);

            if (bingImageFullStartDate <= todayImageFullStartDate)
            {
                todayImage.ExpiresAt = DateTime.Now.AddHours(2);
                todayImage.Scope     = TodayImage.ModificationScope.ExpiresAt;
                await todayImageStorage.UpdateTodayImageAsync(todayImage);

                return(new TodayImageServiceCheckUpdateResult
                {
                    HasUpdate = false
                });
            }

            todayImage = new TodayImage
            {
                FullStartDate = bingImage.Fullstartdate,
                ExpiresAt     = bingImageFullStartDate.AddDays(1),
                Copyright     = bingImage.Copyright,
                CopyrightLink = bingImage.Copyrightlink,
                Scope         = TodayImage.ModificationScope.All
            };

            using (var httpClient = new HttpClient())
            {
                HttpResponseMessage response;
                try
                {
                    response =
                        await httpClient.GetAsync("https://www.bing.com" +
                                                  bingImage.Url);

                    response.EnsureSuccessStatusCode();
                }
                catch (Exception e)
                {
                    await alertService.ShowAlertAsync(
                        ErrorMessages.HTTP_CLIENT_ERROR_TITLE,
                        ErrorMessages.HttpClientErrorMessage(Server, e.Message),
                        ErrorMessages.HTTP_CLIENT_ERROR_BUTTON);

                    return(new TodayImageServiceCheckUpdateResult
                    {
                        HasUpdate = false
                    });
                }

                todayImage.ImageBytes =
                    await response.Content.ReadAsByteArrayAsync();
            }

            await todayImageStorage.UpdateTodayImageAsync(todayImage);

            return(new TodayImageServiceCheckUpdateResult
            {
                HasUpdate = true, TodayImage = todayImage
            });
        }