diff --git a/FileDbCache/UWP/FileDbCache.UWP.cs b/FileDbCache/UWP/FileDbCache.UWP.cs index a135a8cf..a01e9f50 100644 --- a/FileDbCache/UWP/FileDbCache.UWP.cs +++ b/FileDbCache/UWP/FileDbCache.UWP.cs @@ -3,9 +3,7 @@ // Licensed under the Microsoft Public License (Ms-PL) using System; -using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; -using Windows.Storage.Streams; namespace MapControl.Caching { @@ -24,15 +22,15 @@ namespace MapControl.Caching return new ImageCacheItem { - Buffer = ((byte[])record[0]).AsBuffer(), + Buffer = (byte[])record[0], Expiration = (DateTime)record[1] }; }); } - public Task SetAsync(string key, IBuffer buffer, DateTime expiration) + public Task SetAsync(string key, ImageCacheItem cacheItem) { - return Task.Run(() => AddOrUpdateRecord(key, buffer?.ToArray(), expiration)); + return Task.Run(() => AddOrUpdateRecord(key, cacheItem.Buffer, cacheItem.Expiration)); } } } diff --git a/MapControl/Shared/ImageFileCache.cs b/MapControl/Shared/ImageFileCache.cs index 8e143dde..23833650 100644 --- a/MapControl/Shared/ImageFileCache.cs +++ b/MapControl/Shared/ImageFileCache.cs @@ -54,53 +54,77 @@ namespace MapControl.Caching private void CleanRootDirectory() { - foreach (var dir in new DirectoryInfo(rootDirectory).EnumerateDirectories()) + try { - var deletedFileCount = CleanDirectory(dir); - - if (deletedFileCount > 0) + foreach (var dir in new DirectoryInfo(rootDirectory).EnumerateDirectories()) { - Debug.WriteLine("ImageFileCache: Cleaned {0} files in {1}", deletedFileCount, dir); + var deletedFileCount = CleanDirectory(dir); + + if (deletedFileCount > 0) + { + Debug.WriteLine("ImageFileCache: Cleaned {0} files in {1}", deletedFileCount, dir); + } } } + catch (Exception ex) + { + Debug.WriteLine("ImageFileCache: Failed enumerating directories in {0}: {1}", rootDirectory, ex.Message); + } } private static int CleanDirectory(DirectoryInfo directory) { var deletedFileCount = 0; - foreach (var dir in directory.EnumerateDirectories()) + try { - deletedFileCount += CleanDirectory(dir); + deletedFileCount += directory.EnumerateDirectories().Sum(dir => CleanDirectory(dir)); + } + catch (Exception ex) + { + Debug.WriteLine("ImageFileCache: Failed enumerating directories in {0}: {1}", directory.FullName, ex.Message); } - foreach (var file in directory.EnumerateFiles()) + try { - try - { - if (ReadExpiration(file) < DateTime.UtcNow) - { - file.Delete(); - deletedFileCount++; - } - } - catch (Exception ex) - { - Debug.WriteLine("ImageFileCache: Failed cleaning {0}: {1}", file.FullName, ex.Message); - } + deletedFileCount += directory.EnumerateFiles().Sum(file => CleanFile(file)); + } + catch (Exception ex) + { + Debug.WriteLine("ImageFileCache: Failed enumerating files in {0}: {1}", directory.FullName, ex.Message); } - if (!directory.EnumerateFileSystemInfos().Any()) + try { - try + if (!directory.EnumerateFileSystemInfos().Any()) { directory.Delete(); } - catch (Exception ex) + } + catch (Exception ex) + { + Debug.WriteLine("ImageFileCache: Failed cleaning {0}: {1}", directory.FullName, ex.Message); + } + + return deletedFileCount; + } + + private static int CleanFile(FileInfo file) + { + var deletedFileCount = 0; + + try + { + if (ReadExpiration(file) < DateTime.UtcNow) { - Debug.WriteLine("ImageFileCache: Failed cleaning {0}: {1}", directory.FullName, ex.Message); + file.Delete(); + deletedFileCount = 1; } } + catch (Exception ex) + { + Debug.WriteLine("ImageFileCache: Failed cleaning {0}: {1}", file.FullName, ex.Message); + } return deletedFileCount; } diff --git a/MapControl/Shared/TileImageLoader.cs b/MapControl/Shared/TileImageLoader.cs index 4a737ddf..5b633fb6 100644 --- a/MapControl/Shared/TileImageLoader.cs +++ b/MapControl/Shared/TileImageLoader.cs @@ -13,6 +13,15 @@ using System.Threading.Tasks; namespace MapControl { + namespace Caching + { + public class ImageCacheItem + { + public byte[] Buffer { get; set; } + public DateTime Expiration { get; set; } + } + } + #if NETFRAMEWORK static class ConcurrentQueueEx { diff --git a/MapControl/UWP/ImageCache.UWP.cs b/MapControl/UWP/ImageCache.UWP.cs deleted file mode 100644 index 9551ca14..00000000 --- a/MapControl/UWP/ImageCache.UWP.cs +++ /dev/null @@ -1,22 +0,0 @@ -// XAML Map Control - https://github.com/ClemensFischer/XAML-Map-Control -// © 2021 Clemens Fischer -// Licensed under the Microsoft Public License (Ms-PL) - -using System; -using System.Threading.Tasks; -using Windows.Storage.Streams; - -namespace MapControl.Caching -{ - public class ImageCacheItem - { - public IBuffer Buffer { get; set; } - public DateTime Expiration { get; set; } - } - - public interface IImageCache - { - Task GetAsync(string key); - Task SetAsync(string key, IBuffer buffer, DateTime expiration); - } -} diff --git a/MapControl/UWP/ImageFileCache.UWP.cs b/MapControl/UWP/ImageFileCache.UWP.cs index b34ddc7c..d5395165 100644 --- a/MapControl/UWP/ImageFileCache.UWP.cs +++ b/MapControl/UWP/ImageFileCache.UWP.cs @@ -5,9 +5,7 @@ using System; using System.Diagnostics; using System.IO; -using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; -using Windows.Storage.Streams; namespace MapControl.Caching { @@ -15,7 +13,7 @@ namespace MapControl.Caching { public async Task GetAsync(string key) { - ImageCacheItem imageCacheItem = null; + ImageCacheItem cacheItem = null; var path = GetPath(key); try @@ -25,9 +23,9 @@ namespace MapControl.Caching var buffer = await File.ReadAllBytesAsync(path); var expiration = ReadExpiration(ref buffer); - imageCacheItem = new ImageCacheItem + cacheItem = new ImageCacheItem { - Buffer = buffer.AsBuffer(), + Buffer = buffer, Expiration = expiration }; @@ -39,14 +37,14 @@ namespace MapControl.Caching Debug.WriteLine("ImageFileCache: Failed reading {0}: {1}", path, ex.Message); } - return imageCacheItem; + return cacheItem; } - public async Task SetAsync(string key, IBuffer buffer, DateTime expiration) + public async Task SetAsync(string key, ImageCacheItem cacheItem) { var path = GetPath(key); - if (buffer != null && buffer.Length > 0 && path != null) + if (cacheItem.Buffer != null && cacheItem.Buffer.Length > 0 && path != null) { try { @@ -54,8 +52,8 @@ namespace MapControl.Caching using (var stream = File.Create(path)) { - await stream.AsOutputStream().WriteAsync(buffer); - await WriteExpirationAsync(stream, expiration); + await stream.WriteAsync(cacheItem.Buffer, 0, cacheItem.Buffer.Length); + await WriteExpirationAsync(stream, cacheItem.Expiration); } //Debug.WriteLine("ImageFileCache: Wrote {0}, Expires {1}", path, expiration.ToLocalTime()); diff --git a/MapControl/UWP/ImageLoader.UWP.cs b/MapControl/UWP/ImageLoader.UWP.cs index 28447f16..2b1fa7f6 100644 --- a/MapControl/UWP/ImageLoader.UWP.cs +++ b/MapControl/UWP/ImageLoader.UWP.cs @@ -4,7 +4,6 @@ using System; using System.IO; -using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.Streams; @@ -29,14 +28,16 @@ namespace MapControl return image; } - public static async Task LoadImageAsync(IBuffer buffer) + public static Task LoadImageAsync(Stream stream) { - using (var stream = new InMemoryRandomAccessStream()) - { - await stream.WriteAsync(buffer); - stream.Seek(0); + return LoadImageAsync(stream.AsRandomAccessStream()); + } - return await LoadImageAsync(stream); + public static Task LoadImageAsync(byte[] buffer) + { + using (var stream = new MemoryStream(buffer)) + { + return LoadImageAsync(stream); } } @@ -56,15 +57,5 @@ namespace MapControl return image; } - - public static Task LoadImageAsync(Stream stream) - { - return LoadImageAsync(stream.AsRandomAccessStream()); - } - - public static Task LoadImageAsync(byte[] buffer) - { - return LoadImageAsync(buffer.AsBuffer()); - } } } diff --git a/MapControl/UWP/MapControl.UWP.csproj b/MapControl/UWP/MapControl.UWP.csproj index 78727012..0b4bb1f7 100644 --- a/MapControl/UWP/MapControl.UWP.csproj +++ b/MapControl/UWP/MapControl.UWP.csproj @@ -186,7 +186,6 @@ WorldMercatorProjection.cs - diff --git a/MapControl/UWP/TileImageLoader.UWP.cs b/MapControl/UWP/TileImageLoader.UWP.cs index 1b3f9e8c..df53e869 100644 --- a/MapControl/UWP/TileImageLoader.UWP.cs +++ b/MapControl/UWP/TileImageLoader.UWP.cs @@ -3,8 +3,8 @@ // Licensed under the Microsoft Public License (Ms-PL) using System; -using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; +using MapControl.Caching; #if WINDOWS_UWP using Windows.UI.Core; using Windows.UI.Xaml.Media; @@ -15,6 +15,16 @@ using Microsoft.UI.Xaml.Media; namespace MapControl { + namespace Caching + { + public interface IImageCache + { + Task GetAsync(string key); + + Task SetAsync(string key, ImageCacheItem cacheItem); + } + } + public partial class TileImageLoader { /// @@ -29,7 +39,7 @@ namespace MapControl /// /// The IImageCache implementation used to cache tile images. The default is null. /// - public static Caching.IImageCache Cache { get; set; } + public static IImageCache Cache { get; set; } private static async Task LoadCachedTileAsync(Tile tile, Uri uri, string cacheKey) @@ -43,9 +53,15 @@ namespace MapControl if (response != null) // download succeeded { - buffer = response.Buffer?.AsBuffer(); // may be null or empty when no tile available, but still be cached + buffer = response.Buffer; // may be null or empty when no tile available, but still be cached - await Cache.SetAsync(cacheKey, buffer, GetExpiration(response.MaxAge)).ConfigureAwait(false); + cacheItem = new ImageCacheItem + { + Buffer = buffer, + Expiration = GetExpiration(response.MaxAge) + }; + + await Cache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); } } diff --git a/MapControl/WPF/ImageFileCache.WPF.cs b/MapControl/WPF/ImageFileCache.WPF.cs index 0e06aca3..0fec63ba 100644 --- a/MapControl/WPF/ImageFileCache.WPF.cs +++ b/MapControl/WPF/ImageFileCache.WPF.cs @@ -95,9 +95,9 @@ namespace MapControl.Caching throw new ArgumentNullException(nameof(key)); } - var imageCacheItem = memoryCache.Get(key) as ImageCacheItem; + var cacheItem = memoryCache.Get(key) as ImageCacheItem; - if (imageCacheItem == null) + if (cacheItem == null) { var path = GetPath(key); @@ -108,15 +108,15 @@ namespace MapControl.Caching var buffer = File.ReadAllBytes(path); var expiration = ReadExpiration(ref buffer); - imageCacheItem = new ImageCacheItem + cacheItem = new ImageCacheItem { Buffer = buffer, Expiration = expiration }; - memoryCache.Set(key, imageCacheItem, new CacheItemPolicy { AbsoluteExpiration = expiration }); + memoryCache.Set(key, cacheItem, new CacheItemPolicy { AbsoluteExpiration = expiration }); - //Debug.WriteLine("ImageFileCache: Read {0}, Expires {1}", path, imageCacheItem.Expiration.ToLocalTime()); + //Debug.WriteLine("ImageFileCache: Read {0}, Expires {1}", path, cacheItem.Expiration.ToLocalTime()); } } catch (Exception ex) @@ -125,7 +125,7 @@ namespace MapControl.Caching } } - return imageCacheItem; + return cacheItem; } public override CacheItem GetCacheItem(string key, string regionName = null) @@ -152,17 +152,16 @@ namespace MapControl.Caching throw new ArgumentNullException(nameof(key)); } - if (!(value is ImageCacheItem imageCacheItem)) + if (!(value is ImageCacheItem cacheItem)) { throw new ArgumentException("The value argument must be a MapControl.Caching.ImageCacheItem instance.", nameof(value)); } - memoryCache.Set(key, imageCacheItem, policy); + memoryCache.Set(key, cacheItem, policy); - var buffer = imageCacheItem.Buffer; var path = GetPath(key); - if (buffer != null && buffer.Length > 0 && path != null) + if (cacheItem.Buffer != null && cacheItem.Buffer.Length > 0 && path != null) { try { @@ -170,8 +169,8 @@ namespace MapControl.Caching using (var stream = File.Create(path)) { - stream.Write(buffer, 0, buffer.Length); - WriteExpiration(stream, imageCacheItem.Expiration); + stream.Write(cacheItem.Buffer, 0, cacheItem.Buffer.Length); + WriteExpiration(stream, cacheItem.Expiration); } var fileInfo = new FileInfo(path); @@ -179,7 +178,7 @@ namespace MapControl.Caching fileSecurity.AddAccessRule(fullControlRule); fileInfo.SetAccessControl(fileSecurity); - //Debug.WriteLine("ImageFileCache: Wrote {0}, Expires {1}", path, imageCacheItem.Expiration.ToLocalTime()); + //Debug.WriteLine("ImageFileCache: Wrote {0}, Expires {1}", path, cacheItem.Expiration.ToLocalTime()); } catch (Exception ex) { diff --git a/MapControl/WPF/TileImageLoader.WPF.cs b/MapControl/WPF/TileImageLoader.WPF.cs index 02cef0cf..73e812a4 100644 --- a/MapControl/WPF/TileImageLoader.WPF.cs +++ b/MapControl/WPF/TileImageLoader.WPF.cs @@ -2,23 +2,14 @@ // © 2021 Clemens Fischer // Licensed under the Microsoft Public License (Ms-PL) -using MapControl.Caching; using System; using System.IO; using System.Runtime.Caching; using System.Threading.Tasks; +using MapControl.Caching; namespace MapControl { - namespace Caching - { - public class ImageCacheItem - { - public byte[] Buffer { get; set; } - public DateTime Expiration { get; set; } - } - } - public partial class TileImageLoader { /// diff --git a/MapControlExtended.sln b/MapControlExtended.sln index 760101d3..9b94de2d 100644 --- a/MapControlExtended.sln +++ b/MapControlExtended.sln @@ -47,202 +47,156 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SQLiteCache.WPF", "SQLiteCa EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MapControl.WinUI", "MapControl\WinUI\MapControl.WinUI.csproj", "{ACA8E56C-0F82-4010-A83E-2DBFF5D16919}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinUiApp", "SampleApps\WinUiApp\WinUiApp.csproj", "{66C8D0B6-1D19-4023-9A8B-C7E41857EB73}" +EndProject +Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "WinUiApp (Package)", "SampleApps\WinUiApp (Package)\WinUiApp (Package).wapproj", "{2DB6959F-1768-495C-8EED-4830EF185584}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|Any CPU.Build.0 = Debug|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|x64.ActiveCfg = Debug|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|x64.Build.0 = Debug|Any CPU - {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|x86.ActiveCfg = Debug|Any CPU - {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Debug|x86.Build.0 = Debug|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|Any CPU.Build.0 = Release|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|x64.ActiveCfg = Release|Any CPU {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|x64.Build.0 = Release|Any CPU - {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|x86.ActiveCfg = Release|Any CPU - {A204A102-C745-4D65-AEC8-7B96FAEDEF2D}.Release|x86.Build.0 = Release|Any CPU {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|Any CPU.ActiveCfg = Debug|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|Any CPU.Build.0 = Debug|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|Any CPU.Deploy.0 = Debug|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x64.ActiveCfg = Debug|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x64.Build.0 = Debug|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x64.Deploy.0 = Debug|x64 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x86.ActiveCfg = Debug|x86 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x86.Build.0 = Debug|x86 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Debug|x86.Deploy.0 = Debug|x86 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|Any CPU.ActiveCfg = Release|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|Any CPU.Build.0 = Release|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|Any CPU.Deploy.0 = Release|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x64.ActiveCfg = Release|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x64.Build.0 = Release|x64 {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x64.Deploy.0 = Release|x64 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x86.ActiveCfg = Release|x86 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x86.Build.0 = Release|x86 - {AA62B4AA-1CA3-4C20-BEB7-B824D0FC4BD1}.Release|x86.Deploy.0 = Release|x86 {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|Any CPU.Build.0 = Debug|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|x64.ActiveCfg = Debug|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|x64.Build.0 = Debug|Any CPU - {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|x86.ActiveCfg = Debug|Any CPU - {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Debug|x86.Build.0 = Debug|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|Any CPU.ActiveCfg = Release|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|Any CPU.Build.0 = Release|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|x64.ActiveCfg = Release|Any CPU {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|x64.Build.0 = Release|Any CPU - {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|x86.ActiveCfg = Release|Any CPU - {38B18AB6-6E70-4696-8FB4-E8C8E12BF50C}.Release|x86.Build.0 = Release|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|x64.ActiveCfg = Debug|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|x64.Build.0 = Debug|Any CPU - {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|x86.ActiveCfg = Debug|Any CPU - {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Debug|x86.Build.0 = Debug|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|Any CPU.Build.0 = Release|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|x64.ActiveCfg = Release|Any CPU {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|x64.Build.0 = Release|Any CPU - {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|x86.ActiveCfg = Release|Any CPU - {AD1CB53E-7AA4-4EC0-B901-B4E0E2665133}.Release|x86.Build.0 = Release|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|x64.ActiveCfg = Debug|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|x64.Build.0 = Debug|Any CPU - {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|x86.ActiveCfg = Debug|Any CPU - {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Debug|x86.Build.0 = Debug|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|Any CPU.Build.0 = Release|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|x64.ActiveCfg = Release|Any CPU {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|x64.Build.0 = Release|Any CPU - {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|x86.ActiveCfg = Release|Any CPU - {BEEB142A-5FA3-468D-810A-32A4A5BD6D5D}.Release|x86.Build.0 = Release|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|Any CPU.Build.0 = Debug|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|x64.ActiveCfg = Debug|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|x64.Build.0 = Debug|Any CPU - {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|x86.ActiveCfg = Debug|Any CPU - {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Debug|x86.Build.0 = Debug|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|Any CPU.ActiveCfg = Release|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|Any CPU.Build.0 = Release|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|x64.ActiveCfg = Release|Any CPU {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|x64.Build.0 = Release|Any CPU - {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|x86.ActiveCfg = Release|Any CPU - {9545F73C-9C35-4CF6-BAAE-19A0BAEBD344}.Release|x86.Build.0 = Release|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|Any CPU.Build.0 = Debug|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|x64.ActiveCfg = Debug|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|x64.Build.0 = Debug|Any CPU - {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|x86.ActiveCfg = Debug|Any CPU - {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Debug|x86.Build.0 = Debug|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|Any CPU.ActiveCfg = Release|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|Any CPU.Build.0 = Release|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|x64.ActiveCfg = Release|Any CPU {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|x64.Build.0 = Release|Any CPU - {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|x86.ActiveCfg = Release|Any CPU - {DCC111E9-EC8B-492A-A09D-DF390D83AE8D}.Release|x86.Build.0 = Release|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|Any CPU.Build.0 = Debug|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|x64.ActiveCfg = Debug|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|x64.Build.0 = Debug|Any CPU - {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|x86.ActiveCfg = Debug|Any CPU - {426C21C0-5F14-491F-BCD1-6D2993510420}.Debug|x86.Build.0 = Debug|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|Any CPU.ActiveCfg = Release|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|Any CPU.Build.0 = Release|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|x64.ActiveCfg = Release|Any CPU {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|x64.Build.0 = Release|Any CPU - {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|x86.ActiveCfg = Release|Any CPU - {426C21C0-5F14-491F-BCD1-6D2993510420}.Release|x86.Build.0 = Release|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|Any CPU.Build.0 = Debug|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|x64.ActiveCfg = Debug|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|x64.Build.0 = Debug|Any CPU - {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|x86.ActiveCfg = Debug|Any CPU - {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Debug|x86.Build.0 = Debug|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|Any CPU.ActiveCfg = Release|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|Any CPU.Build.0 = Release|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|x64.ActiveCfg = Release|Any CPU {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|x64.Build.0 = Release|Any CPU - {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|x86.ActiveCfg = Release|Any CPU - {F92DA93D-75DB-4308-A5F9-6B4C3908A675}.Release|x86.Build.0 = Release|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|Any CPU.Build.0 = Debug|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|x64.ActiveCfg = Debug|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|x64.Build.0 = Debug|Any CPU - {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|x86.ActiveCfg = Debug|Any CPU - {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Debug|x86.Build.0 = Debug|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|Any CPU.ActiveCfg = Release|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|Any CPU.Build.0 = Release|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|x64.ActiveCfg = Release|Any CPU {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|x64.Build.0 = Release|Any CPU - {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|x86.ActiveCfg = Release|Any CPU - {9EE69591-5EDC-45E3-893E-2F9A4B82D538}.Release|x86.Build.0 = Release|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|Any CPU.Build.0 = Debug|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|x64.ActiveCfg = Debug|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|x64.Build.0 = Debug|Any CPU - {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|x86.ActiveCfg = Debug|Any CPU - {52042F63-563A-45BB-9A08-A8635AAAB84C}.Debug|x86.Build.0 = Debug|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|Any CPU.ActiveCfg = Release|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|Any CPU.Build.0 = Release|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|x64.ActiveCfg = Release|Any CPU {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|x64.Build.0 = Release|Any CPU - {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|x86.ActiveCfg = Release|Any CPU - {52042F63-563A-45BB-9A08-A8635AAAB84C}.Release|x86.Build.0 = Release|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|Any CPU.Build.0 = Debug|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|x64.ActiveCfg = Debug|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|x64.Build.0 = Debug|Any CPU - {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|x86.ActiveCfg = Debug|Any CPU - {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Debug|x86.Build.0 = Debug|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|Any CPU.Build.0 = Release|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|x64.ActiveCfg = Release|Any CPU {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|x64.Build.0 = Release|Any CPU - {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|x86.ActiveCfg = Release|Any CPU - {BE08B7BC-8C89-4837-BCE7-EDDDABEAB372}.Release|x86.Build.0 = Release|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|x64.ActiveCfg = Debug|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|x64.Build.0 = Debug|Any CPU - {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|x86.ActiveCfg = Debug|Any CPU - {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Debug|x86.Build.0 = Debug|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|Any CPU.Build.0 = Release|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|x64.ActiveCfg = Release|Any CPU {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|x64.Build.0 = Release|Any CPU - {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|x86.ActiveCfg = Release|Any CPU - {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1}.Release|x86.Build.0 = Release|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|Any CPU.Build.0 = Debug|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|x64.ActiveCfg = Debug|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|x64.Build.0 = Debug|Any CPU - {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|x86.ActiveCfg = Debug|Any CPU - {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Debug|x86.Build.0 = Debug|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|Any CPU.ActiveCfg = Release|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|Any CPU.Build.0 = Release|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|x64.ActiveCfg = Release|Any CPU {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|x64.Build.0 = Release|Any CPU - {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|x86.ActiveCfg = Release|Any CPU - {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349}.Release|x86.Build.0 = Release|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|x64.ActiveCfg = Debug|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|x64.Build.0 = Debug|Any CPU - {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|x86.ActiveCfg = Debug|Any CPU - {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Debug|x86.Build.0 = Debug|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|Any CPU.Build.0 = Release|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|x64.ActiveCfg = Release|Any CPU {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|x64.Build.0 = Release|Any CPU - {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|x86.ActiveCfg = Release|Any CPU - {ACA8E56C-0F82-4010-A83E-2DBFF5D16919}.Release|x86.Build.0 = Release|Any CPU + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Debug|Any CPU.ActiveCfg = Debug|x64 + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Debug|x64.ActiveCfg = Debug|x64 + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Debug|x64.Build.0 = Debug|x64 + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Release|Any CPU.ActiveCfg = Release|x64 + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Release|x64.ActiveCfg = Release|x64 + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73}.Release|x64.Build.0 = Release|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Debug|Any CPU.ActiveCfg = Debug|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Debug|x64.ActiveCfg = Debug|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Debug|x64.Build.0 = Debug|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Debug|x64.Deploy.0 = Debug|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Release|Any CPU.ActiveCfg = Release|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Release|x64.ActiveCfg = Release|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Release|x64.Build.0 = Release|x64 + {2DB6959F-1768-495C-8EED-4830EF185584}.Release|x64.Deploy.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -263,6 +217,8 @@ Global {56DFA7CF-F31D-45CE-9C36-DA8DBB8413B1} = {96FD1258-1597-48A2-8D64-1ADAE13E886A} {0109C2F0-BA2C-420F-B2CA-DB5B29B1A349} = {96FD1258-1597-48A2-8D64-1ADAE13E886A} {ACA8E56C-0F82-4010-A83E-2DBFF5D16919} = {52AECE49-F314-4F76-98F2-FA800F07824B} + {66C8D0B6-1D19-4023-9A8B-C7E41857EB73} = {8F2103C2-78AF-4810-8FB9-67572F50C8FC} + {2DB6959F-1768-495C-8EED-4830EF185584} = {8F2103C2-78AF-4810-8FB9-67572F50C8FC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {458346DD-B23F-4FDC-8F9D-A10F1882A4DB} diff --git a/SQLiteCache/UWP/SQLiteCache.UWP.cs b/SQLiteCache/UWP/SQLiteCache.UWP.cs index cebdddb8..34add4f1 100644 --- a/SQLiteCache/UWP/SQLiteCache.UWP.cs +++ b/SQLiteCache/UWP/SQLiteCache.UWP.cs @@ -4,9 +4,7 @@ using System; using System.Diagnostics; -using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; -using Windows.Storage.Streams; namespace MapControl.Caching { @@ -25,7 +23,7 @@ namespace MapControl.Caching return new ImageCacheItem { Expiration = new DateTime((long)reader["expiration"]), - Buffer = ((byte[])reader["buffer"]).AsBuffer() + Buffer = (byte[])reader["buffer"] }; } } @@ -38,16 +36,16 @@ namespace MapControl.Caching return null; } - public async Task SetAsync(string key, IBuffer buffer, DateTime expiration) + public async Task SetAsync(string key, ImageCacheItem cacheItem) { try { - using (var command = SetItemCommand(key, expiration, buffer?.ToArray())) + using (var command = SetItemCommand(key, cacheItem.Expiration, cacheItem.Buffer)) { await command.ExecuteNonQueryAsync(); } - //Debug.WriteLine("SQLiteCache.SetAsync(\"{0}\"): expires {1}", key, expiration.ToLocalTime()); + //Debug.WriteLine("SQLiteCache.SetAsync(\"{0}\"): expires {1}", key, cacheItem.Expiration.ToLocalTime()); } catch (Exception ex) {