private void OnOfflinePackProgressChanged(NSNotification notification)
        {
            MGLOfflinePack pack      = notification.Object as MGLOfflinePack;
            var            hash      = pack.GetNativeHash();
            var            completed = pack.State == MGLOfflinePackState.Complete || (pack.Progress.countOfResourcesExpected == pack.Progress.countOfResourcesCompleted);
            OfflinePack    formsPack;

            if (tempPacks.ContainsKey(hash))
            {
                formsPack          = tempPacks[hash];
                formsPack.Progress = pack.Progress.ToFormsProgress();
                formsPack.State    = (OfflinePackState)pack.State;
                if (completed)
                {
                    tempPacks.Remove(hash);
                }
            }
            else
            {
                formsPack = pack.ToFormsPack();
                if (!completed)
                {
                    tempPacks.Add(hash, formsPack);
                }
            }
            OfflinePackProgressChanged?.Invoke(this, new OSSEventArgs()
            {
                OfflinePack = formsPack
            });
        }
Exemple #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);
        }
        private void OnMaximumMapboxTilesReached(NSNotification notification)
        {
            MGLOfflinePack pack = notification.Object as MGLOfflinePack;

            var         maximumCount = notification.UserInfo[MGLOfflinePackKeys.UserInfoKeyMaximumCount] as NSNumber;
            var         hash         = pack.GetNativeHash();
            OfflinePack formsPack;

            if (tempPacks.ContainsKey(hash))
            {
                formsPack       = tempPacks[hash];
                formsPack.State = (OfflinePackState)pack.State;
                tempPacks.Remove(hash);
            }
            else
            {
                formsPack = pack.ToFormsPack();
            }

            MaximumMapboxTilesReached?.Invoke(this, new OSSMaximumMapboxTilesReachedEventArgs()
            {
                OfflinePack  = formsPack,
                MaximumCount = maximumCount.UInt64Value
            });
        }
        private void OnOfflinePackProgressChanged(NSNotification notification)
        {
            if (downloadDelegate == null)
            {
                return;
            }

            MGLOfflinePack pack      = notification.Object as MGLOfflinePack;
            var            hash      = pack.GetNativeHash();
            var            completed = pack.State == MGLOfflinePackState.Complete || (pack.Progress.countOfResourcesExpected == pack.Progress.countOfResourcesCompleted);
            OfflinePack    formsPack;

            if (tempPacks.ContainsKey(hash))
            {
                formsPack          = tempPacks[hash];
                formsPack.Progress = pack.Progress.ToFormsProgress();
                formsPack.State    = (OfflinePackState)pack.State;
                if (completed)
                {
                    tempPacks.Remove(hash);
                }
            }
            else
            {
                formsPack = pack.ToFormsPack();
                if (!completed)
                {
                    tempPacks.Add(hash, formsPack);
                }
            }
            downloadDelegate.OfflinePackProgressDidChange(formsPack);
        }
        private void OnOfflinePackError(NSNotification notification)
        {
            MGLOfflinePack pack  = notification.Object as MGLOfflinePack;
            NSError        error = notification.UserInfo[MGLOfflinePackKeys.UserInfoKeyError] as NSError;
            OfflinePack    formsPack;
            var            hash = pack.GetNativeHash();

            if (tempPacks.ContainsKey(hash))
            {
                formsPack       = tempPacks[hash];
                formsPack.State = (OfflinePackState)pack.State;
                tempPacks.Remove(hash);
            }
            else
            {
                formsPack = pack.ToFormsPack();
            }
            OfflinePackGotError?.Invoke(this, new OSSErrorEventArgs()
            {
                OfflinePack  = formsPack,
                ErrorMessage = error.LocalizedFailureReason
            });
        }
        private void OnOfflinePackError(NSNotification notification)
        {
            if (downloadDelegate == null)
            {
                return;
            }
            MGLOfflinePack pack  = notification.Object as MGLOfflinePack;
            NSError        error = notification.UserInfo[MGLOfflinePackKeys.UserInfoKeyError] as NSError;
            OfflinePack    formsPack;
            var            hash = pack.GetNativeHash();

            if (tempPacks.ContainsKey(hash))
            {
                formsPack       = tempPacks[hash];
                formsPack.State = (OfflinePackState)pack.State;
                tempPacks.Remove(hash);
            }
            else
            {
                formsPack = pack.ToFormsPack();
            }
            downloadDelegate.OfflinePackDidGetError(formsPack, error.LocalizedFailureReason);
        }
        private void OnMaximumMapboxTilesReached(NSNotification notification)
        {
            if (downloadDelegate == null)
            {
                return;
            }
            MGLOfflinePack pack = notification.Object as MGLOfflinePack;

            var         maximumCount = notification.UserInfo[MGLOfflinePackKeys.UserInfoKeyMaximumCount] as NSNumber;
            var         hash         = pack.GetNativeHash();
            OfflinePack formsPack;

            if (tempPacks.ContainsKey(hash))
            {
                formsPack       = tempPacks[hash];
                formsPack.State = (OfflinePackState)pack.State;
                tempPacks.Remove(hash);
            }
            else
            {
                formsPack = pack.ToFormsPack();
            }
            downloadDelegate.MaximumMapboxTilesWasReached(formsPack, maximumCount.UInt64Value);
        }