protected override void Dispose(bool disposing) { NSNotificationCenter.DefaultCenter.RemoveObserver(this); if (this.globalMoodMapView != null) { this.globalMoodMapView.Dispose(); this.globalMoodMapView = null; } if (this.supportBtn != null) { this.supportBtn.Dispose(); this.supportBtn = null; } if (this.refreshBtn != null) { this.refreshBtn.Dispose(); this.refreshBtn = null; } if (this.syncStatusBtnView != null) { this.syncStatusBtnView.Dispose(); this.syncStatusBtnView = null; } this.currentReport = null; base.Dispose(disposing); }
public static double GetReportHours(MoodReport report) { var reportStartLocal = GetReportStartLocal(report); var reportEndLocal = GetReportEndLocal(report); return((reportEndLocal.Subtract(reportStartLocal).Days + 1) * (DayEndTime.Subtract(DayStartTime).TotalHours)); }
public static void DeleteReport(MoodReport report) { try { Console.WriteLine("Delete report {0}", report.Id); string imagesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString()); DirectoryInfo dir = new DirectoryInfo(imagesFolder); Console.WriteLine("Lets delete image files"); if (dir.Exists) { dir.Delete(true); } Console.WriteLine("Deleted image files"); // // foreach (var snapshot in report.Snapshots) { // snapshot.Moods.DeleteAll (); // } // // report.Snapshots.DeleteAll (); DeleteReportSnapshots(report); Console.WriteLine("Delete report"); var deleteReport = "delete from MoodReport where Id = @ReportId"; CSDatabase.ExecuteNonQuery(deleteReport, new { ReportId = report.Id }); //report.Delete (); Console.WriteLine("Report deleted"); } catch (Exception ex) { MyMoodLogger.Current.Error("Failed deleting report", ex, 1); } }
private static void DeleteReportSnapshots(MoodReport report) { var deleteMoodSnapshotsSql = "delete from MoodSnapshot where Id in" + "(select ms.Id from MoodSnapshot ms inner join Snapshot s on ms.SnapshotId = s.Id where s.MoodReportId = @ReportId)"; var deleteSnapshotSql = "delete from Snapshot where MoodReportId = @ReportId"; Console.WriteLine("Delete mood snapshots"); CSDatabase.ExecuteNonQuery(deleteMoodSnapshotsSql, new { ReportId = report.Id }); Console.WriteLine("Delete snapshots"); CSDatabase.ExecuteNonQuery(deleteSnapshotSql, new { ReportId = report.Id }); }
protected void UpdateReportInfo(GlobalMoodReportInfoModel reportInfo) { Console.WriteLine("Update report info"); if (reportInfo.Application != null) { UpdateApplication(reportInfo.Application, true); } if (reportInfo.Prompts != null) { Console.WriteLine("Update prompts"); Activity.List("ActivityType=@ActivityType", new{ ActivityType = ActivityType.MoodPrompt }).DeleteAll(); foreach (var p in reportInfo.Prompts) { var prompt = Activity.New(); prompt.Id = p.Id; prompt.ActivityType = ActivityType.MoodPrompt; prompt.Title = p.Title; prompt.TimeStamp = p.TimeStamp; prompt.Save(); } } if (reportInfo.Events != null) { Console.WriteLine("Update events"); Activity.List("ActivityType=@ActivityType", new{ ActivityType = ActivityType.Event }).DeleteAll(); foreach (var e in reportInfo.Events) { var evnt = Activity.New(); evnt.Id = e.Id; evnt.ActivityType = ActivityType.Event; evnt.Title = e.Title; evnt.TimeStamp = e.TimeStamp; evnt.Save(); } } if (reportInfo.HasNewData) { MoodReport report = MoodReport.New(); var reportId = System.Guid.NewGuid().ToString(); report.Id = reportId; report.RequestedOn = reportInfo.RequestTimeStamp; report.StartsOn = reportInfo.ReportStartDate; report.EndsOn = reportInfo.ReportEndDate; report.RequestCompleted = 0; report.DayStartsOn = reportInfo.DayStartsOn; report.DayEndsOn = reportInfo.DayEndsOn; report.RequestCompleted = 1; report.Save(); } }
public static void GenerateReportImagesForAllLevels(MoodReport report) { foreach (var rl in RenderLevel.RenderLevels) { GenerateReportImages(report, rl); } report.ImagesGenerated = 1; report.Save(); //NSNotificationCenter.DefaultCenter.PostNotificationName ("ReportImagesGenerated", null); //DeleteAllOldReports(); }
public ReportRequestStatus RequestGlobalMoodReportData(MoodReport report) { ReportRequestStatus rtnStatus = new ReportRequestStatus(); try { var app = ApplicationState.Current; var startDate = report.StartsOn; List <GlobalMoodReportModel> days = new List <GlobalMoodReportModel> (); var fail = 3; while (fail > 0 && startDate < report.EndsOn) { var endDate = startDate.Date.AddDays(1).AddMinutes(-10); NSString key = new NSString("Status"); NSDictionary userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject(string.Format("Requesting day data for {0:ddd dd MMM}", startDate)), key); NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo); var dataReqStatus = RequestGlobalMoodReportData(report.Id, startDate, endDate); if (dataReqStatus.Success) { //report = MoodReport.List ().FirstOrDefault (r => r.Id == reportId); //report.LastRequestedDay = startDate; //report.Save (); days.Add(dataReqStatus.ReportData); startDate = startDate.Date.AddDays(1); fail = 3; } else { fail--; } } if (fail > 0) { UpdateReportDays(report, days); rtnStatus.Success = true; rtnStatus.NewReportAvailable = true; } else { MyMoodLogger.Current.Log("Report download failed", "", 1); rtnStatus.Success = false; } } catch (Exception ex) { MyMoodLogger.Current.Error("Error downloading day data", ex, 1); } return(rtnStatus); }
public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); if (!ReportManager.RefreshCurrentReport) { MoodReport report = MoodReport.LatestGeneratedReport; if (report != null) { this.NavigationController.PushViewController(moodMapController, false); } } }
public static IEnumerable <UIImage> GetReportImages(MoodReport report, RenderLevel renderLevel) { List <UIImage> images = new List <UIImage>(); string imagesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString()); var reportStartLocal = GetReportStartLocal(report); var reportEndLocal = GetReportEndLocal(report); var days = (float)reportEndLocal.Date.Subtract(reportStartLocal.Date).Days + 1; for (var i = 0; i < days; i++) { var imagePath = Path.Combine(imagesFolder, GetDayImageFileName(renderLevel, i)); images.Add(UIImage.FromFile(imagePath)); } return(images); }
void NewReportReceived(NSDictionary n) { if (loadingFirstReport) { loadingFirstReport = false; Console.WriteLine("New report received in loading screen"); InvokeOnMainThread(delegate { if (this.NavigationController.TopViewController.View.Handle == this.View.Handle) { MoodReport report = MoodReport.CurrentReport; GenerateReportImages(report); } }); } }
public SnapshotChartView(MoodReport report, RectangleF frame) : base(frame) { Console.WriteLine("Init chart view"); this.report = report; this.BackgroundColor = UIColor.Clear; this.ContentMode = UIViewContentMode.Center; this.background = new UIImageView(this.Bounds); this.background.Image = Resources.SnapshotPanelRight; this.Add(this.background); this.Hidden = true; this.lastRefresh = DateTime.Now.AddDays(-1); this.eventTimeOffset = ApplicationState.Current.EventTimeOffset; }
public void Refresh(MoodReport report) { if (report != null) { this.snapshotSwitchView.Reset(); this.promptSwitchView.Reset(); this.eventSwitchView.Reset(); this.SetCurrentReport(report); this.globalMoodMap.Refresh(report, this.CurrentZoomLevel); this.BuildAxis(); if (this.snapshotToolView != null) { this.snapshotToolView.Refresh(); } } }
public void Refresh(MoodReport report, ZoomLevel zoomLevel) { Console.WriteLine("Refresh data - {0}", zoomLevel.Name); this.MoodReport = report; this.ReportStartLocal = ReportManager.GetReportStartLocal(report); this.ReportEndLocal = ReportManager.GetReportEndLocal(report); this.DefaultZoomLevel = zoomLevel; this.SetZoomLevel(zoomLevel); this.LoadImages(); if (this.eventMarkersVisible) { BuildEventMarkers(); } else { this.ClearEventMarkers(); } if (this.promptMarkersVisible) { BuildPromptMarkers(); } else { this.ClearPromptMarkers(); } var eventNow = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset); var offset = eventNow < this.ReportEndLocal ? ChartHelper.ToXPos(this.ReportStartLocal, this.ReportEndLocal, eventNow, this.CurrentRenderLevel.DayImageWidth, ReportManager.DayStartTime, ReportManager.DayEndTime, this.CurrentRenderLevel.DayMarkerWidth) - this.Bounds.Size.Width / 2 :this.ContentSize.Width - this.Bounds.Size.Width; if (offset > 0) { this.SetContentOffset(new PointF(offset, 0), true); } ZoomToDefault(); }
public void Refresh(MoodReport report, RenderLevel renderLevel) { var viewStartTime = ChartHelper.ToCurrentTime(report.StartsOn, report.EndsOn, this.globalMap.ContentOffset.X * 1 / this.globalMap.ZoomScale, renderLevel, true).Value; var viewEndTime = ChartHelper.ToCurrentTime(report.StartsOn, report.EndsOn, (this.globalMap.ContentOffset.X + this.Frame.Width) * 1 / this.globalMap.ZoomScale, renderLevel, true).Value; var labelTime = viewStartTime; var labelIndex = 0; var labelPos = 0f; while (labelTime < viewEndTime) { var pxTilEndOfDay = (float)(ReportManager.DayEndTime.Subtract(labelTime.TimeOfDay).TotalHours / ReportManager.DayEndTime.Subtract(ReportManager.DayStartTime).TotalHours) * renderLevel.DayImageWidth * this.globalMap.ZoomScale; if (pxTilEndOfDay >= labelW) { UILabel label; if (this.dayLabels.Count() > labelIndex) { label = this.dayLabels [labelIndex]; } else { label = new UILabel(new RectangleF(0, 0, labelW, labelH)); label.BackgroundColor = UIColor.Clear; label.TextColor = UIColor.White; label.Font = font; this.Add(label); this.dayLabels.Add(label); } label.Text = labelTime.ToString("ddd dd MMM"); label.Frame = new RectangleF(new PointF(labelPos, label.Frame.Y), label.Frame.Size); labelIndex++; } labelTime = labelTime.Date.AddDays(1); labelPos = (ChartHelper.ToXPos(report.StartsOn, report.EndsOn, labelTime, renderLevel.DayImageWidth, ReportManager.DayStartTime, ReportManager.DayEndTime, renderLevel.DayMarkerWidth) * this.globalMap.ZoomScale) - this.globalMap.ContentOffset.X; } while (labelIndex < this.dayLabels.Count()) { var i = this.dayLabels.Count() - 1; this.dayLabels[i].RemoveFromSuperview(); this.dayLabels.RemoveAt(i); } }
public override void ViewDidAppear(bool animated) { Console.WriteLine("Loading page - ViewDidAppear"); loadingTitle.Text = "Loading data ...."; loadingImage.StartAnimating(); MoodReport report = MoodReport.CurrentReport; if (report != null) { if (report.ImagesGenerated == 0) { GenerateReportImages(report); } else { ReportImagesGenerated(); } } }
public static ReportRequestStatus FetchReportDays(MoodReport report) { Console.WriteLine("Fetch report days"); var status = new ReportRequestStatus(); lock (_lock) { fetchingData = true; try{ //get rid of any pre fetched snapshots DeleteReportSnapshots(report); status = MyMoodService.Current.RequestGlobalMoodReportData(report); }catch (Exception ex) { MyMoodLogger.Current.Error("Error fetching new report", ex, 1); }finally{ fetchingData = false; } } Console.WriteLine("Fetched report days"); return(status); }
public static void DeleteAllOldReports(MoodReport currentReport) { try { if (currentReport != null) { Console.WriteLine("Delete old reports"); //var currentReport = MoodReport.CurrentReport; var lastReport = MoodReport.ReadFirst("RequestedOn < @RequestedOn and RequestCompleted > 0", new { RequestedOn = currentReport.RequestedOn }); var oldReports = MoodReport.List("RequestedOn < @RequestedOn", new { RequestedOn = currentReport.RequestedOn }).ToList(); foreach (var report in oldReports) { if (lastReport == null || report.Id != lastReport.Id) { DeleteReport(report); } } } } catch (Exception ex) { MyMoodLogger.Current.Error("Error deleting old reports", ex, 1); } }
public static Snapshot GetClosestSnapshot(MoodReport report, DateTime snapshotLocalTime) { //return report.Snapshots.ToList().Where(s => s.TimeOfSnapshotLocal <= snapshotLocalTime).OrderByDescending(s => s.TimeOfSnapshotLocal).FirstOrDefault(); Console.WriteLine("Fetching closest snapshot"); //Id TEXT PRIMARY KEY, MoodReportId TEXT, TimeOfSnapshot DATETIME, TimeOfSnapshotLocal DATETIME, TotalResponses INTEGER, IsFirstGlance INTEGER, CreatedOn datetime var sql = "select Id from Snapshot where MoodReportId = @ReportId and TimeOfSnapshotLocal <= @SnapTime order by TimeOfSnapshotLocal desc limit 1"; var record = CSDatabase.RunQuery(sql, new { ReportId = report.Id, SnapTime = snapshotLocalTime }).FirstOrDefault(); object snapshotId = null; record.TryGetValue("Id", out snapshotId); //string snapshotId = CSDatabase.RunQuery(sql, new { ReportId = report.Id, SnapTime = snapshotLocalTime}).FirstOrDefault(); Snapshot snapshot = null; if (snapshotId != null) { snapshot = Snapshot.ReadSafe(snapshotId.ToString()); } //var utcTime = snapshotLocalTime.ToLocalTime(-(ApplicationState.Current.EventTimeOffset)); //var snapshot = Snapshot.OrderedList("TimeOfSnapshotLocal-", "MoodReport.Id = @ReportId and TimeOfSnapshotLocal <= @SnapTime", new { ReportId = report.Id, SnapTime = snapshotLocalTime}).FirstOrDefault(); Console.WriteLine("Got closest snapshot"); return(snapshot); }
protected void GenerateReportImages(MoodReport report) { loadingTitle.Text = "Downloading data ..."; System.Threading.Tasks.Task.Factory.StartNew(() => { if (ReportManager.FetchReportDays(report).Success) { InvokeOnMainThread(delegate { loadingTitle.Text = "Generating images ..."; }); ReportManager.GenerateReportImagesForAllLevels(report); } else { InvokeOnMainThread(delegate { loadingTitle.Text = "Download failed."; }); //todo:pause } InvokeOnMainThread(delegate { ReportImagesGenerated(); }); }); }
public SnapshotToolView(MoodReport report, ScrollableMoodMapView globalMap, RectangleF frame) : base(frame) { this.ContentMode = UIViewContentMode.Center; this.report = report; this.globalMap = globalMap; backgroundImage = new UIImageView(DrawSnapshotDropLine()); backgroundImage.Center = new PointF(this.Center.X, this.Center.Y); this.Add(backgroundImage); this.AddStaleLine(); var center = new PointF(this.Bounds.Width / 2, this.Bounds.Height / 2); chart = new SnapshotChartView(this.report, new RectangleF(center.X + 10f, center.Y - 100f, 350f, 200f)); this.Add(chart); this.currentSnapshotTime = GetCurrentSnapshotTime(); this.RefreshChart(); this.globalMap.Scrolled += this.Scrolling; this.globalMap.ScrollAnimationEnded += this.Scrolled; this.globalMap.DecelerationEnded += this.Scrolled; this.globalMap.ZoomingEnded += this.Zoomed; }
public void Refresh(MoodReport report) { this.report = report; this.Refresh(); }
public void Refresh() { this.currentReport = MoodReport.LatestGeneratedReport; globalMoodMapView.Refresh(this.currentReport); //this.refreshBtn.Show(); }
public override void ViewDidLoad() { Console.WriteLine("Our mood ViewDidLoad"); base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. //MoodReport report = MoodReport.List().FirstOrDefault(); // GlobalMoodMap map = new GlobalMoodMap(){ // Width = (int)ChartContainer.Bounds.Width, // Height = (int)ChartContainer.Bounds.Height, // ReportStart = report.StartsOn, // ReportEnd = report.EndsOn, // Tension = 0.7f, // ShowDataPoints = false // }; NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("NewReportReceived"), "NewReportReceived", null); NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("SyncingWithServer:"), "SyncingWithServer", null); NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("SyncWithServerComplete:"), "SyncWithServerComplete", null); NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("HideSupportScreen:"), "HideSupportScreen", null); NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("ShowSupportScreen:"), "ShowSupportScreen", null); //globalMoodMap = new GlobalMoodMapView(new RectangleF(0, 0, this.ChartContainer.Frame.Width, this.ChartContainer.Frame.Height), null, false, true, 0.7f); globalMoodMapView = new GlobalMoodMapView(this.ChartLayer.Bounds); this.ChartLayer.Add(globalMoodMapView); syncStatusBtnView = new SyncStatusButtonView(new RectangleF(10, 12, 25, 22)); this.Add(syncStatusBtnView); //syncStatusBtnView.Hidden = true; refreshBtn = new RefreshDataButtonView(); refreshBtn.Center = new PointF(this.View.Center.X, -20); refreshBtn.Refresh += (object sender, EventArgs e) => { RefreshImages(); }; this.Add(refreshBtn); supportBtn = new UIButton(UIButtonType.RoundedRect); supportBtn.Frame = new RectangleF(300, 60, 70, 30); supportBtn.SetTitle("Support", UIControlState.Normal); supportBtn.TouchUpInside += (object sender, EventArgs e) => { ShowSupportScreen(); }; supportBtn.Hidden = true; this.Add(supportBtn); this.currentReport = MoodReport.LatestGeneratedReport; globalMoodMapView.Refresh(this.currentReport); Console.WriteLine("Snapshot count: {0}", Snapshot.Count()); Console.WriteLine("MoodSnapshot count: {0}", MoodSnapshot.Count()); Console.WriteLine("Report count: {0}", MoodReport.Count()); Console.WriteLine("Log count: {0}", Log.Count()); //this.Refresh(); // // // var reports = MoodReport.All().ToList(); // var snapshots = MoodSnapshot.Count(); // var currenSnapshots = MoodReport.CurrentReport.Snapshots.Count(); }
protected void UpdateReportDays(MoodReport report, IEnumerable <GlobalMoodReportModel> days) { Console.WriteLine("Update report days"); var allMoods = Mood.All().ToList(); NSDictionary userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject("Saving data ..."), new NSString("Status")); NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo); int count = 1; var insertSnapshotSql = "insert into Snapshot (Id, MoodReportId, TimeOfSnapshot, TimeOfSnapshotLocal, TotalResponses, CreatedOn) " + " values (@Id, @MoodReportId, @TimeOfSnapshot, @TimeOfSnapshotLocal, @TotalResponses, @CreatedOn)"; var insertMoodSnapshotSql = "insert into MoodSnapshot (Id, SnapshotId, MoodId, ResponseCount, ResponsePercentage) " + " values (@Id, @SnapshotId, @MoodId, @ResponseCount, @ResponsePercentage)"; foreach (var day in days) { foreach (var s in day.Snapshots) { userInfo = NSDictionary.FromObjectAndKey(NSObject.FromObject(string.Format("Saving snapshot {0}", count)), new NSString("Status")); NSNotificationCenter.DefaultCenter.PostNotificationName("RequestingReportStatus", null, userInfo); count++; var snapshotId = System.Guid.NewGuid().ToString(); CSDatabase.ExecuteNonQuery(insertSnapshotSql, new{ Id = snapshotId, MoodReportId = report.Id, TimeOfSnapshot = s.t, TimeOfSnapshotLocal = s.t.ToLocalTime(ApplicationState.Current.EventTimeOffset), TotalResponses = s.r, CreatedOn = DateTime.UtcNow }); // Snapshot snap = Snapshot.New (); // snap.Id = System.Guid.NewGuid ().ToString (); // snap.MoodReport = report; // snap.TimeOfSnapshot = s.t; // snap.TimeOfSnapshotLocal = s.t.ToLocalTime (ApplicationState.Current.EventTimeOffset); // snap.TotalResponses = s.r; // snap.IsFirstGlance = false; // snap.CreatedOn = DateTime.UtcNow; // snap.Save (); //make sure a snapshot is recorde for all moods even if no data provided var snapMoods = from m in allMoods join d in s.d on m.DisplayIndex equals d.i into gm from subm in gm.DefaultIfEmpty() select new { Mood = m, ResponseCount = subm == null ? 0 : subm.c, ResponsePercentage = subm == null ? 0 : subm.p, MoodType = m.MoodType }; foreach (var d in snapMoods) { CSDatabase.ExecuteNonQuery(insertMoodSnapshotSql, new { Id = System.Guid.NewGuid().ToString(), SnapshotId = snapshotId, MoodId = d.Mood.Id, ResponseCount = d.ResponseCount, ResponsePercentage = d.ResponsePercentage }); // MoodSnapshot ms = MoodSnapshot.New (); // ms.Id = System.Guid.NewGuid ().ToString (); // ms.Snapshot = snap; // ms.Mood = d.Mood; // //ms.Name = d.Mood.Name; // //ms.DisplayIndex = d.Mood.DisplayIndex; // ms.ResponseCount = d.ResponseCount; // ms.ResponsePercentage = d.ResponsePercentage; // ms.Save (); } } } }
public static DateTime GetReportStartLocal(MoodReport report) { return(report.StartsOnLocal.Date.Add(DayStartTime)); }
public static void GenerateReportImages(MoodReport report, RenderLevel renderLevel) { Console.WriteLine("Generate report images - {0} / {1}", report.Id, renderLevel.Index); if (report != null) { string imagesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Reports", report.Id.ToString()); DirectoryInfo imagesDir = new DirectoryInfo(imagesFolder); if (!imagesDir.Exists) { imagesDir.Create(); } var nowLocal = DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset); var reportStartLocal = GetReportStartLocal(report); var reportEndLocal = GetReportEndLocal(report); //var finalSnapshotTime = nowLocal > reportEndLocal ? reportEndLocal : nowLocal; var finalSnapshotTime = reportEndLocal; var dayStart = reportStartLocal; var dayEnd = reportStartLocal.Date.Add(DayEndTime); //var dayHours = dayEnd.Subtract (dayStart).TotalHours; if (dayEnd > reportEndLocal) { dayEnd = reportEndLocal; } var allMoods = Mood.All().ToList(); var lastSnapshot = GenerateEmptyMoodList(allMoods); var lastSnapshotAdded = dayStart; //var days = (float)reportEndLocal.Date.Subtract (reportStartLocal.Date).Days + 1; var dayIndex = 0; while (dayStart < reportEndLocal) { var imageFrame = new RectangleF(0f, 0f, renderLevel.DayImageWidth, renderLevel.DayImageHeight); var imager = new GlobalMoodMapImager(dayStart, dayEnd); bool lastAdded = false; var snapshots = Snapshot.OrderedList("TimeOfSnapshotLocal", "MoodReport.Id = @ReportId and TimeOfSnapshotLocal >= @Start and TimeOfSnapshotLocal <= @End", new { ReportId = report.Id, Start = lastSnapshotAdded, End = dayEnd }).ToList(); var addedFirst = false; foreach (var snapshot in snapshots) { if (snapshot.TimeOfSnapshotLocal < dayStart) { lastSnapshot = GetMoods(snapshot); } else { if (!addedFirst && dayStart <= finalSnapshotTime) { addedFirst = true; if (snapshot.TimeOfSnapshotLocal != dayStart) { if (dayStart == finalSnapshotTime) { lastAdded = true; } imager.AddSnapshot(dayStart, lastSnapshot, lastAdded); lastSnapshotAdded = dayStart; } } if (!lastAdded && snapshot.TimeOfSnapshotLocal <= finalSnapshotTime && snapshot.TimeOfSnapshotLocal <= dayEnd) { //if last snapshot more than 10 mins ago then add a pre-datapoint using last snapshot data if (snapshot.TimeOfSnapshotLocal.Subtract(lastSnapshotAdded).TotalMinutes > 10) { imager.AddSnapshot(snapshot.TimeOfSnapshotLocal.AddMinutes(-10), lastSnapshot, false); } if (snapshot.TimeOfSnapshotLocal == finalSnapshotTime) { lastAdded = true; } lastSnapshot = GetMoods(snapshot); imager.AddSnapshot(snapshot.TimeOfSnapshotLocal, lastSnapshot, lastAdded); lastSnapshotAdded = snapshot.TimeOfSnapshotLocal; } } } //always make sure there is a snapshot at the start of the day if (!addedFirst) { addedFirst = true; imager.AddSnapshot(dayStart, lastSnapshot, lastAdded); lastSnapshotAdded = dayStart; } if (!lastAdded && lastSnapshot != null && lastSnapshotAdded < dayEnd) { if (dayStart.AddDays(1) > reportEndLocal) { imager.AddSnapshot(finalSnapshotTime, lastSnapshot, true); lastSnapshotAdded = finalSnapshotTime; } else { imager.AddSnapshot(dayEnd, lastSnapshot, false); lastSnapshotAdded = dayEnd; } } using (var img = imager.DrawMapImage(imageFrame)){ string filename = Path.Combine(imagesFolder, GetDayImageFileName(renderLevel, dayIndex)); NSError err; img.AsPNG().Save(filename, true, out err); } Console.WriteLine("Image drawn"); dayStart = dayStart.AddDays(1); dayEnd = dayEnd.AddDays(1); if (dayEnd > reportEndLocal) { dayEnd = reportEndLocal; } dayIndex++; } Console.WriteLine("Images generated"); } }
protected void SetCurrentReport(MoodReport report) { this.CurrentReport = report; this.ReportStartLocal = ReportManager.GetReportStartLocal(report); this.ReportEndLocal = ReportManager.GetReportEndLocal(report); }
public static DateTime GetReportEndLocal(MoodReport report) { return(report.EndsOnLocal.Date.Add(DayEndTime)); }