private async Task MainAsync() { Console.WriteLine("アイドルの一覧をダウンロードしています。"); var idols = await Idol.DownloadIdolsAsync(); Console.WriteLine("アイドルの一覧を保存しています。"); var ic = await SaveIdolsAsync(idols); await Task.Delay(Wait); if (ic > 0 || _ForceUpdateImages) { var d = new HashSet <Tuple <string, string> >(); for (var i = 0; i < idols.Count; i++) { var idol = idols[i]; Console.WriteLine("[{0}/{1}]{2}の画像一覧をダウンロードしています。", i + 1, idols.Count, idol.Name); var imgs = await idol.GetIdolImagesAsync(errorHandler : (n, v) => { var t = Tuple.Create(n, v); if (d.Add(t)) { Console.WriteLine("不明な{0}:{1}", n, v); } }); Console.WriteLine("[{0}/{1}]{2}の画像一覧を保存しています。", i + 1, idols.Count, idol.Name); await SaveIdolImagesAsync(imgs); await Task.Delay(Wait); } } // TODO:nullのデータを消してリトライ var types = new[] { IdolImageDataType.Framed, IdolImageDataType.Frameless, IdolImageDataType.Quest, IdolImageDataType.LS, IdolImageDataType.XS }; var tc = await GetUnaquiredImageCountAsync(types); var dc = 0; for (var img = await GetUnaquiredImageAsync(types); img != null; img = await GetUnaquiredImageAsync(types)) { foreach (var t in types) { if (await AnyImageDataAsync(img.Hash, t)) { continue; } dc++; Console.WriteLine("[{0}/{1}]{2}の{3}画像をダウンロードしています。", dc, tc, img.Headline, t); var d = await GetImageDataAsync(img.Hash, t); if (d != null && d.Length > 2 && d[0] == 0xff && d[1] == 0xd8) { Console.WriteLine("[{0}/{1}]{2}の{3}画像を保存しています。", dc, tc, img.Headline, t); await InsertImageDataAsync(img.Hash, t, d); } await Task.Delay(Wait); } } }