public void Fill(FullSnookerPlayerData fullPlayerData, bool isMyAthlete)
        {
            this.fullPlayerData = fullPlayerData;
            this.isMyAthlete    = isMyAthlete;

            int?bestBreak = null;

            if (fullPlayerData != null)
            {
                bestBreak = fullPlayerData.BestBreak;
            }
            labelBestBreak.Text = bestBreak != null?bestBreak.Value.ToString() : "-";

            int?bestFrame = null;

            if (fullPlayerData != null)
            {
                bestFrame = fullPlayerData.BestFrame;
            }
            labelBestFrame.Text = bestFrame != null?bestFrame.Value.ToString() : "-";

            if (fullPlayerData == null || fullPlayerData.InternetIssues)
            {
                this.labelLocation.Text = "Couldn't load data. Internet issues?";
            }
            else
            {
                this.labelLocation.Text = (fullPlayerData.Person != null && fullPlayerData.Person.HasMetro) ? fullPlayerData.Person.Metro : "";
            }

            if (fullPlayerData != null)
            {
                if (fullPlayerData.Person != null && fullPlayerData.InternetIssues == false)
                {
                    this.SetImage(fullPlayerData.Person.Picture);
                    this.labelContributions.Text = fullPlayerData.Person.SnookerStats.CountContributions.ToString();
                    this.labelAbout.Text         = fullPlayerData.Person.SnookerAbout;
                }
                else
                {
                    var myAthlete = App.Repository.GetMyAthlete();
                    if (myAthlete.AthleteID == fullPlayerData.AthleteID)
                    {
                        this.SetImage(myAthlete.Picture);
                        this.labelContributions.Text = "";
                        this.labelAbout.Text         = myAthlete.SnookerAbout;
                    }
                }
            }
        }
        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);
        }
Example #3
0
        void loadDataAsyncAndFill(bool onlyIfItsBeenAwhile)
        {
            if (this.AthleteID < -1)
            {
                return;
            }

            if (onlyIfItsBeenAwhile & (DateTime.Now - timeLastLoad).TotalMinutes < 2)
            {
                return;
            }

            this.infoControl.FillWaiting();
            this.buttonBreaks.Number    = null;
            this.buttonMatches.Number   = null;
            this.buttonOpponents.Number = null;
            this.buttonVenues.Number    = null;

            if (this.LoadStarted != null)
            {
                this.LoadStarted();
            }

            new Task(async() =>
            {
                timeLastLoad        = DateTime.Now;
                this.fullPlayerData = await new FullSnookerPlayerDataHelper().Load(AthleteID);

                Device.BeginInvokeOnMainThread(() =>
                {
                    this.fillOther();
                    this.fillButtons();
                    this.infoControl.Fill(fullPlayerData, IsMyAthlete);
                    this.fillVisibleControlsWithExistingData();

                    if (this.LoadCompleted != null)
                    {
                        this.LoadCompleted(this.fullPlayerData != null && this.fullPlayerData.InternetIssues == false);
                    }
                });
            }).Start();
        }
        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);
        }
        void putPlaceholdersIfInternetIssues(FullSnookerPlayerData data)
        {
            if (!(data.Opponents == null && data.VenuesPlayed == null))
            {
                return;
            }

            if (data.Breaks != null)
            {
                foreach (var b in data.Breaks)
                {
                    if (b.OpponentAthleteID > 0 && string.IsNullOrEmpty(b.OpponentName))
                    {
                        b.OpponentName = "name not loaded";
                    }
                    if (b.VenueID > 0 && string.IsNullOrEmpty(b.VenueName))
                    {
                        b.VenueName = "venue not loaded";
                    }
                }
            }

            if (data.Matches != null)
            {
                foreach (var m in data.Matches)
                {
                    if (m.OpponentAthleteID > 0 && string.IsNullOrEmpty(m.OpponentName))
                    {
                        m.OpponentName = "name not loaded";
                    }
                    if (m.VenueID > 0 && string.IsNullOrEmpty(m.VenueName))
                    {
                        m.VenueName = "venue not loaded";
                    }
                }
            }
        }
        async Task loadVenues(FullSnookerPlayerData data)
        {
            if (data.Breaks == null || data.Matches == null)
            {
                data.VenuesPlayed = null;
                return;
            }

            List <int> ids  = new List <int>();
            List <int> ids1 = (from b in data.Breaks
                               where b.VenueID > 0
                               select b.VenueID).Distinct().ToList();

            ids.AddRange(ids1);

            List <int> ids2 = (from m in data.Matches
                               where m.VenueID > 0
                               select m.VenueID).Distinct().ToList();

            foreach (int id in ids2)
            {
                if (ids.Contains(id) == false)
                {
                    ids.Add(id);
                }
            }

            await App.Cache.LoadFromWebserviceIfNecessary_Venues(ids);

            foreach (var b in data.Breaks)
            {
                if (b.VenueID > 0)
                {
                    var venue = App.Cache.Venues.Get(b.VenueID);
                    b.VenueName = venue != null ? venue.Name : "";
                }
            }
            foreach (var match in data.Matches)
            {
                if (match.VenueID > 0)
                {
                    var venue = App.Cache.Venues.Get(match.VenueID);
                    match.VenueName = venue != null ? venue.Name : "";
                }
            }

            var venues = App.Cache.Venues.Get(ids);

            if (venues == null)
            {
                data.VenuesPlayed = null;
                return;
            }

            data.VenuesPlayed = new List <SnookerVenuePlayed>();
            foreach (var venue in venues)
            {
                data.VenuesPlayed.Add(new SnookerVenuePlayed()
                {
                    Venue        = venue,
                    CountBests   = data.Breaks.Where(i => i.VenueID == venue.ID).Count(),
                    CountMatches = data.Matches.Where(i => i.VenueID == venue.ID).Count()
                });
            }
        }
        async Task loadOpponents(FullSnookerPlayerData data)
        {
            if (data.Breaks == null || data.Matches == null)
            {
                data.Opponents = null;
                return;
            }

            List <int> opponentIDs  = new List <int>();
            List <int> opponentIDs1 = (from b in data.Breaks
                                       where b.OpponentAthleteID > 0
                                       select b.OpponentAthleteID).Distinct().ToList();

            opponentIDs.AddRange(opponentIDs1);

            List <int> opponentIDs2 = (from m in data.Matches
                                       where m.OpponentAthleteID > 0
                                       select m.OpponentAthleteID).Distinct().ToList();

            foreach (int id in opponentIDs2)
            {
                if (opponentIDs.Contains(id) == false)
                {
                    opponentIDs.Add(id);
                }
            }

            List <PersonBasicWebModel> friends = await App.WebService.GetFriendsOfAthlete(data.AthleteID);

            if (friends != null)
            {
                foreach (var friend in friends)
                {
                    if (opponentIDs.Contains(friend.ID) == false)
                    {
                        opponentIDs.Add(friend.ID);
                    }
                }
                App.Cache.People.Put(friends);
            }

            await App.Cache.LoadFromWebserviceIfNecessary_People(opponentIDs);

            foreach (var b in data.Breaks)
            {
                if (b.OpponentAthleteID > 0)
                {
                    var person = App.Cache.People.Get(b.OpponentAthleteID);
                    b.OpponentName = person != null ? person.Name : "";
                }
            }
            foreach (var match in data.Matches)
            {
                if (match.OpponentAthleteID > 0)
                {
                    var person = App.Cache.People.Get(match.OpponentAthleteID);
                    match.OpponentName = person != null ? person.Name : "";
                }
            }

            var people = App.Cache.People.Get(opponentIDs);

            if (people == null)
            {
                data.Opponents = null;
                return;
            }

            data.Opponents = new List <SnookerOpponent>();
            foreach (var person in people)
            {
                data.Opponents.Add(new SnookerOpponent()
                {
                    Person      = person,
                    CountDraws  = data.Matches.Where(m => m.OpponentAthleteID == person.ID && m.MatchScoreA == m.MatchScoreB && m.OpponentConfirmation != OpponentConfirmationEnum.Declined).Count(),
                    CountLosses = data.Matches.Where(m => m.OpponentAthleteID == person.ID && m.MatchScoreA < m.MatchScoreB && m.OpponentConfirmation != OpponentConfirmationEnum.Declined).Count(),
                    CountWins   = data.Matches.Where(m => m.OpponentAthleteID == person.ID && m.MatchScoreA > m.MatchScoreB && m.OpponentConfirmation != OpponentConfirmationEnum.Declined).Count()
                });
            }
        }