private async void cancelCommandAsync(object obj)
        {
            //bool delete = await UserDialogs.Instance.ConfirmAsync(new ConfirmConfig() { Message = CommonResource.Route_DeleteAllTracksFromMessage, Title = CommonResource.CommonMsg_Warning, OkText = CommonResource.CommonMsg_Yes, CancelText = CommonResource.CommonMsg_No });
            bool delete = await UserDialogs.Instance.ConfirmAsync(new ConfirmConfig()
            {
                Message = "Удалить треки из маршрута?", Title = CommonResource.CommonMsg_Warning, OkText = CommonResource.CommonMsg_Yes, CancelText = CommonResource.CommonMsg_No
            });

            if (delete)
            {
                string currentUserToken = await _tokenService.GetAuthTokenAsync();

                TrackRouteRequest trackRequest = new TrackRouteRequest(currentUserToken);
                //trackRequest.RemoveAllTracksFromRoute(_routeId);
                _trackFileManager.RemoveAllTracksFromRoute(_routeId);
                await Navigation.PopModalAsync();
            }
        }
        private async Task <bool> tryParseAndGetTrackAsync(string filename, string routeId)
        {
            RouteTracking     trackResponse    = new RouteTracking();
            TokenStoreService tokenService     = new TokenStoreService();
            string            currentUserToken = await tokenService.GetAuthTokenAsync();

            TrackRouteRequest sendTrackRequest = new TrackRouteRequest(currentUserToken);
            bool sendResult = await sendTrackRequest.SendTrackFileAsync(filename, routeId);

            if (sendResult)
            {
                trackResponse = await sendTrackRequest.GetTrackPlacesAsync(routeId);

                if (trackResponse.Places.Length > 0)
                {
                    var viewTrackPlaces = sendTrackRequest.GetViewTrackPlaces(trackResponse.Places);
                    _trackFileManager.SaveTrack(routeId, viewTrackPlaces);
                }
            }


            return(sendResult && trackResponse.Places.Length > 0);
        }
예제 #3
0
        public async Task <bool> SyncAsync(string routeServerHash, bool loadOnlyPreviewImg = false)
        {
            var localRoute = _routeManager.GetViewRouteById(_routeId);

            //новый маршрут
            if (string.IsNullOrEmpty(routeServerHash))
            {
                bool updateResult = await updateRoute(routeServerHash, new RouteRoot()
                {
                    Route = new SharedModelsWS.Route()
                    {
                        Version = -1
                    }
                }, localRoute);

                _log.AddStringEvent($"route {_routeId}, create result:{updateResult}");
            }

            //независимо от того, новый маршрут или нет, проверяем, что изменилось - придется пройтись по всему маршруту и узнать
            RouteRoot routeRoot = await _routesApi.GetRouteRoot(_routeId);

            bool AuthRequired = (_routesApi.GetLastHttpStatusCode() == HttpStatusCode.Forbidden || _routesApi.GetLastHttpStatusCode() == HttpStatusCode.Unauthorized);

            if ((!AuthRequired) && (routeRoot != null))
            {
                bool updateResult = await updateRoute(routeServerHash, routeRoot, localRoute);

                if (!updateResult)
                {
                    return(false);
                }

                if (!localRoute.IsDeleted)
                {
                    updateResult = await updatePoints(routeRoot);

                    if (!updateResult)
                    {
                        return(false);
                    }

                    List <ViewRoutePointMediaObject> mediaForDownload = new List <ViewRoutePointMediaObject>();
                    List <ViewRoutePointMediaObject> mediaForUpload   = new List <ViewRoutePointMediaObject>();
                    (updateResult, mediaForUpload, mediaForDownload) = await updateMedias(routeRoot);

                    if (!updateResult)
                    {
                        return(false);
                    }

                    if (mediaForDownload.Count > 0)
                    {
                        await downloadMedias(mediaForDownload, loadOnlyPreviewImg);
                    }
                    if (mediaForUpload.Count > 0)
                    {
                        await uploadMedias(mediaForUpload);
                    }
                    TrackRouteRequest trackRequest = new TrackRouteRequest(_authToken);
                    var trackResponse = await trackRequest.GetTrackPlacesAsync(_routeId);

                    if ((trackResponse != null) && (trackResponse.Places.Any()))
                    {
                        _trackFileManager.RemoveAllTracksFromRoute(_routeId);
                        var viewTrackPlaces = trackRequest.GetViewTrackPlaces(trackResponse.Places);
                        _trackFileManager.SaveTrack(_routeId, viewTrackPlaces);
                    }
                }
            }
            else
            {
                return(false);
            }

            var serverHash = await _routesApi.UpdateHash(_routeId);

            if (_routesApi.LastHttpStatusCode == HttpStatusCode.OK)
            {
                var updatedLocalRoute = _routeManager.GetViewRouteById(_routeId);
                updatedLocalRoute.ServerSynced = true;
                updatedLocalRoute.ObjVerHash   = HashManager.Generate(getVersionsForRoute(updatedLocalRoute).ToString());
                if (updatedLocalRoute.ObjVerHash.Equals(serverHash))
                {
                    _log.AddStringEvent($"set route {_routeId}, versions {serverHash}");
                    updatedLocalRoute.Save();
                }
                else
                {
                    _log.AddStringEvent($"failed set route {_routeId}, versions {serverHash}");
                    HandleError.Process("SyncRoute", "ErrorUpdateHash", new Exception("Client and Server hash different"), false, $"server:[{serverHash}], client:[{updatedLocalRoute.ObjVerHash}]");
                }

                if (updatedLocalRoute.IsDeleted)
                {
                    _log.AddStringEvent($"set delete route {_routeId}");
                    deleteRouteContain(updatedLocalRoute);
                }
            }
            else
            {
                HandleError.Process("SyncRoute", "ErrorUpdateHash", new Exception("Http error:" + _routesApi.LastHttpStatusCode.ToString()), false);
            }

            return(true);
        }