/// <summary> /// 插入缓存 /// </summary> /// <param name="cachedResponse">可被缓存的响应数据</param> /// <returns>缓存项</returns> public override CacheItem UpdateCache(ICachedResponse cachedResponse) { var cacheItem = CreateCacheItem(cachedResponse); CacheStorageProvider.InsertCacheItem(cacheItem); return(cacheItem); }
/// <summary> /// 获取 CacheItem /// </summary> /// <returns></returns> public CacheItem GetCacheItem() { if (_cacheItem == null) { _cacheItem = CacheStorageProvider.GetCacheItem(CacheToken); } if (_cacheItem != null && _cacheItem.IsValid())//确保缓存未过期 { return(_cacheItem); } return(null); }
private async Task HandleUpdater() { try { string updateSiteString = "https://onedrive.live.com/download?resid=D332F531B200D073%218103"; Uri updateSite = new Uri(updateSiteString); Uri remotePackageStorageDirectory = new Uri(updateSite, "Packages/"); if (Directory.Exists(baseDirectory) == false) { Directory.CreateDirectory(baseDirectory); } IStorageProvider storageProvider = new StorageProvider(baseDirectory); using (ICacheStorageProvider cacheStorageProvider = new CacheStorageProvider(System.IO.Path.Combine(baseDirectory, "Cache"))) { IPackageAcquisitionFactory packageAcquisitionFactory = new PackageAcquisitionFactory(); IUpdaterCache updaterCache = UpdaterCache.InitializeCache(cacheStorageProvider); IPackageMetadataCollection packageMetadataCollection = null; IUpdater updater = new Updater.Updater(); using (XmlReader xmlReader = XmlReader.Create(updateSite.AbsoluteUri)) { packageMetadataCollection = updater.ParseMetadataCollectionXml(xmlReader); } IUpdateState updateState = updater.DetermineUpdateState(updaterCache.InstalledPackages, packageMetadataCollection); IPackageInstaller packageInstaller = updater.CreateInstaller(); foreach (IPackageMetadata packageMetadata in updateState.Packages) { IPackageAcquisition packageAcquisition = packageAcquisitionFactory.BuildPackageAcquisition(remotePackageStorageDirectory, cacheStorageProvider); using (ZipArchive packageArchive = await packageAcquisition.AcquirePackageArchive(packageMetadata)) { using (IPackage package = Package.OpenPackage(packageMetadata, packageArchive)) { packageInstaller.Install(storageProvider, package); updaterCache.MarkPackageAsInstalled(package.Metadata); } } } } } catch (Exception ex) { string baseDirectory = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "Updater"); File.WriteAllText(System.IO.Path.Combine(baseDirectory, "error.txt"), ex.ToString()); } }
static async Task MainAsync(string[] args) { Uri updateSite = new Uri(ConfigurationManager.AppSettings["updateSite"]); Uri remotePackageStorageDirectory = new Uri(updateSite, "Packages/"); string baseDirectory = Path.GetFullPath("Testing"); // Clean the old test environment if it already exist if (Directory.Exists(baseDirectory)) { Directory.Delete(baseDirectory, true); } // Setup the test environment Directory.CreateDirectory(baseDirectory); IStorageProvider storageProvider = new StorageProvider(baseDirectory); using (ICacheStorageProvider cacheStorageProvider = new CacheStorageProvider(Path.Combine(baseDirectory, "Cache"))) { IPackageAcquisitionFactory packageAcquisitionFactory = new PackageAcquisitionFactory(); IUpdaterCache updaterCache = UpdaterCache.InitializeCache(cacheStorageProvider); IPackageMetadataCollection packageMetadataCollection = null; IUpdater updater = new Updater(); using (XmlReader xmlReader = XmlReader.Create(updateSite.AbsoluteUri)) { packageMetadataCollection = updater.ParseMetadataCollectionXml(xmlReader); } IUpdateState updateState = updater.DetermineUpdateState(updaterCache.InstalledPackages, packageMetadataCollection); IPackageInstaller packageInstaller = updater.CreateInstaller(); foreach (IPackageMetadata packageMetadata in updateState.Packages) { IPackageAcquisition packageAcquisition = packageAcquisitionFactory.BuildPackageAcquisition(remotePackageStorageDirectory, cacheStorageProvider); using (ZipArchive packageArchive = await packageAcquisition.AcquirePackageArchive(packageMetadata)) { using (IPackage package = Package.OpenPackage(packageMetadata, packageArchive)) { packageInstaller.Install(storageProvider, package); updaterCache.MarkPackageAsInstalled(package.Metadata); } } } } }
private async void PerformUpdateCommandCallback() { Status = "Downloading update..."; Uri updateSite = new Uri(@"https://onedrive.live.com/download?resid=D332F531B200D073%218103"); Uri remotePackageStorageDirectory = new Uri(updateSite, "Packages/"); string baseDirectory = Path.GetFullPath("Data"); IStorageProvider storageProvider = new StorageProvider(baseDirectory); using (ICacheStorageProvider cacheStorageProvider = new CacheStorageProvider(Path.Combine(baseDirectory, "Cache"))) { IPackageAcquisitionFactory packageAcquisitionFactory = new PackageAcquisitionFactory(); IUpdaterCache updaterCache = UpdaterCache.InitializeCache(cacheStorageProvider); IPackageMetadataCollection packageMetadataCollection = null; IUpdater updater = new Updater.Updater(); using (XmlReader xmlReader = XmlReader.Create(updateSite.AbsoluteUri)) { packageMetadataCollection = updater.ParseMetadataCollectionXml(xmlReader); } IUpdateState updateState = updater.DetermineUpdateState(updaterCache.InstalledPackages, packageMetadataCollection); IPackageInstaller packageInstaller = updater.CreateInstaller(); foreach (IPackageMetadata packageMetadata in updateState.Packages) { IPackageAcquisition packageAcquisition = packageAcquisitionFactory.BuildPackageAcquisition(remotePackageStorageDirectory, cacheStorageProvider); using (ZipArchive packageArchive = await packageAcquisition.AcquirePackageArchive(packageMetadata)) { using (IPackage package = Package.OpenPackage(packageMetadata, packageArchive)) { packageInstaller.Install(storageProvider, package); updaterCache.MarkPackageAsInstalled(package.Metadata); } } } } RefreshImage(); Status = "Image updated!"; }