//General Delete Reminder Event public static async Task <bool> DeleteReminder(ReminderReadModel reminderModel) { CalendarEvent calendarEvent; var calendar = await CheckCalendarExistanceAndCreation("Petminder", "Petminder"); AppDataReadWrite dataWriter = new AppDataReadWrite("Reminders.json"); var strLocalReminders = dataWriter.ReadStringFromFile(); var localReminders = JsonConvert.DeserializeObject <List <LocalReminderModel> >(strLocalReminders); if (localReminders != null) { var reminderToDelete = localReminders.FirstOrDefault(p => p.databaseId == reminderModel.Id); if (reminderToDelete != null) { //Remove from local storage json file first since sync process will clean up if the delete process is interrupted localReminders.RemoveAll(p => p.databaseId == reminderModel.Id); dataWriter.WriteStringToFile(JsonConvert.SerializeObject(localReminders)); foreach (string externalId in reminderToDelete.calendarIds) { calendarEvent = await CrossCalendars.Current.GetEventByIdAsync(externalId); if (calendarEvent != null) { await CrossCalendars.Current.DeleteEventAsync(calendar, calendarEvent); } } } } return(true); }
private async void ShowReminderModalPage(ReminderReadModel Reminder) { //Add handler for modal return Application.Current.ModalPopping += HandleModalPopping; _AddReminderModal = new AddReminder(Reminder); await Navigation.PushModalAsync(_AddReminderModal); }
//For use elsewhere public static async Task <string> AddReminderToCalendar(ReminderReadModel reminderModel) { var calendar = await CheckCalendarExistanceAndCreation("Petminder", "Petminder"); var start = reminderModel.StartDate + reminderModel.TimeLocal.TimeOfDay; var end = reminderModel.StartDate + reminderModel.TimeLocal.TimeOfDay + TimeSpan.FromMinutes(15); var id = await AddReminderToCalendar(reminderModel, calendar, start, end); LocalReminderModel localReminderModel = new LocalReminderModel(); localReminderModel.calendarIds.Add(id); localReminderModel.databaseId = reminderModel.Id; AppendToReminderToLocal(localReminderModel); return(id); }
//Interal Class method, does that actual work of adding to calendar private static async Task <string> AddReminderToCalendar(ReminderReadModel reminderModel, Calendar calendar, DateTime start, DateTime end) { CalendarEvent calendarEvent = new CalendarEvent(); CalendarEventReminder reminder = new CalendarEventReminder(); calendarEvent.Name = reminderModel.Name; calendarEvent.Description = reminderModel.Message; calendarEvent.Start = start; calendarEvent.End = end; reminder.Method = CalendarReminderMethod.Alert; reminder.TimeBefore = TimeSpan.FromMinutes(15); IList <CalendarEventReminder> reminderList = new List <CalendarEventReminder>(); reminderList.Add(reminder); calendarEvent.Reminders = reminderList; await CrossCalendars.Current.AddOrUpdateEventAsync(calendar, calendarEvent); var returnList = await CrossCalendars.Current.GetEventsAsync(calendar, start, end); return(returnList[0].ExternalID.ToString()); }
public AddReminder(ReminderReadModel reminderModel) { InitializeComponent(); //List<Types> types = new List<Types>(); //types.Add(new Types(0, "Appointment")); //types.Add(new Types(1, "Medicine")); //types.Add(new Types(2, "Exercise")); //IList<Types> source = types; submitReminder.Clicked += SubmitReminder_Clicked; TypePicker.Items.Add("Appointment"); TypePicker.Items.Add("Medicine"); TypePicker.Items.Add("Exercise"); TypePicker.Items.Add("Other"); TypePicker.SelectedIndex = 0; Frequency.Items.Add("Daily"); Frequency.Items.Add("Weekly"); Frequency.Items.Add("Monthly"); //PetId = pet.Id; SetFrequencyVisible(); if (reminderModel != null) { _update = true; Name.Text = reminderModel.Name; Message.Text = reminderModel.Message; Repeat.IsToggled = reminderModel.Repeat; TypePicker.SelectedItem = reminderModel.Type; StartDate.Date = reminderModel.StartDate; Time.Time = reminderModel.TimeLocal.TimeOfDay; id = reminderModel.Id; } }
public static async Task <bool> AddRepeatingReminderToCalendar(ReminderReadModel reminderModel) { try { var calendar = await CheckCalendarExistanceAndCreation("Petminder", "Petminder"); var frequency = reminderModel.Frequency; DateTime dateTime; List <string> externalIds = new List <string>(); string externalId; LocalReminderModel localReminderModel = new LocalReminderModel(); dateTime = reminderModel.StartDate + reminderModel.TimeLocal.TimeOfDay; if (frequency == "Daily") { var loopcount = DateTime.IsLeapYear(reminderModel.StartDate.Year) ? 366 : 365; for (int i = 0; i < loopcount; i++) { externalId = await AddReminderToCalendar(reminderModel, calendar, dateTime, dateTime + TimeSpan.FromMinutes(15)); dateTime = dateTime.AddDays(1); externalIds.Add(externalId); } } else if (frequency == "Weekly") { var loopcount = 52; for (int i = 0; i < loopcount; i++) { externalId = await AddReminderToCalendar(reminderModel, calendar, dateTime, dateTime + TimeSpan.FromMinutes(15)); dateTime = dateTime.AddDays(7); externalIds.Add(externalId); } } else if (frequency == "Monthly") { var loopcount = 12; for (int i = 0; i < loopcount; i++) { externalId = await AddReminderToCalendar(reminderModel, calendar, dateTime, dateTime + TimeSpan.FromMinutes(15)); dateTime = dateTime.AddMonths(1); externalIds.Add(externalId); } } localReminderModel.databaseId = reminderModel.Id; localReminderModel.calendarIds = externalIds; AppendToReminderToLocal(localReminderModel); } catch { return(false); } return(true); }
private async void SubmitReminder_Clicked(object sender, EventArgs e) { RestClient client = new RestClient(); HttpResponseMessage response = new HttpResponseMessage(); ReminderCreateModel reminderModel = new ReminderCreateModel(); reminderModel.Name = Name.Text; reminderModel.Message = Message.Text; reminderModel.Repeat = Repeat.IsToggled; reminderModel.AccountId = UserInfo.AccountId; reminderModel.Complete = false; reminderModel.Type = TypePicker.SelectedItem.ToString(); //Since this object is just a string this is ok reminderModel.StartDate = StartDate.Date; reminderModel.Time = DateTime.Today.ToLocalTime() + Time.Time; //Converting to local to add time offset if (string.IsNullOrEmpty(reminderModel.Name)) { await ValidationAlert(nameof(Name)); return; } if (string.IsNullOrEmpty(reminderModel.Message)) { await ValidationAlert(nameof(Message)); return; } if (reminderModel.Repeat) { reminderModel.Frequency = Frequency.SelectedItem.ToString(); } ActivityIndicatorToggle(true); Device.BeginInvokeOnMainThread(async() => { var body = JsonConvert.SerializeObject(reminderModel); if (_update) { response = client.Put("api/reminders", id, UserInfo.Token, body); } else { response = client.Post("api/reminders", "", UserInfo.Token, body); } if (response.StatusCode == System.Net.HttpStatusCode.Created) { ReminderReadModel createdReminder = JsonConvert.DeserializeObject <ReminderReadModel>(response.Content.ReadAsStringAsync().Result); if (reminderModel.Repeat == false) { await PetminderApp.Reminders.Reminders.AddReminderToCalendar(createdReminder); } else { await PetminderApp.Reminders.Reminders.AddRepeatingReminderToCalendar(createdReminder); } await Navigation.PopModalAsync(); } else if (response.StatusCode == System.Net.HttpStatusCode.NoContent) { var readResponse = client.Get($"api/reminders/{id}", UserInfo.Token); if (readResponse.IsSuccessStatusCode) { var updatedReminder = JsonConvert.DeserializeObject <ReminderReadModel>(readResponse.Content.ReadAsStringAsync().Result); if (updatedReminder.Repeat == false) { await PetminderApp.Reminders.Reminders.DeleteReminder(updatedReminder); await PetminderApp.Reminders.Reminders.AddReminderToCalendar(updatedReminder); } else { await PetminderApp.Reminders.Reminders.DeleteReminder(updatedReminder); await PetminderApp.Reminders.Reminders.AddRepeatingReminderToCalendar(updatedReminder); } } await Navigation.PopModalAsync(); } else { if (_update) { await DisplayAlert("Update Error", "Please try again", "Ok"); } else { await DisplayAlert("Creation Error", "Please try again", "Ok"); } } }); }