Skip to content Skip to sidebar Skip to footer

Cordova Calendar Plugin For Windows Phone 8

I am looking for a cordova plugin to add events to Windows Phone 8 calendar. There is no plugin on cordova plugin registry. My workaround was to write native plugin- public void ad

Solution 1:

Where have you stated the success callback ? According to me the code in your js should be -

cordova.exec(successCallback, failureCallback, 'AddCalendarEvents', 'addCalendarEvents', inputCalendarString);

functionsuccessCallback(success){
     console.log('Success');
 }

 functionfailureCallback(error){
     console.log('Failure');
 }

Also, you'll need a DispatcherCommandResult in your .cs file to return the callback.

Solution 2:

Use the following plugin that allows for adding of events to the native Windows Phone calendar https://github.com/faGH/fa-plugin-calendar

Solution 3:

Create a new cs file in plugins directory named AddCalendarEvents.cs and add following code-

using Microsoft.Phone.Tasks;
using Microsoft.Phone.UserData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WPCordovaClassLib.Cordova;
using WPCordovaClassLib.Cordova.Commands;
using WPCordovaClassLib.Cordova.JSON;

namespaceCordova.Extension.Commands {
    publicclassAddCalendarEvents: BaseCommand {
        publicvoidaddCalendarEvents(String str) {
            string[] calendarValues = str.Split('|');

            SaveAppointmentTask saveAppointmentTask = new SaveAppointmentTask();

            int appointmentYear = Int32.Parse(calendarValues[3]);
            int appointmentMonth = Int32.Parse(calendarValues[4]);
            int appointmentDate = Int32.Parse(calendarValues[5]);
            float appointmentTime = float.Parse(calendarValues[6]);

            DateTime scheduleApptDateStart = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 0, 0)).AddHours(appointmentTime);
            DateTime scheduleApptDateEnd = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 30, 0)).AddHours(appointmentTime);
            saveAppointmentTask.StartTime = scheduleApptDateStart;
            saveAppointmentTask.EndTime = scheduleApptDateEnd;
            saveAppointmentTask.Subject = calendarValues[1];
            saveAppointmentTask.Location = calendarValues[2];
            saveAppointmentTask.Details = "";
            saveAppointmentTask.IsAllDayEvent = false;
            saveAppointmentTask.Reminder = Reminder.FifteenMinutes;
            saveAppointmentTask.AppointmentStatus = Microsoft.Phone.UserData.AppointmentStatus.Busy;
            saveAppointmentTask.Show();
        }

        publicvoidgetCalendarEventData(String str) {
            ButtonAppointments_Click();
        }

        privatevoidButtonAppointments_Click() {
            Appointments appts = new Appointments();

            //Identify the method that runs after the asynchronous search completes.
            appts.SearchCompleted += new EventHandler < AppointmentsSearchEventArgs > (Appointments_SearchCompleted);

            DateTime start = DateTime.Now;
            DateTime end = start.AddDays(7);
            int max = 20;

            //Start the asynchronous search.
            appts.SearchAsync(start, end, max, "Appointments Test #1");
        }

        voidAppointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e) {
            //Do something with the results.//MessageBox.Show(e.Results.Count().ToString());try {
                e.Results.ToList();
                MessageBox.Show("Success");
            } catch (System.Exception) {}

        }
    }
}

Refer plugin in config.xml-

<featurename="AddCalendarEvents"><paramname="wp-package"value="AddCalendarEvents" /><paramname="onload"value="true" /></feature>

You can call it using

var inputCalendarString = notes + '|' + title + '|' + location + '|' + appointmentDate.getFullYear() + '|' + (appointmentDate.getMonth() + 1) + '|' + appointmentDate.getDate() + '|' + '1.0' + '|' + ' ';
cordova.exec(null, null, "AddCalendarEvents", "addCalendarEvents", inputCalendarString);

It works for one event but if you have loop of events it will not work. To support multiple events, you can maintain Localstorage flag & data with current index of events data. Use resume callback to add rest of the events using custom appointment plugin that you wrote. Each time your app resumes you increment index and add events data from next index.

document.addEventListener('resume', this.resumeApp, false)
resumeApp: function () {
if (localStorage.getItem('updatecalendar') == 'false') {
syncUpdatedCalendarWP8();
      }
}

Reference

Post a Comment for "Cordova Calendar Plugin For Windows Phone 8"