Unified cache implementations

This commit is contained in:
Clemens 2021-06-30 14:17:54 +02:00
parent 3dc3db1d79
commit 8cb20f0544
8 changed files with 37 additions and 87 deletions

View file

@ -21,6 +21,21 @@ namespace MapControl.Caching
private readonly FileDb fileDb = new FileDb() { AutoFlush = true };
public FileDbCache(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException("The path argument must not be null or empty.", nameof(path));
}
if (string.IsNullOrEmpty(Path.GetExtension(path)))
{
path = Path.Combine(path, "TileCache.fdb");
}
Open(path);
}
public void Dispose()
{
fileDb.Dispose();

View file

@ -3,31 +3,14 @@
// Licensed under the Microsoft Public License (Ms-PL)
using System;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
namespace MapControl.Caching
{
public partial class FileDbCache : IImageCache
{
public FileDbCache(StorageFolder folder, string fileName = "TileCache.fdb")
{
if (folder == null)
{
throw new ArgumentNullException(nameof(folder));
}
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentException("The fileName argument must not be null or empty", nameof(fileName));
}
Open(Path.Combine(folder.Path, fileName));
}
public Task<ImageCacheItem> GetAsync(string key)
{
return Task.Run(() =>

View file

@ -5,7 +5,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Caching;
@ -13,21 +12,6 @@ namespace MapControl.Caching
{
public partial class FileDbCache : ObjectCache
{
public FileDbCache(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException("The path argument must not be null or empty.", nameof(path));
}
if (string.IsNullOrEmpty(Path.GetExtension(path)))
{
path = Path.Combine(path, "TileCache.fdb");
}
Open(path);
}
public override string Name
{
get { return string.Empty; }

View file

@ -8,7 +8,6 @@ using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
namespace MapControl.Caching
@ -19,11 +18,6 @@ namespace MapControl.Caching
private readonly string rootDirectory;
public ImageFileCache(StorageFolder folder)
: this(folder.Path)
{
}
public ImageFileCache(string directory)
{
if (string.IsNullOrEmpty(directory))

View file

@ -5,7 +5,6 @@
using System;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Storage;
#if WINDOWS_UWP
using Windows.UI.Core;
using Windows.UI.Xaml.Media;
@ -19,12 +18,12 @@ namespace MapControl
public partial class TileImageLoader
{
/// <summary>
/// Default StorageFolder where an IImageCache instance may save cached data,
/// i.e. ApplicationData.Current.TemporaryFolder.
/// Default folder path where an IImageCache instance may save cached data,
/// i.e. Windows.Storage.ApplicationData.Current.TemporaryFolder.Path.
/// </summary>
public static StorageFolder DefaultCacheFolder
public static string DefaultCacheFolder
{
get { return ApplicationData.Current.TemporaryFolder; }
get { return Windows.Storage.ApplicationData.Current.TemporaryFolder.Path; }
}
/// <summary>

View file

@ -5,6 +5,7 @@
using System;
using System.Data.SQLite;
using System.Diagnostics;
using System.IO;
namespace MapControl.Caching
{
@ -15,6 +16,23 @@ namespace MapControl.Caching
{
private readonly SQLiteConnection connection;
public SQLiteCache(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException("The path argument must not be null or empty.", nameof(path));
}
if (string.IsNullOrEmpty(Path.GetExtension(path)))
{
path = Path.Combine(path, "TileCache.sqlite");
}
connection = Open(Path.GetFullPath(path));
Clean();
}
private static SQLiteConnection Open(string path)
{
var connection = new SQLiteConnection("Data Source=" + path);

View file

@ -4,36 +4,14 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Streams;
namespace MapControl.Caching
{
/// <summary>
/// IImageCache implementation based on SqLite.
/// </summary>
public partial class SQLiteCache : IImageCache
{
public SQLiteCache(StorageFolder folder, string fileName = "TileCache.sqlite")
{
if (folder == null)
{
throw new ArgumentNullException(nameof(folder));
}
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentException("The fileName argument must not be null or empty.", nameof(fileName));
}
connection = Open(Path.Combine(folder.Path, fileName));
Clean();
}
public async Task<ImageCacheItem> GetAsync(string key)
{
try

View file

@ -6,34 +6,13 @@ using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Caching;
namespace MapControl.Caching
{
/// <summary>
/// ObjectCache implementation based on SqLite.
/// </summary>
public partial class SQLiteCache : ObjectCache
{
public SQLiteCache(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException("The path argument must not be null or empty.", nameof(path));
}
if (string.IsNullOrEmpty(Path.GetExtension(path)))
{
path = Path.Combine(path, "TileCache.sqlite");
}
connection = Open(Path.GetFullPath(path));
Clean();
}
public override string Name
{
get { return string.Empty; }