Beispiel #1
0
        void webClient2_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            if (this.IsDisposed)
            {
                return;
            }
            if (e.Cancelled)
            {
                return;
            }

            UserRanklist currentRank = null;

            try
            {
                if (e.Error != null)
                {
                    throw e.Error;
                }

                string result = System.Text.Encoding.UTF8.GetString(e.Result);

                if (worldRanks != null)
                {
                    worldRanks.Clear();
                }
                worldRanks = JsonConvert.DeserializeObject <List <UserRanklist> >(result);

                foreach (UserRanklist usub in worldRanks)
                {
                    if (LocalDatabase.ContainsUser(usub.username))
                    {
                        RegistryAccess.SetUserRank(usub);
                        if (usub.username == currentUser.uname)
                        {
                            currentRank = usub;
                        }
                    }
                }

                worldRanklist.SetObjects(worldRanks);
                worldRanklist.Sort(rankRANK, SortOrder.Ascending);


                Interactivity.SetStatus(currentUser.uname + "'s rank-list downloaded.");
                Logger.Add("World rank downloaded - " + currentUser.uname, "World Rank | webClient2_DownloadDataCompleted");
            }
            catch (Exception ex)
            {
                TaskQueue.AddTask(new TaskQueue.Function2(ShowWorldRank), e.UserState, 500);
                Interactivity.SetStatus("Rank-list download failed due to an error. Please try again.");
                Logger.Add(ex.Message, "World Rank | webClient2_DownloadDataCompleted");
            }

            if ((int)e.UserState == -1)
            {
                BringUserToMiddle(currentRank);
            }
        }
Beispiel #2
0
 private void worldRanklist_HyperlinkClicked(object sender, BrightIdeasSoftware.HyperlinkClickedEventArgs e)
 {
     if (e.Column == usernameRANK)
     {
         UserRanklist js = (UserRanklist)e.Model;
         usernameBox.Text = js.username;
         usernameBox.Focus();
     }
 }
Beispiel #3
0
        private void BringUserToMiddle(UserRanklist usub)
        {
            if (usub == null)
            {
                return;
            }

            int midpt = worldRanklist.Height / 2;
            int item  = worldRanklist.GetItemAt(1, midpt).Index;
            int indx  = worldRanklist.IndexOf(usub);

            for (int i = indx; i < worldRanklist.GetItemCount() && indx > item; ++i)
            {
                worldRanklist.EnsureVisible(i);
                item = worldRanklist.GetItemAt(1, midpt).Index;
            }
        }
Beispiel #4
0
        private void ProcessList()
        {
            if (currentUser == null)
            {
                currentUser      = new UserInfo();
                currentUser.uid  = currentUser.uname = currentUser.name = "[-]";
                currentUser.subs = new List <List <long> >();
                currentUser.Process();
            }

            userRank = RegistryAccess.GetUserRank(currentUser.uname);
            if (userRank == null)
            {
                userRank          = new UserRanklist();
                userRank.username = currentUser.uname;
                userRank.rank     = 0;
                userRank.activity = new List <long>();
                for (int i = 0; i < 5; ++i)
                {
                    userRank.activity.Add(0);
                }
            }

            _acOverTime.Clear();
            _subOverTime.Clear();
            _RankCount.Clear();

            _firstSub    = long.MaxValue;
            _solvedCount = _unsolvedCount = _tryCount = _totalSubmission = 0;
            _subInAnsiC  = _subInCPP = _subInCPP11 = _subInJava = _subInPascal = 0;
            _acCount     = _waCount = _tleCount = _reCount = _peCount = 0;
            _ceCount     = _oleCount = _subeCount = _mleCount = 0;

            List <long> solved = new List <long>();

            foreach (UserSubmission usub in currentUser.submissions)
            {
                //total submission count
                _totalSubmission++;

                //age meter
                if (_firstSub > usub.sbt)
                {
                    _firstSub = usub.sbt;
                }

                //add rank count
                if (usub.IsAccepted())
                {
                    _RankCount.Add(usub.rank, usub.pid);

                    //solve count
                    if (!solved.Contains(usub.pnum))
                    {
                        _solvedCount++;
                        solved.Add(usub.pnum);
                    }
                }


                //language
                switch ((Language)usub.lan)
                {
                case Language.C: _subInAnsiC++; break;

                case Language.Java: _subInJava++; break;

                case Language.Pascal: _subInPascal++; break;

                case Language.CPP: _subInCPP++; break;

                case Language.CPP11: _subInCPP11++; break;
                }

                //submissionPerTime
                double xval = new ZedGraph.XDate(UnixTimestamp.FromUnixTime(usub.sbt));
                if (_totalSubmission == 1)
                {
                    _subOverTime.Add(xval, 0);
                }

                _subOverTime.Add(xval, _totalSubmission);
                _acOverTime.Add(xval, _solvedCount);

                //verdict
                switch ((Verdict)usub.ver)
                {
                case Structures.Verdict.CompileError: _ceCount++; break;

                case Structures.Verdict.RuntimeError: _reCount++; break;

                case Structures.Verdict.OutputLimit: _oleCount++; break;

                case Structures.Verdict.TimLimit: _tleCount++; break;

                case Structures.Verdict.MemoryLimit: _mleCount++; break;

                case Structures.Verdict.WrongAnswer: _waCount++; break;

                case Structures.Verdict.PresentationError: _peCount++; break;

                case Structures.Verdict.Accepted: _acCount++; break;
                }
            }

            //finalize
            _tryCount      = currentUser.TryList.Count;
            _unsolvedCount = _tryCount - _solvedCount;
            _subOverTime.Add(new ZedGraph.XDate(DateTime.Now), _totalSubmission);
            _acOverTime.Add(new ZedGraph.XDate(DateTime.Now), _solvedCount);
        }
Beispiel #5
0
        private void worldRanklist_FormatCell(object sender, BrightIdeasSoftware.FormatCellEventArgs e)
        {
            if (e.Model == null)
            {
                return;
            }

            //change back-color of known users
            UserRanklist js = (UserRanklist)e.Model;

            if (js.username == RegistryAccess.DefaultUsername)
            {
                for (int i = 0; i < e.Item.SubItems.Count; ++i)
                {
                    e.Item.SubItems[i].BackColor = Color.Turquoise;
                }
            }
            else if (LocalDatabase.ContainsUser(js.username))
            {
                for (int i = 0; i < e.Item.SubItems.Count; ++i)
                {
                    e.Item.SubItems[i].BackColor = Color.LightBlue;
                }
            }

            //format other cells
            string    font  = "Segoe UI";
            float     size  = 9.0F;
            FontStyle style = FontStyle.Regular;
            Color     fore  = Color.Black;

            if (e.Column == rankRANK)
            {
                font = "Consolas";
                fore = Color.Teal;
            }
            else if (e.Column == usernameRANK)
            {
                fore = Color.Blue;
            }
            else if (e.Column == nameRANK)
            {
                font = "Segoe UI Semibold";
            }
            else if (e.Column == acRANK)
            {
                font = "Consolas";
                fore = Color.Navy;
            }
            else if (e.Column == nosRANK)
            {
                font = "Consolas";
                fore = Color.Maroon;
            }
            else
            {
                return;
            }

            e.SubItem.ForeColor = fore;
            e.SubItem.Font      = new Font(font, size, style);
        }