private bool GetDecide(VideoTimeline vtl, int videoViewPercentage) { if (vtl == null) { return(false); } //if (vtl.Duration > 300000) return(vtl.Counter >= vtl.Duration * videoViewPercentage / 100); //return vtl.Counter > 60000 * 5; }
public async Task <bool> AddAsync(int user_id, string video_id, long timeline, long duration, long realtime, int videoViewPercentage) { var vtl = await GetAsync(user_id, video_id); if (vtl != null) { if (GetDecide(vtl, videoViewPercentage)) { return(true); } vtl.Duration = duration; // Если таймлайн не двигается или был перемотан назад, ничего не делаем if (timeline <= vtl.Timeline) { vtl.Timeline = timeline; await _context.SaveChangesAsync(); return(GetDecide(vtl, videoViewPercentage)); } // Вычисляем сдвиг var tl = Math.Abs(timeline - vtl.Timeline); var rt = Math.Abs(realtime - vtl.RealTime); // Берем минимальные значения сдвига var counter = Math.Min(tl, rt); // Обновляем значения vtl.RealTime = realtime; vtl.Timeline = timeline; vtl.Counter = vtl.Counter + counter; } else { vtl = new VideoTimeline { UserId = user_id, VideoId = video_id, Timeline = timeline, RealTime = realtime, Duration = duration, }; await _context.VideoTimelines.AddAsync(vtl); } await _context.SaveChangesAsync(); return(GetDecide(vtl, videoViewPercentage)); }