public virtual ViewResult Details(string EventName, string id) { var now = DateTime.UtcNow.AddMinutes(1); e = GetEvent(EventName); mp = e.MoodPrompts.FirstOrDefault(x => mp.Id == new Guid(id)); if (mp == null) { return(View()); } var model = new MoodPromptModel() { Id = mp.Id.ToString(), Name = mp.Name, Activity = new ActivityModel() { Id = mp.Activity.Id, Title = mp.Activity.Title, TimeStamp = mp.Activity.TimeStampLocal }, NotificationText = mp.NotificationText, ActiveFrom = mp.ActiveFromLocal, ActiveTil = mp.ActiveTilLocal, CanDelete = now < mp.Activity.TimeStamp }; return(View(model)); }
void SyncDataAndNotifications() { //check before so can get latest update if reset CheckForGoLive(); Console.WriteLine("SyncDataAndNotificationss"); NotifySyncing(); ServiceSyncStatus status = MyMoodService.Current.SyncDataWithServer(); NotifySyncComplete(status); string version = NSBundle.MainBundle.ObjectForInfoDictionary("Version").ToString(); if (version != ApplicationState.Current.CurrentVersion && ApplicationState.Current.ForceUpdate > 0) { InvokeOnMainThread(delegate { NSNotificationCenter.DefaultCenter.PostNotificationName("ForceVersionUpdate", null); }); } if (status.HasPromptUpdates) { InvokeOnMainThread(delegate { Console.WriteLine("Has Prompt Updates"); NotificationManager.SyncNotificationsWithPrompts(MoodPrompt.All()); ShowBadgeNumber(); NSNotificationCenter.DefaultCenter.PostNotificationName("PromptsUpdated", null); }); } //check if go live has been set CheckForGoLive(); }
private void NavigateToSetMyMood(MoodPrompt currentPrompt) { if (currentPrompt == null) { currentPrompt = MoodPrompt.GetCurrentPrompt(); } SetMyMoodViewController setMoodVC = new SetMyMoodViewController(); setMoodVC.CurrentPrompt = currentPrompt == null || currentPrompt.Response.Mood != null ? null : currentPrompt; this.NavigationController.PushViewController(setMoodVC, true); }
// private void ShowHelp () // { // MoodHelpOverlayView helpView = new MoodHelpOverlayView (this); // helpView.show (); // } protected void DetermineState() { Console.WriteLine("Determin state"); var app = ApplicationState.Current; string version = NSBundle.MainBundle.ObjectForInfoDictionary("Version").ToString(); if (app.CurrentVersion != version && app.ForceUpdate > 0) { this.NavigateToUpdateApp(); } else { UpdateBtn.Hidden = app.CurrentVersion == version; if (string.IsNullOrWhiteSpace(app.ResponderRegion)) { NavigateToSetMyLocation(); } else { if (!string.IsNullOrWhiteSpace(this.promptID)) { var targetPrompt = MoodPrompt.List().FirstOrDefault(p => p.Id == promptID); this.promptID = null; NavigateToSetMyMood(targetPrompt); } else if (app.RunningMode == RunningMode.FirstUse) { if (!_introductionShown) { _introductionShown = true; NavigateToIntroduction(); } else { _introductionShown = false; NavigateToSetMyMood(null); } } else { if (EnteredViaRemoteNotification) { EnteredViaRemoteNotification = false; NavigateToSetMyMood(null); } else { Refresh(); } } } } }
public void Refresh() { var prompts = MoodPrompt.GetOutstandingPrompts().OrderBy(p => p.TimeStamp).ToList(); this.UnrespondedPrompts = prompts.Count(); this.TargetPrompt = prompts.LastOrDefault(); this.BuildNotification(); //if (lastCount != this.UnrespondedPrompts) this.AnimateOut(true); this.AnimateOut(true); }
public static void CancelLocalNotification(MoodPrompt prompt) { if (prompt != null) { foreach (var n in UIApplication.SharedApplication.ScheduledLocalNotifications) { var val = n.UserInfo.ObjectForKey(NSObject.FromObject("PromptId")); if (val.ToString() == prompt.Id) { UIApplication.SharedApplication.CancelLocalNotification(n); } } } }
public AddResponseColumnView(int columnIndex, MoodPrompt currentPrompt) : base(columnIndex) { this.CurrentPrompt = currentPrompt; this.backgroundImage.Image = Resources.AddNode; this.addResponseBtn = new UIButton(new RectangleF(20, 228, 100, 100)); this.addResponseBtn.TouchUpInside += (object sender, EventArgs e) => { AddMood(); }; this.addResponseBtn.Enabled = true; this.Add(addResponseBtn); }
public void SnapToPrompt(MoodPrompt prompt) { if (this.timelineColumns == null) { Refresh(); } var promptCol = this.timelineColumns.OfType <MoodPromptColumnView> ().FirstOrDefault(c => c.Prompt.Id == prompt.Id); if (promptCol != null) { // translate index so prompt appears in center if poss var pageIndex = promptCol.ColumnIndex - 3; this.SnapToPage(pageIndex > 0 ? pageIndex : 0, true); } }
public MoodPromptColumnView (int columnIndex, MoodPrompt prompt) : base(columnIndex) { this.Prompt = prompt; this.backgroundImage.Image = Resources.PromptedNode; this.addResponseBtn = new UIButton(new RectangleF(32,240,74,74)); this.addResponseBtn.TouchUpInside += (object sender, EventArgs e) => { AddMood(); }; this.addResponseBtn.Enabled = true; this.Add(addResponseBtn); this.ShowTitle(); }
protected void SyncPrompts(IEnumerable <MoodPromptModel> prompts) { if (prompts != null) { var delete = MoodPrompt.List().Where(mp => !prompts.Any(p => p.Id == mp.Id)).ToList(); foreach (var p in delete) { var r = p.Response; if (p.Response.Mood == null) { r.Delete(); } else { r.Prompt = null; r.Save(); } p.Delete(); } foreach (var p in prompts) { MoodPrompt prompt = MoodPrompt.ReadSafe(p.Id); if (prompt == null) { prompt = MoodPrompt.New(); prompt.Id = p.Id.ToString(); prompt.Save(); MoodResponse response = MoodResponse.New(); response.Id = System.Guid.NewGuid().ToString(); response.Prompt = prompt; response.TimeStamp = p.Activity.TimeStamp; response.Save(); } prompt.Name = p.Name; prompt.NotificationText = p.NotificationText; prompt.Title = p.Activity.Title; prompt.TimeStamp = p.Activity.TimeStamp; prompt.ActiveFrom = p.ActiveFrom; prompt.ActiveTil = p.ActiveTil; prompt.Response.TimeStamp = prompt.TimeStamp; prompt.Response.Save(); prompt.Save(); } } }
public virtual ActionResult Delete(Guid id, Guid eventId) { try { e = GetEvent(eventId); mp = e.MoodPrompts.Where(x => x.Id == id).First(); db.Remove(mp.Activity); db.Remove(mp); db.SaveChanges(); return(Json(new { success = true })); } catch (Exception ex) { return(Json(new { success = false, errorMessage = ex.Message })); } }
protected string GetDetail(MoodPrompt prompt) { JObject promptJson = JObject.FromObject(new MoodPromptModel() { Id = prompt.Id, Name = prompt.Name, NotificationText = prompt.NotificationText, ActiveFrom = prompt.ActiveFrom, ActiveTil = prompt.ActiveTil, Activity = new ActivityModel() { Title = prompt.Title, TimeStamp = prompt.TimeStamp } }); return(promptJson.ToString()); }
public virtual ActionResult Save(EditMoodPromptModel model) { if (ModelState.IsValid) { try { MoodPrompt mp; var e = GetEvent(model.EventId); if (model.Id == Guid.Empty) { mp = e.AddMoodPrompt(model.Name, model.Activity.Title, model.NotificationText, model.Activity.TimeStamp.FullDate, model.ActiveFrom.FullDate, model.ActiveTil.FullDate); } else { mp = e.MoodPrompts.Where(x => x.Id == model.Id).First(); mp.Name = model.Name; mp.Activity.Title = model.Activity.Title; mp.Activity.TimeStamp = model.Activity.TimeStamp.FullDate; mp.NotificationText = model.NotificationText; mp.ActiveFrom = model.ActiveFrom.FullDate; mp.ActiveTil = model.ActiveTil.FullDate; mp.ConvertAllToUTC(); } db.SaveChanges(); } catch (Exception ex) { ModelState.AddModelError(string.Empty, ex.Message); } } return(ModelState.IsValid ? Json(new { success = true }) : Json(new { success = false, formWithErrorMessages = this.RenderPartialViewToString(MVC.MoodPrompt.Views.Edit, model) })); }
public static void ScheduleLocalNotification(MoodPrompt prompt) { if (prompt != null) { var keys = new object[] { "PromptId" }; var objects = new object[] { prompt.Id }; var userInfo = NSDictionary.FromObjectsAndKeys(objects, keys); var fireDate = DateTime.SpecifyKind(prompt.ActiveFrom, DateTimeKind.Utc); UILocalNotification notification = new UILocalNotification { FireDate = fireDate.ToLocalTime().ToNSDate(), TimeZone = NSTimeZone.FromName("UTC"), AlertBody = prompt.NotificationText, RepeatInterval = 0, AlertAction = "Set my mood", UserInfo = userInfo }; UIApplication.SharedApplication.ScheduleLocalNotification(notification); } }
void newPromptBackgroundRecieved(NSDictionary n) { UIView topView = this.NavigationController.TopViewController.View; //If we are already displaying a setmy mood then return if (topView.Tag == 1001) { return; //currentViewController.NavigationController.PopViewControllerAnimated(true); } Console.WriteLine("newPromptBackground {0}", n); //this.appAlert("New Prompt from notification"); NSString pId = new NSString("userInfo.PromptId"); var id = n.ValueForKeyPath(new NSString("userInfo.PromptId")) ?? n.ValueForKeyPath(new NSString("PromptId")); if (id != null) { this.NavigateToSetMyMood(MoodPrompt.List().FirstOrDefault(p => p.Id.Equals(id.ToString(), StringComparison.InvariantCultureIgnoreCase))); } }
public virtual ActionResult Edit(string EventName, Guid id) { try { e = GetEvent(EventName); mp = e.MoodPrompts.Where(x => x.Id == id).First(); } catch (Exception) { throw new HttpException(404, "Mood Prompt not found"); } var model = new EditMoodPromptModel() { Id = mp.Id, EventId = e.Id, Name = mp.Name, Activity = new EditActivityModel() { Id = mp.Activity.Id, Title = mp.Activity.Title, TimeStamp = new ModelTime { Date = mp.Activity.TimeStampLocal } }, NotificationText = mp.NotificationText, ActiveFrom = new ModelTime { Date = mp.ActiveFromLocal }, ActiveTil = new ModelTime { Date = mp.ActiveTilLocal } }; return(PartialView(model)); }
public MoodPromptEventArgs(MoodPrompt prompt) : base() { this.MoodPrompt = prompt; }
protected string GetTitle(MoodPrompt prompt) { return(string.Format("{0} :: {1}", prompt.TimeStamp.ToLocalTime().ToString("dd MMM yyyy H:mm:ss"), prompt.Title)); }
public MoodPromptTableSource() : base() { this._MoodPrompts = MoodPrompt.All().OrderByDescending(l => l.ActiveFrom).ToList(); }
public AddNewResponseEventArgs(MoodPrompt currentPrompt) : base() { this.CurrentPrompt = currentPrompt; }
private void SetMyMood() { Console.WriteLine("Set my mood"); var mood = Mood.Read(currentMood.Id); Console.WriteLine("Setting my mood to " + mood.Name); MoodResponse response = MoodResponse.New(); if (CurrentPrompt == null) { response.Id = System.Guid.NewGuid().ToString(); response.TimeStamp = DateTime.UtcNow; } else { response = CurrentPrompt.Response; } response.Mood = mood; response.CreatedOn = DateTime.UtcNow; response.Save(); Console.WriteLine("Mood response saved"); var app = ApplicationState.Current; if (app.RunningMode != RunningMode.Normal) { app.RunningMode = RunningMode.Normal; app.Save(); } MyMoodLogger.Current.Log("Mood Response - " + mood.Name, CurrentPrompt == null ? "No prompt" : "Prompt: " + CurrentPrompt.Title, 2); //NSNotificationCenter.DefaultCenter.PostNotificationName("SyncDataAndNotifications",null); Console.WriteLine("Lets create a thread for pushing response"); System.Threading.Tasks.Task.Factory.StartNew(() => { //NSTimer.CreateScheduledTimer (5, delegate { Console.WriteLine("Submit response to server"); MyMoodService.Current.SubmitMoodResponse(response); Console.WriteLine("Mood response submitted"); //}); }); if (CurrentPrompt != null) { Console.WriteLine("Cancel notification"); //if we have gone vie the timeline then we need to cancel the prompt so the user doesn't select it again from the notification drop down NotificationManager.CancelLocalNotification(CurrentPrompt); Console.WriteLine("Update badge numbers"); //decrease mood prompt badges UIApplication.SharedApplication.ApplicationIconBadgeNumber = MoodPrompt.GetOutstandingPrompts().Count(); //UIApplication.SharedApplication.ApplicationIconBadgeNumber = UIApplication.SharedApplication.ApplicationIconBadgeNumber -1; } CurrentPrompt = null; Console.WriteLine("Done with setting mood - navigate back"); this.NavigationController.PopViewControllerAnimated(true); }
// void appAlert (string name) // { // UIAlertView alert = new UIAlertView ("My Mood Notification", name, null, "OK", null); // alert.Show (); // } private void AddNewMood(MoodPrompt currentPrompt) { this.outstandingPromptsView.Hide(); this.NavigateToSetMyMood(currentPrompt); }
private void ShowBadgeNumber() { UIApplication.SharedApplication.ApplicationIconBadgeNumber = MoodPrompt.GetOutstandingPrompts().Count(); }
private void GenerateTimelineColumns() { Console.WriteLine("Generating timeline"); //Console.WriteLine("Get current prompt"); var currentPrompt = MoodPrompt.GetCurrentPrompt(); //Console.WriteLine("Get unprompted responses"); var responses = MoodResponse.OrderedList("TimeStamp", "TimeStamp <= @Now", new{ Now = DateTime.UtcNow }).ToList(); //Console.WriteLine("Got responses"); timelineColumns = new List <TimelineColumnView> (); int index = 0; StartDate = responses.Any() ? responses.First().TimeStamp.ToLocalTime(ApplicationState.Current.EventTimeOffset).Date : DateTime.UtcNow.ToLocalTime(ApplicationState.Current.EventTimeOffset).Date; var date = StartDate; timelineColumns.Add(new DayMarkerColumnView(index, StartDate, 1)); index++; foreach (var i in responses) { //Console.WriteLine("Add column - " + i.TimeStamp.ToString()); if (i.TimeStamp.Date > date) { date = i.TimeStamp.Date; var dayIndex = date.Subtract(StartDate).Days + 1; timelineColumns.Add(new DayMarkerColumnView(index, date, dayIndex)); } if (i.Mood == null) { if (i.Prompt != null) { var respondToPromptCol = new MoodPromptColumnView(index, i.Prompt); respondToPromptCol.AddNewMood += (object sender, AddNewResponseEventArgs e) => { if (this.AddNewMood != null) { AddNewMood(sender, e); } }; timelineColumns.Add(respondToPromptCol); } } else { timelineColumns.Add(new MoodResponseColumnView(index, i)); } index++; } var addNewMoodCol = new AddResponseColumnView(index, currentPrompt == null ? null : currentPrompt); addNewMoodCol.AddNewMood += (object sender, AddNewResponseEventArgs e) => { if (this.AddNewMood != null) { AddNewMood(sender, e); } }; timelineColumns.Add(addNewMoodCol); Console.WriteLine("Timline columns done"); }
public JumpToPromptEventArgs(MoodPrompt prompt) : base() { this.Prompt = prompt; }