public static async Task <StorageFile> DownloadDailyPicture()
        {
            string Path = await GetDailyPhotoPath().ConfigureAwait(true);

            try
            {
                if ((await ApplicationData.Current.LocalFolder.TryGetItemAsync("BingDailyPicture.jpg")) is StorageFile ExistFile)
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(ExistFile);
                    }

                    StorageFile TempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("BingDailyPicture_Cache.jpg", CreationCollisionOption.ReplaceExisting);

                    using (Stream TempFileStream = (await TempFile.OpenAsync(FileAccessMode.ReadWrite)).AsStream())
                    {
                        try
                        {
                            await Task.Run(() =>
                            {
                                HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(new Uri($"https://www.bing.com{Path}"));
                                using (WebResponse Response = Request.GetResponse())
                                    using (Stream ResponseStream = Response.GetResponseStream())
                                    {
                                        ResponseStream.CopyTo(TempFileStream);
                                    }
                            }).ConfigureAwait(false);
                        }
                        catch
                        {
                            return(ExistFile);
                        }

                        using (Stream FileStream = await ExistFile.OpenStreamForReadAsync().ConfigureAwait(false))
                        {
                            if (FileStream.ComputeMD5Hash() == TempFileStream.ComputeMD5Hash())
                            {
                                return(ExistFile);
                            }
                        }
                    }

                    await TempFile.MoveAndReplaceAsync(ExistFile);

                    return(ExistFile);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(null);
                    }

                    StorageFile BingDailyPictureFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("BingDailyPicture.jpg", CreationCollisionOption.ReplaceExisting);

                    using (Stream FileStream = await BingDailyPictureFile.OpenStreamForWriteAsync().ConfigureAwait(false))
                    {
                        await Task.Run(() =>
                        {
                            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(new Uri($"https://www.bing.com{Path}"));
                            using (WebResponse Response = Request.GetResponse())
                                using (Stream ResponseStream = Response.GetResponseStream())
                                {
                                    ResponseStream.CopyTo(FileStream);
                                }
                        }).ConfigureAwait(false);
                    }

                    return(BingDailyPictureFile);
                }
            }
            catch
            {
                return(null);
            }
        }
Exemple #2
0
        public static async Task <StorageFile> UpdateBingPicture()
        {
            string Path = await GetDailyPhotoPath().ConfigureAwait(false);

            if ((await ApplicationData.Current.LocalFolder.TryGetItemAsync("BingDailyPicture.jpg")) is StorageFile ExistFile)
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(ExistFile);
                    }

                    if (await CheckIfNeedToUpdate().ConfigureAwait(false))
                    {
                        StorageFile TempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync($"BingDailyPicture_Cache_[{DateTime.Now:yyyy-MM-dd HH-mm-ss}].jpg", CreationCollisionOption.GenerateUniqueName);

                        using (Stream TempFileStream = (await TempFile.OpenAsync(FileAccessMode.ReadWrite)).AsStream())
                        {
                            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(new Uri($"https://www.bing.com{Path}"));

                            using (WebResponse Response = await Request.GetResponseAsync().ConfigureAwait(false))
                                using (Stream ResponseStream = Response.GetResponseStream())
                                {
                                    await ResponseStream.CopyToAsync(TempFileStream).ConfigureAwait(false);
                                }

                            using (Stream FileStream = await ExistFile.OpenStreamForReadAsync().ConfigureAwait(false))
                                using (MD5 MD5Alg1 = MD5.Create())
                                    using (MD5 MD5Alg2 = MD5.Create())
                                    {
                                        Task <string> CalTask1 = MD5Alg1.GetHashAsync(FileStream);
                                        Task <string> CalTask2 = MD5Alg2.GetHashAsync(TempFileStream);

                                        string [] ResultArray = await Task.WhenAll(CalTask1, CalTask2).ConfigureAwait(false);

                                        if (ResultArray[0] == ResultArray[1])
                                        {
                                            return(ExistFile);
                                        }
                                    }

                            TempFileStream.Seek(0, SeekOrigin.Begin);

                            using (StorageStreamTransaction Transaction = await ExistFile.OpenTransactedWriteAsync())
                            {
                                await TempFileStream.CopyToAsync(Transaction.Stream.AsStreamForWrite()).ConfigureAwait(false);

                                await Transaction.CommitAsync();
                            }
                        }

                        return(ExistFile);
                    }
                    else
                    {
                        return(ExistFile);
                    }
                }
                catch (Exception ex)
                {
                    LogTracer.Log(ex, $"An error was threw in {nameof(UpdateBingPicture)}");
                    return(ExistFile);
                }
            }
            else
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(null);
                    }

                    StorageFile TempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync($"BingDailyPicture_Cache_[{DateTime.Now:yyyy-MM-dd HH-mm-ss}].jpg", CreationCollisionOption.GenerateUniqueName);

                    using (Stream TempFileStream = (await TempFile.OpenAsync(FileAccessMode.ReadWrite)).AsStream())
                    {
                        HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(new Uri($"https://www.bing.com{Path}"));

                        using (WebResponse Response = await Request.GetResponseAsync().ConfigureAwait(false))
                            using (Stream ResponseStream = Response.GetResponseStream())
                            {
                                await ResponseStream.CopyToAsync(TempFileStream).ConfigureAwait(false);
                            }

                        StorageFile BingDailyPictureFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("BingDailyPicture.jpg", CreationCollisionOption.ReplaceExisting);

                        using (StorageStreamTransaction Transaction = await BingDailyPictureFile.OpenTransactedWriteAsync())
                        {
                            TempFileStream.Seek(0, SeekOrigin.Begin);
                            await TempFileStream.CopyToAsync(Transaction.Stream.AsStreamForWrite()).ConfigureAwait(false);

                            await Transaction.CommitAsync();
                        }

                        return(BingDailyPictureFile);
                    }
                }
                catch (Exception ex)
                {
                    LogTracer.Log(ex, $"An error was threw in {nameof(UpdateBingPicture)}");
                    return(null);
                }
            }
        }
Exemple #3
0
        public static async Task <FileSystemStorageFile> GetBingPictureAsync()
        {
            string Path = await GetDailyPhotoPath().ConfigureAwait(false);

            if (await FileSystemStorageItemBase.OpenAsync(System.IO.Path.Combine(ApplicationData.Current.LocalFolder.Path, "BingDailyPicture.jpg")) is FileSystemStorageFile ExistFile)
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(ExistFile);
                    }

                    if (await CheckIfNeedToUpdate())
                    {
                        if (await FileSystemStorageItemBase.CreateAsync(System.IO.Path.Combine(ApplicationData.Current.TemporaryFolder.Path, $"BingDailyPicture_Cache_[{DateTime.Now:yyyy-MM-dd HH-mm-ss}].jpg"), StorageItemTypes.File, CreateOption.GenerateUniqueName) is FileSystemStorageFile TempFile)
                        {
                            using (FileStream TempFileStream = await TempFile.GetFileStreamFromFileAsync(AccessMode.ReadWrite))
                            {
                                HttpWebRequest Request = WebRequest.CreateHttp(new Uri($"https://www.bing.com{Path}"));
                                Request.Timeout          = 10000;
                                Request.ReadWriteTimeout = 10000;

                                using (WebResponse Response = await Request.GetResponseAsync())
                                    using (Stream ResponseStream = Response.GetResponseStream())
                                    {
                                        await ResponseStream.CopyToAsync(TempFileStream);
                                    }

                                using (Stream FileStream = await ExistFile.GetFileStreamFromFileAsync(AccessMode.Read))
                                    using (MD5 MD5Alg1 = MD5.Create())
                                        using (MD5 MD5Alg2 = MD5.Create())
                                        {
                                            Task <string> CalTask1 = MD5Alg1.GetHashAsync(FileStream);
                                            Task <string> CalTask2 = MD5Alg2.GetHashAsync(TempFileStream);

                                            string[] ResultArray = await Task.WhenAll(CalTask1, CalTask2);

                                            if (ResultArray[0] == ResultArray[1])
                                            {
                                                return(ExistFile);
                                            }
                                        }

                                TempFileStream.Seek(0, SeekOrigin.Begin);

                                using (StorageStreamTransaction Transaction = await ExistFile.GetTransactionStreamFromFileAsync())
                                {
                                    await TempFileStream.CopyToAsync(Transaction.Stream.AsStreamForWrite());

                                    await Transaction.CommitAsync();
                                }
                            }
                        }
                        else
                        {
                            LogTracer.Log($"Could not create temp file as needed in {nameof(GetBingPictureAsync)}");
                        }

                        return(ExistFile);
                    }
                    else
                    {
                        return(ExistFile);
                    }
                }
                catch (Exception ex)
                {
                    LogTracer.Log(ex, $"An error was threw in {nameof(GetBingPictureAsync)}");
                    return(ExistFile);
                }
            }
            else
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(Path))
                    {
                        return(null);
                    }

                    if (await FileSystemStorageItemBase.CreateAsync(System.IO.Path.Combine(ApplicationData.Current.TemporaryFolder.Path, $"BingDailyPicture_Cache_[{DateTime.Now:yyyy-MM-dd HH-mm-ss}].jpg"), StorageItemTypes.File, CreateOption.GenerateUniqueName) is FileSystemStorageFile TempFile)
                    {
                        using (Stream TempFileStream = await TempFile.GetFileStreamFromFileAsync(AccessMode.ReadWrite))
                        {
                            HttpWebRequest Request = WebRequest.CreateHttp(new Uri($"https://www.bing.com{Path}"));
                            Request.Timeout          = 10000;
                            Request.ReadWriteTimeout = 10000;

                            using (WebResponse Response = await Request.GetResponseAsync())
                                using (Stream ResponseStream = Response.GetResponseStream())
                                {
                                    await ResponseStream.CopyToAsync(TempFileStream);
                                }

                            if (await FileSystemStorageItemBase.CreateAsync(System.IO.Path.Combine(ApplicationData.Current.LocalFolder.Path, "BingDailyPicture.jpg"), StorageItemTypes.File, CreateOption.ReplaceExisting) is FileSystemStorageFile BingDailyPictureFile)
                            {
                                using (StorageStreamTransaction Transaction = await BingDailyPictureFile.GetTransactionStreamFromFileAsync())
                                {
                                    TempFileStream.Seek(0, SeekOrigin.Begin);
                                    await TempFileStream.CopyToAsync(Transaction.Stream.AsStreamForWrite());

                                    await Transaction.CommitAsync();
                                }

                                return(BingDailyPictureFile);
                            }
                            else
                            {
                                LogTracer.Log($"Could not create BingPicture file as needed in {nameof(GetBingPictureAsync)}");
                                return(null);
                            }
                        }
                    }
                    else
                    {
                        LogTracer.Log($"Could not create temp file as needed in {nameof(GetBingPictureAsync)}");
                        return(null);
                    }
                }
                catch (Exception ex)
                {
                    LogTracer.Log(ex, $"An error was threw in {nameof(GetBingPictureAsync)}");
                    return(null);
                }
            }
        }