Пример #1
0
        public async Task Fill()
        {
            this.labelTop.Text = "loading...";

            int venueID = FVOConfig.LoadFromKeyChain(App.KeyChain).VenueID;

            var resultsWeb = await App.WebService.GetResultsAtVenue(venueID);

            var results = resultsWeb.Select(r => r.ToResult()).ToList();
            var scores  = await App.WebService.GetScoresAtVenue(venueID);

            bool failedToLoadFromWeb = results == null || scores == null;

            if (failedToLoadFromWeb)
            {
                scores  = App.Repository.GetScores(true);
                results = App.Repository.GetResults(true).ToList();
            }

            var matches = (from score in scores
                           select SnookerMatchScore.FromScore(score.AthleteAID, score)).ToList();
            var breaks = (from result in results
                          select SnookerBreak.FromResult(result)).ToList();

            await new CacheHelper().LoadFromWebserviceIfNecessary_People(App.Cache, results, scores);
            new CacheHelper().LoadNamesFromCache(App.Cache, breaks);
            new CacheHelper().LoadNamesFromCache(App.Cache, matches);

            listOfMatchesControl.Fill(matches);
            listOfBreaksControl.Fill(breaks);

            this.labelTop.Text = failedToLoadFromWeb ? "Failed to load. Internet issues?" : "History";
        }
Пример #2
0
        public async Task <FullSnookerVenueData> Load(int venueID)
        {
            FullSnookerVenueData data = new FullSnookerVenueData();

            data.VenueID = venueID;

            VenueWebModel venue = await App.WebService.GetVenue(venueID);

            if (venue == null)
            {
                return(null);
            }
            data.Venue = venue;

            App.Cache.Venues.Put(venue);

            var webResults = await App.WebService.GetResultsAtVenue(venueID);

            if (webResults != null)
            {
                var results = (from r in webResults
                               select r.ToResult()).ToList();
                data.Breaks = (from i in results
                               select SnookerBreak.FromResult(i)).ToList();
            }

            var scores = await App.WebService.GetScoresAtVenue(venueID);

            if (scores != null)
            {
                data.Matches = (from i in scores
                                select SnookerMatchScore.FromScore(0, i)).ToList();
            }

            var gameHosts = await App.WebService.GetGameHostsAtVenue(venueID, true);

            if (gameHosts != null)
            {
                data.GameHosts = (from i in gameHosts
                                  orderby i.When descending
                                  select i).ToList();
                data.GameHostsInThePast = (from i in gameHosts
                                           where i.When < DateTime.UtcNow
                                           orderby i.When descending
                                           select i).ToList();
                data.GameHostsInTheFuture = (from i in gameHosts
                                             where i.When >= DateTime.UtcNow
                                             orderby i.When ascending
                                             select i).ToList();
            }

            await loadPeople(data);

            this.putPlaceholdersIfInternetIssues(data);
            return(data);
        }
        public async Task <FullSnookerPlayerData> LoadForPlayer(int athleteID)
        {
            FullSnookerPlayerData data = new FullSnookerPlayerData();

            data.AthleteID = athleteID;

            var webResults = await App.WebService.GetResults(data.AthleteID);

            if (webResults != null)
            {
                var results = (from r in webResults
                               select r.ToResult()).ToList();
                data.Breaks = (from i in results
                               select SnookerBreak.FromResult(i)).ToList();
            }
            else
            {
                data.InternetIssues = true;
            }

            var scores = await App.WebService.GetScores(data.AthleteID);

            if (scores != null)
            {
                data.Matches = (from i in scores
                                select SnookerMatchScore.FromScore(data.AthleteID, i)).ToList();
            }
            else
            {
                data.InternetIssues = true;
            }

            await loadOpponents(data);
            await loadVenues(data);

            data.Person = await App.WebService.GetPersonByID(data.AthleteID);

            if (data.Person == null)
            {
                data.InternetIssues = true;
            }

            this.putPlaceholdersIfInternetIssues(data);
            return(data);
        }
        public async Task <FullSnookerPlayerData> LoadForMe()
        {
            DateTime timeBegin = DateTime.Now;

            FullSnookerPlayerData data = new FullSnookerPlayerData();

            data.AthleteID = App.Repository.GetMyAthleteID();

            var results = App.Repository.GetResults(data.AthleteID, false);

            data.Breaks = (from i in results
                           select SnookerBreak.FromResult(i)).ToList();

            var scores = App.Repository.GetScores(false);

            data.Matches = (from i in scores
                            select SnookerMatchScore.FromScore(data.AthleteID, i)).ToList();

            await loadOpponents(data);
            await loadVenues(data);

            data.Person = await App.WebService.GetPersonByID(data.AthleteID);

            if (data.Person == null)
            {
                data.InternetIssues = true;

                var athlete = App.Repository.GetAthlete(data.AthleteID);
                data.Person = new PersonFullWebModel();
                data.Person.CopyFrom(athlete);
            }

            this.putPlaceholdersIfInternetIssues(data);

            if (data.InternetIssues == false && data.Person != null)
            {
                await App.Cache.LoadFromWebserviceIfNecessary_Metro(data.Person.MetroID);
            }

            TraceHelper.TraceTimeSpan(timeBegin, DateTime.Now, "FullSnookerPlayerDataHelper.LoadForMe");
            return(data);
        }
Пример #5
0
        void fillPausedMatches()
        {
            // incompleted matches in the db
            var scoreObjs = (from i in App.Repository.GetScores(false)
                             where i.IsUnfinished == true
                             orderby i.TimeModified descending
                             select i).ToList();

            this.panelNewMatch.IsVisible = scoreObjs.Count() == 0;
            this.panelPausedMatches.Children.Clear();

            foreach (var scoreObj in scoreObjs)
            {
                var match         = SnookerMatchScore.FromScore(scoreObj.AthleteAID, scoreObj);
                var matchMetadata = new MetadataHelper().FromScoreForYou(match);

                var metadataControl = new SnookerMatchMetadataControl(matchMetadata, true)
                {
                    Padding = new Thickness(0, 0, 0, 0)
                };
                this.panelPausedMatches.Children.Add(metadataControl);

                var buttonDelete = new BybButton()
                {
                    Text              = "Cancel the match",
                    Style             = (Style)App.Current.Resources["BlackButtonStyle"],
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                };
                buttonDelete.Clicked += async(s1, e1) =>
                {
                    if (await App.Navigator.NavPage.DisplayAlert("Byb", "Delete this match?", "Yes, delete", "Cancel") == true)
                    {
                        App.Repository.SetIsDeletedOnScore(scoreObj.ScoreID, true);
                        this.DoOnOpen();
                    }
                };

                var buttonContinue = new BybButton()
                {
                    Text              = "Continue the match",
                    Style             = (Style)App.Current.Resources["LargeButtonStyle"],
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                };
                buttonContinue.Clicked += async(s1, e1) =>
                {
                    new MetadataHelper().ToScore(matchMetadata, match);

                    var page = new RecordMatchPage(match, false);
                    await App.Navigator.NavPage.Navigation.PushModalAsync(page);
                };

                this.panelPausedMatches.Children.Add(new StackLayout()
                {
                    Orientation       = StackOrientation.Horizontal,
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                    Padding           = new Thickness(0, 12, 0, 0),
                    Spacing           = 1,
                    Children          =
                    {
                        buttonDelete,
                        buttonContinue
                    }
                });
                this.panelPausedMatches.Children.Add(new BoxView()
                {
                    HeightRequest = 25
                });

                // load opponent names from web if it's not loaded yet
                if (matchMetadata.OpponentAthleteID > 0 && string.IsNullOrEmpty(matchMetadata.OpponentAthleteName) == true)
                {
                    Task.Run(async() =>
                    {
                        await App.Cache.LoadFromWebserviceIfNecessary_People(new List <int> ()
                        {
                            matchMetadata.OpponentAthleteID
                        });
                        var person = App.Cache.People.Get(matchMetadata.OpponentAthleteID);
                        if (person != null)
                        {
                            Device.BeginInvokeOnMainThread(() =>
                            {
                                match.OpponentName                = person.Name;
                                match.OpponentPicture             = person.Picture;
                                matchMetadata.OpponentAthleteName = person.Name;
                                matchMetadata.OpponentPicture     = person.Picture;
                                metadataControl.Refill();
                            });
                        }
                    });
                }
                ;
            }
        }
Пример #6
0
        private PersonFullWebModel getFull(int myAthleteID, int athleteID)
        {
            var _person = this.getBasic(myAthleteID, db.Athletes.Where(a => a.AthleteID == athleteID)).FirstOrDefault();

            if (_person == null)
            {
                return(null);
            }

            var person = new PersonFullWebModel();

            _person.CopyTo(person);

            var athlete = (from a in db.Athletes.Include("Friendships1").Include("Friendships2").Include("ScoreAs").Include("ScoreBs").Include("Results")
                           where a.AthleteID == athleteID
                           select a).Single();

            // added in 01/25/2016:
            person.IsFriendRequestSentByThisPerson = false;
            if (person.IsFriend == false)
            {
                if (athlete.Friendships1.Where(i => i.Athlete1ID == athleteID && i.FriendshipStatus == (int)FriendshipStatusEnum.Initiated).Count() == 1)
                {
                    person.IsFriendRequestSentByThisPerson = true;
                }
            }

            // basic stats
            person.SnookerStats = new SnookerStatsModel();
            person.SnookerStats.CountContributions = (from i in athlete.VenueEdits
                                                      select i.VenueID).Distinct().Count();
            person.SnookerStats.CountBests = (from r in athlete.Results
                                              where r.OpponentConfirmation != (int)OpponentConfirmationEnum.Declined
                                              where r.IsDeleted == false
                                              select r).Count();
            person.SnookerStats.CountMatches = (from s in athlete.ScoreAs
                                                where s.AthleteBConfirmation != (int)OpponentConfirmationEnum.Declined
                                                where s.IsDeleted == false
                                                select s).Count()
                                               +
                                               (from s in athlete.ScoreBs
                                                where s.AthleteBConfirmation == (int)OpponentConfirmationEnum.Confirmed
                                                where s.IsDeleted == false
                                                select s).Count();
            person.SnookerStats.BestBallCount = (from r in athlete.Results
                                                 where r.OpponentConfirmation != (int)OpponentConfirmationEnum.Declined
                                                 where r.IsDeleted == false
                                                 select r).Max(i => i.Count2) ?? 0;
            person.SnookerStats.BestPoints = (from r in athlete.Results
                                              where r.OpponentConfirmation != (int)OpponentConfirmationEnum.Declined
                                              where r.IsDeleted == false
                                              select r).Max(i => i.Count) ?? 0;

            // best frame score
            //var matchesA = (from i in athlete.ScoreAs
            //                select SnookerMatchScore.FromScore(myAthleteID, i));
            //var matchesB = (from i in athlete.ScoreBs
            //                where i.AthleteBConfirmation == (int)OpponentConfirmationEnum.Confirmed
            //                select SnookerMatchScore.FromScore(myAthleteID, i));
            List <SnookerMatchScore> matches = new List <SnookerMatchScore>();

            matches.AddRange(from i in athlete.ScoreAs
                             where i.IsDeleted == false
                             select SnookerMatchScore.FromScore(myAthleteID, i));
            matches.AddRange(from i in athlete.ScoreBs
                             where i.AthleteBConfirmation == (int)OpponentConfirmationEnum.Confirmed
                             where i.IsDeleted == false
                             select SnookerMatchScore.FromScore(myAthleteID, i));
            person.SnookerStats.BestFrameScore = (from m in matches
                                                  from f in m.FrameScores
                                                  select(int?) f.A).Max() ?? 0;
            //int maxA = (from m in matchesA
            //            from f in m.FrameScores
            //            select (int?)f.A).Max() ?? 0;
            //int maxB = (from m in matchesB
            //            from f in m.FrameScores
            //            select (int?)f.B).Max() ?? 0;
            //person.SnookerStats.BestFrameScore = System.Math.Max(maxA, maxB);

            // number of venues
            var venues1 = (from r in athlete.Results
                           where r.OpponentConfirmation != (int)OpponentConfirmationEnum.Declined
                           where r.IsDeleted == false
                           where r.VenueID != null
                           select r.VenueID.Value).Distinct().ToList();
            var venues2 = (from s in athlete.ScoreAs
                           where s.AthleteBConfirmation != (int)OpponentConfirmationEnum.Declined
                           where s.IsDeleted == false
                           where s.VenueID != null
                           select s.VenueID.Value).Distinct().ToList();
            var venues3 = (from s in athlete.ScoreBs
                           where s.AthleteBConfirmation != (int)OpponentConfirmationEnum.Declined
                           where s.IsDeleted == false
                           where s.VenueID != null
                           select s.VenueID.Value).Distinct().ToList();
            List <int> venues = venues1.ToList();

            foreach (var i in venues2)
            {
                if (venues.Contains(i) == false)
                {
                    venues.Add(i);
                }
            }
            foreach (var i in venues3)
            {
                if (venues.Contains(i) == false)
                {
                    venues.Add(i);
                }
            }
            person.SnookerStats.CountVenuesPlayed = venues.Count();

            // number of opponents
            var opponents1 = (from r in athlete.Results
                              where r.OpponentAthleteID != null && r.OpponentAthleteID != 0
                              where r.OpponentConfirmation != (int)OpponentConfirmationEnum.Declined
                              where r.IsDeleted == false
                              select r.OpponentAthleteID.Value).Distinct().ToList();
            var opponents2 = (from s in athlete.ScoreAs
                              where s.AthleteBID != 0
                              where s.AthleteBConfirmation != (int)OpponentConfirmationEnum.Declined
                              where s.IsDeleted == false
                              select s.AthleteBID).Distinct().ToList();
            var opponents3 = (from s in athlete.ScoreBs
                              where s.AthleteAID != 0
                              where s.AthleteBConfirmation != (int)OpponentConfirmationEnum.Declined
                              where s.IsDeleted == false
                              select s.AthleteAID).Distinct().ToList();
            List <int> opponents = opponents1.ToList();

            foreach (var i in opponents2)
            {
                if (opponents.Contains(i) == false)
                {
                    opponents.Add(i);
                }
            }
            foreach (var i in opponents3)
            {
                if (opponents.Contains(i) == false)
                {
                    opponents.Add(i);
                }
            }
            person.SnookerStats.CountOpponentsPlayed = opponents.Count;

            return(person);
        }