Grabacr07.KanColleWrapper.Quests.Update C# (CSharp) Method

Update() private method

private Update ( kcsapi_questlist questlist ) : void
questlist Grabacr07.KanColleWrapper.Models.Raw.kcsapi_questlist
return void
		private void Update(kcsapi_questlist questlist)
		{
			this.IsUntaken = false;

			// キャッシュしてるページの数が、取得したページ数 (api_page_count) より大きいとき
			// 取得したページ数と同じ数になるようにキャッシュしてるページを減らす
			if (this.questPages.Count > questlist.api_page_count)
			{
				while (this.questPages.Count > questlist.api_page_count) this.questPages.RemoveAt(this.questPages.Count - 1);
			}

			// 小さいときは、キャッシュしたページ数と同じ数になるようにページを増やす
			else if (this.questPages.Count < questlist.api_page_count)
			{
				while (this.questPages.Count < questlist.api_page_count) this.questPages.Add(null);
			}

			if (questlist.api_list == null)
			{
				this.IsEmpty = true;
				this.All = this.Current = new List<Quest>();
			}
			else
			{
				var page = questlist.api_disp_page - 1;
				if (page >= this.questPages.Count) page = this.questPages.Count - 1;

				this.questPages[page] = new ConcurrentDictionary<int, Quest>();

				this.IsEmpty = false;

				questlist.api_list.Select(x => new Quest(x))
					.ForEach(x => this.questPages[page].AddOrUpdate(x.Id, x, (_, __) => x));

				this.All = this.questPages.Where(x => x != null)
					.SelectMany(x => x.Select(kvp => kvp.Value))
					.Distinct(x => x.Id)
					.OrderBy(x => x.Id)
					.ToList();

				var current = this.All.Where(x => x.State == QuestState.TakeOn || x.State == QuestState.Accomplished)
					.OrderBy(x => x.Id)
					.ToList();

				// 遂行中の任務数に満たない場合、未取得分として null で埋める
				while (current.Count < questlist.api_exec_count) current.Add(null);
				this.Current = current;
			}
		}
	}