/// <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); } }
/// <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); }
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 }); }