private async Task <int> SaveIdolsAsync(IEnumerable <Idol> idols) { using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; return(await db.SaveIdolsAsync(idols)); } }
private async Task <bool> AnyImageDataAsync(string hash, IdolImageDataType type) { using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; return(await db.IdolImageData.AnyAsync(_ => _.Hash == hash && _.Type == type)); } }
private async Task <IdolImage> GetUnaquiredImageAsync(IdolImageDataType[] types) { using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; return(await db.IdolImages.Include(_ => _.Idol) .FirstOrDefaultAsync(_ => !db.IdolImageData.Any(h => h.Hash == _.Hash && h.Type == IdolImageDataType.Framed))); } }
private async Task <int> GetUnaquiredImageCountAsync(IdolImageDataType[] types) { using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; var tc = await db.IdolImages.CountAsync(); var dc = await db.IdolImageData.CountAsync(_ => _.Data != null); return(tc * types.Length - dc); } }
private async Task SaveIdolImagesAsync(IEnumerable <IdolImage> images) { var imgDic = images.ToDictionary(_ => _.Hash); using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; var dbImages = await db.IdolImages.ToDictionaryAsync(_ => _.Hash); foreach (var kv in imgDic) { IdolImage d; if (dbImages.TryGetValue(kv.Key, out d)) { // 更新しない //var s = kv.Value; //d.Headline = !string.IsNullOrEmpty(s.Headline) ? s.Headline : d.Headline; //d.Rarity = s.Rarity > 0 ? s.Rarity : d.Rarity; //d.Type = s.Type > 0 ? s.Type : d.Type; //d.BloodType = s.BloodType > 0 ? s.BloodType : d.BloodType; //d.Height = s.Height > 0 ? s.Height : d.Height; //d.Weight = s.Weight > 0 ? s.Weight : d.Weight; //d.Bust = s.Bust > 0 ? s.Bust : d.Bust; //d.Waist = s.Waist > 0 ? s.Waist : d.Waist; //d.Hip = s.Hip > 0 ? s.Hip : d.Hip; //d.Age = s.Age > 0 ? s.Age : d.Age; //d.BirthMonth = s.BirthMonth > 0 ? s.BirthMonth : d.BirthMonth; //d.BirthDay = s.BirthDay > 0 ? s.BirthDay : d.BirthDay; //d.SunSign = s.SunSign > 0 ? s.SunSign : d.SunSign; //d.Birthplace = !string.IsNullOrEmpty(s.Birthplace) ? s.Birthplace : d.Birthplace; //d.Hobby = !string.IsNullOrEmpty(s.Hobby) ? s.Hobby : d.Hobby; //d.Handedness = s.Handedness > 0 ? s.Handedness : d.Handedness; } else { if (kv.Value.Idol != null) { db.Idols.Attach(kv.Value.Idol); } db.IdolImages.Add(kv.Value); } } await db.SaveChangesAsync(); } }
public async Task <HttpResponseMessage> GetImageAsync(string hash, IdolImageDataType type) { using (var db = new ImasCDDbContext()) { var d = await db.IdolImageData.FirstOrDefaultAsync(_ => _.Hash == hash && _.Type == type); if (d != null) { if (d.Data == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return(CreateFileResult(d.Data, "image/jpeg")); } var u = IdolImageData.GetImageUrl(hash, type); byte[] data; using (var wc = new WebClient()) { try { data = await wc.DownloadDataTaskAsync(u); } catch { data = null; } } db.IdolImageData.Add(new IdolImageData() { Hash = hash, Type = type, Data = data }); await db.SaveChangesAsync(); if (data == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return(CreateFileResult(data, "image/jpeg")); } }
private async Task InsertImageDataAsync(string hash, IdolImageDataType type, byte[] data) { using (var db = new ImasCDDbContext(_ConnectionString)) { db.Database.CommandTimeout = _Timeout; var d = await db.IdolImageData.FirstOrDefaultAsync(_ => _.Hash == hash && _.Type == type); if (d == null) { d = new IdolImageData(); d.Hash = hash; d.Type = type; db.IdolImageData.Add(d); } d.Data = data; await db.SaveChangesAsync(); } }
public async Task <JsonIdolImageResult> GetItemsAsync([FromUri] SearchCondition condition = null) { var c = condition ?? new SearchCondition(); using (var db = new ImasCDDbContext()) { IQueryable <IdolImage> q = db.IdolImages; q = Where(q, _ => _.Hash, c.Hash, TextOperator.Equal); q = Where(q, _ => _.Headline, c.Headline, c.HeadlineOperator); q = Where(q, _ => _.Idol.Name, c.Name, c.NameOperator); q = Where(q, _ => _.Idol.Kana, c.Kana, c.KanaOperator); if (c.IsPlus == true || (c.Rarity & IdolRarity.Plus) == IdolRarity.Plus) { q = q.Where(_ => (_.Rarity & IdolRarity.Plus) == IdolRarity.Plus); } else if (c.IsPlus == false) { q = q.Where(_ => (_.Rarity & IdolRarity.Plus) != IdolRarity.Plus); } c.Rarity &= ~IdolRarity.Plus; if (c.Rarity != IdolRarity.Unknown) { q = q.Where(_ => (_.Rarity & c.Rarity) == c.Rarity); } if (c.IdolType != IdolType.Unknown) { q = q.Where(_ => _.Type == c.IdolType); } var list = await q.Include(_ => _.Idol).Take(Math.Max(c.Count, 1)).ToListAsync(); var types = new[] { IdolImageDataType.Framed, IdolImageDataType.Frameless, IdolImageDataType.Quest, IdolImageDataType.LS, IdolImageDataType.XS }; var hs = list.Select(_ => _.Hash); var ie = await db.IdolImageData.Where(_ => hs.Contains(_.Hash) && types.Contains(_.Type)).ToDictionaryAsync(_ => new { _.Hash, _.Type }, _ => _.Data != null); var jl = new List <JsonIdolImage>(list.Count); IEnumerable <string> vs; Request.Headers.TryGetValues("X-Original-URL", out vs); var ou = vs?.Where(_ => _?.Length > 0).FirstOrDefault(); var ub = new UriBuilder(string.IsNullOrEmpty(ou) ? Request.RequestUri : new Uri(Request.RequestUri, ou)); ub.Query = null; var vpr = RequestContext.VirtualPathRoot; if (vpr?.EndsWith("/") == true) { vpr = vpr.Substring(0, vpr.Length - 1); } foreach (var i in list) { var j = new JsonIdolImage(i); foreach (var t in types) { bool b; if (!ie.TryGetValue(new { j.Hash, Type = t }, out b) || b) { ub.Path = $"{vpr}/i/{t}/{j.Hash}.jpg"; j.SetUrl(t, ub.Uri.ToString()); } } jl.Add(j); } return(new JsonIdolImageResult() { Items = jl }); } }