public async void RequestPackProgress(OfflinePack pack) { var regions = await GetRegions(); var region = regions.FirstOrDefault(d => d.ID == pack.Id); if (region == null) { return; } region.SetDownloadState(OfflineRegion.StateActive); region.SetObserver(new OfflineRegionObserver( (status) => { pack.Progress = new OfflinePackProgress() { CountOfResourcesExpected = (ulong)status.RequiredResourceCount, CountOfResourcesCompleted = (ulong)status.CompletedResourceCount, CountOfTilesCompleted = (ulong)status.CompletedTileCount, CountOfTileBytesCompleted = (ulong)status.CompletedTileSize, CountOfBytesCompleted = (ulong)status.CompletedResourceSize, MaximumResourcesExpected = (ulong)status.RequiredResourceCount }; if (status.IsComplete) { pack.State = OfflinePackState.Completed; } else if (status.DownloadState == OfflineRegion.StateActive) { pack.State = OfflinePackState.Active; } else { pack.State = OfflinePackState.Inactive; } OfflinePackProgressChanged?.Invoke(this, new OSSEventArgs() { OfflinePack = pack }); }, (error) => { System.Diagnostics.Debug.WriteLine($"[ERROR] {error.Message} {error.Reason}"); OfflinePackGotError?.Invoke(pack, new OSSErrorEventArgs() { ErrorMessage = error.Message }); }, (maximumCount) => { MaximumMapboxTilesReached?.Invoke(this, new OSSMaximumMapboxTilesReachedEventArgs() { OfflinePack = pack, MaximumCount = (ulong)maximumCount }); } )); }
public static OfflinePack ToFormsPack(this MGLOfflinePack mbPack) { if (mbPack == null) { return(null); } var output = new OfflinePack { Progress = mbPack.Progress.ToFormsProgress(), State = (OfflinePackState)mbPack.State, Handle = mbPack.Handle }; var mbRegion = mbPack.Region; var region = ObjCRuntime.Runtime.GetINativeObject <MGLTilePyramidOfflineRegion>(mbRegion.Handle, false); output.Region = region?.ToFormsRegion(); if (mbPack.Context != null) { var info = new Dictionary <string, string>(); NSDictionary userInfo = NSKeyedUnarchiver.UnarchiveObject(mbPack.Context) as NSDictionary; foreach (NSObject key in userInfo.Keys) { info.Add(key.ToString(), userInfo[key].ToString()); } output.Info = info; } return(output); }
public Task <bool> RemovePack(OfflinePack pack) { var tsc = new TaskCompletionSource <bool>(); try { var mbPack = Runtime.GetNSObject <MGLOfflinePack>(pack.Handle); MGLOfflineStorage.SharedOfflineStorage.RemovePack(mbPack, (error) => { if (error == null) { tsc.TrySetResult(true); } else { System.Diagnostics.Debug.WriteLine("Removing offline pack failed: " + error.LocalizedFailureReason); tsc.TrySetResult(false); } }); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("[Exception]: " + ex.Message); tsc.TrySetResult(false); } return(tsc.Task); }
private async Task <OfflineRegion> GetRegionByPack(OfflinePack pack) { var regions = await GetRegions(); var region = regions.FirstOrDefault(d => d.ID == pack.Id); return(region); }
public void RequestPackProgress(OfflinePack pack) { try { var mbPack = Runtime.GetNSObject <MGLOfflinePack>(pack.Handle); mbPack.RequestProgress(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("[Naxam.Mapbox] Request progress of offline pack failed: " + ex.Message); } }
public async Task <bool> SuspendPack(OfflinePack pack) { var region = await GetRegionByPack(pack); if (region == null) { return(false); } region.SetDownloadState(OfflineRegion.StateInactive); return(true); }
public void RequestPackProgress(OfflinePack pack) { var obj = new Java.Lang.Object(pack.Handle, Android.Runtime.JniHandleOwnership.TransferGlobalRef); var region = Android.Runtime.Extensions.JavaCast <OfflineRegion>(obj); region?.SetObserver(new OfflineRegionObserver( (status) => { pack.Progress = new OfflinePackProgress() { CountOfResourcesExpected = (ulong)status.RequiredResourceCount, CountOfResourcesCompleted = (ulong)status.CompletedResourceCount, CountOfTilesCompleted = (ulong)status.CompletedTileCount, CountOfTileBytesCompleted = (ulong)status.CompletedTileSize, CountOfBytesCompleted = (ulong)status.CompletedResourceSize, MaximumResourcesExpected = (ulong)status.RequiredResourceCount }; if (status.IsComplete) { pack.State = OfflinePackState.Completed; } else if (status.DownloadState == OfflineRegion.StateActive) { pack.State = OfflinePackState.Active; } else { pack.State = OfflinePackState.Inactive; } OfflinePackProgressChanged?.Invoke(this, new OSSEventArgs() { OfflinePack = pack }); }, (error) => { System.Diagnostics.Debug.WriteLine($"[ERROR] {error.Message} {error.Reason}"); OfflinePackGotError?.Invoke(pack, new OSSErrorEventArgs() { ErrorMessage = error.Message }); }, (maximumCount) => { MaximumMapboxTilesReached?.Invoke(this, new OSSMaximumMapboxTilesReachedEventArgs() { OfflinePack = pack, MaximumCount = (ulong)maximumCount }); } )); }
public Task <bool> SuspendPack(OfflinePack pack) { try { var mbPack = Runtime.GetNSObject <MGLOfflinePack>(pack.Handle); mbPack.Suspend(); return(Task.FromResult(true)); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("[Naxam.Mapbox] Suspend offline pack failed: " + ex.Message); return(Task.FromResult(false)); } }
public Task <bool> Resume(OfflinePack pack) { try { var mbPack = Runtime.GetNSObject <MGLOfflinePack>(pack.Handle); mbPack.Resume(); return(Task.FromResult(true)); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("[Exception]: " + ex.Message); return(Task.FromResult(false)); } }
public bool SuspendPack(OfflinePack pack) { var obj = new Java.Lang.Object(pack.Handle, Android.Runtime.JniHandleOwnership.TransferGlobalRef); var region = Android.Runtime.Extensions.JavaCast <OfflineRegion>(obj); if (region == null) { return(false); } region.SetDownloadState(OfflineRegion.StateInactive); return(true); }
public bool Resume(OfflinePack pack) { try { var mbPack = Runtime.GetNSObject<MGLOfflinePack>(pack.Handle); mbPack.Resume(); return true; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("[Exception]: " + ex.Message); return false; } }
async Task <bool> IOfflineStorageService.SuspendPack(OfflinePack pack) { if (pack == null) { return(false); } var mbPack = Runtime.GetNSObject <MGLOfflinePack>(pack.Handle); if (mbPack.State == MGLOfflinePackState.Invalid || mbPack.State == MGLOfflinePackState.Unknown) { return(false); } mbPack.Suspend(); if (mbPack.State == MGLOfflinePackState.Inactive) { return(true); } return(true); }
public static OfflinePack ToFormsPack(this OfflineRegion mbRegion) { if (mbRegion == null) { return(null); } var output = new OfflinePack() { Handle = mbRegion.Handle }; output.Id = mbRegion.ID; var definition = mbRegion.Definition; if (definition is OfflineTilePyramidRegionDefinition def) { output.Region = def.ToFormsRegion(); } if (mbRegion.GetMetadata() is byte[] metadata) { String json = new String(metadata, OfflineStorageService.JSON_CHARSET); try { JsonObject jsonObject = (JsonObject) new Gson().FromJson(json.ToString(), Java.Lang.Class.FromType(typeof(JsonObject))); if (jsonObject != null) { var keys = jsonObject.KeySet(); output.Info = new Dictionary <string, string>(keys.Count); foreach (string key in keys) { output.Info.Add(key, jsonObject.Get(key).AsString); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Failed to decode offline region metadata: " + ex.Message); } } return(output); }
public async Task <bool> RemovePack(OfflinePack pack) { var tcs = new TaskCompletionSource <bool>(); var region = await GetRegionByPack(pack); if (region == null) { tcs.TrySetResult(false); } else { region.Delete(new OfflineRegionDeleteCallback( () => tcs.TrySetResult(true), (msg) => { System.Diagnostics.Debug.WriteLine("[ERROR] Couldn't delete offline pack: " + msg); tcs.TrySetResult(false); } )); } return(await tcs.Task); }
public Task <bool> RemovePack(OfflinePack pack) { var tcs = new TaskCompletionSource <bool>(); var obj = new Java.Lang.Object(pack.Handle, Android.Runtime.JniHandleOwnership.TransferGlobalRef); var region = Android.Runtime.Extensions.JavaCast <OfflineRegion>(obj); if (region == null) { tcs.TrySetResult(false); } else { region.Delete(new OfflineRegionDeleteCallback( () => tcs.TrySetResult(true), (msg) => { System.Diagnostics.Debug.WriteLine("[ERROR] Couldn't delete offline pack: " + msg); tcs.TrySetResult(false); } )); } return(tcs.Task); }