示例#1
0
        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));
        }
示例#2
0
        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();
        }
示例#3
0
        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);
        }
示例#4
0
//		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();
                        }
                    }
                }
            }
        }
示例#5
0
        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);
        }
示例#6
0
 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);
             }
         }
     }
 }
示例#7
0
        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);
        }
示例#8
0
        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);
            }
        }
示例#9
0
		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();
		}
示例#10
0
        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();
                }
            }
        }
示例#11
0
        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 }));
            }
        }
示例#12
0
        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());
        }
示例#13
0
        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) }));
        }
示例#14
0
        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);
            }
        }
示例#15
0
        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)));
            }
        }
示例#16
0
        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));
        }
示例#17
0
 public MoodPromptEventArgs(MoodPrompt prompt) : base()
 {
     this.MoodPrompt = prompt;
 }
示例#18
0
 protected string GetTitle(MoodPrompt prompt)
 {
     return(string.Format("{0} :: {1}", prompt.TimeStamp.ToLocalTime().ToString("dd MMM yyyy H:mm:ss"), prompt.Title));
 }
示例#19
0
 public MoodPromptTableSource() : base()
 {
     this._MoodPrompts = MoodPrompt.All().OrderByDescending(l => l.ActiveFrom).ToList();
 }
示例#20
0
 public AddNewResponseEventArgs(MoodPrompt currentPrompt) : base()
 {
     this.CurrentPrompt = currentPrompt;
 }
示例#21
0
        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);
        }
示例#22
0
//		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);
        }
示例#23
0
 private void ShowBadgeNumber()
 {
     UIApplication.SharedApplication.ApplicationIconBadgeNumber = MoodPrompt.GetOutstandingPrompts().Count();
 }
示例#24
0
        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");
        }
示例#25
0
 public JumpToPromptEventArgs(MoodPrompt prompt) : base()
 {
     this.Prompt = prompt;
 }