示例#1
0
        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
                });
            }
                                   ));
        }
示例#2
0
        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);
        }
示例#5
0
 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);
        }
示例#7
0
        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
                });
            }
                                    ));
        }
示例#8
0
 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));
     }
 }
示例#9
0
 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));
     }
 }
示例#10
0
        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);
        }
示例#15
0
        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);
        }