nativescript-calendar
Version:
Interact with the native calendar. Add, Update, Read, you name it.
538 lines (537 loc) • 27.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteCalendar = exports.createEvent = exports.deleteEvents = exports.findEvents = exports.listCalendars = exports.requestPermission = exports.hasPermission = void 0;
var core_1 = require("@nativescript/core");
var calendar_common_1 = require("./calendar-common");
var PERMISSION_REQUEST_CODE = 2222;
var ActivityCompatPackageName = useAndroidX() ? global.androidx.core.app : android.support.v4.app;
var ContextCompatPackageName = useAndroidX() ? global.androidx.core.content : android.support.v4.content;
function useAndroidX() {
return global.androidx && global.androidx.appcompat;
}
calendar_common_1.Calendar._fields = {
EVENT_ID: android.provider.CalendarContract.Instances.EVENT_ID,
CALENDAR: {
ID: "calendar_id",
NAME: "calendar_displayName",
TYPE: "calendar_type"
},
TITLE: "title",
MESSAGE: "description",
LOCATION: "eventLocation",
STARTDATE: "dtstart",
ENDDATE: "dtend",
BEGIN: "begin",
END: "end",
ALLDAY: "allDay",
TIMEZONE: "eventTimezone",
HAS_ALARM: "hasAlarm",
RRULE: "rrule"
};
calendar_common_1.Calendar._remindersFields = {
ID: android.provider.CalendarContract.Reminders._ID,
EVENT_ID: android.provider.CalendarContract.Reminders.EVENT_ID,
MINUTES: "minutes",
METHOD: "method"
};
calendar_common_1.Calendar._attendeesFields = {
EVENT_ID: android.provider.CalendarContract.AttendeesColumns.EVENT_ID,
ATTENDEE_NAME: android.provider.CalendarContract.AttendeesColumns.ATTENDEE_NAME,
ATTENDEE_EMAIL: android.provider.CalendarContract.AttendeesColumns.ATTENDEE_EMAIL,
ATTENDEE_TYPE: android.provider.CalendarContract.AttendeesColumns.ATTENDEE_TYPE,
ATTENDEE_STATUS: android.provider.CalendarContract.AttendeesColumns.ATTENDEE_STATUS
};
(function () {
core_1.Application.android.on(core_1.AndroidApplication.activityRequestPermissionsEvent, function (args) {
if (args.requestCode !== PERMISSION_REQUEST_CODE) {
return;
}
for (var i = 0; i < args.permissions.length; i++) {
if (args.grantResults[i] === android.content.pm.PackageManager.PERMISSION_DENIED) {
calendar_common_1.Calendar._reject("Please allow access to the Calendar and try again.");
return;
}
}
if (calendar_common_1.Calendar._onPermissionGranted) {
calendar_common_1.Calendar._onPermissionGranted();
}
else {
console.log("No after-permission callback function specified for requestCode " + args.requestCode + ". That's a bug in the nativescript-calendar plugin, please report it!");
}
});
})();
calendar_common_1.Calendar._hasPermission = function (perms) {
if (android.os.Build.VERSION.SDK_INT < 23) {
return true;
}
for (var _i = 0, perms_1 = perms; _i < perms_1.length; _i++) {
var permission = perms_1[_i];
if (android.content.pm.PackageManager.PERMISSION_GRANTED !== ContextCompatPackageName.ContextCompat.checkSelfPermission(core_1.Utils.ad.getApplicationContext(), permission)) {
return false;
}
}
return true;
};
calendar_common_1.Calendar._hasReadPermission = function () {
return calendar_common_1.Calendar._hasPermission([android.Manifest.permission.READ_CALENDAR]);
};
calendar_common_1.Calendar._hasWritePermission = function () {
return calendar_common_1.Calendar._hasPermission([android.Manifest.permission.WRITE_CALENDAR]);
};
calendar_common_1.Calendar._hasReadWritePermission = function () {
return calendar_common_1.Calendar._hasPermission([android.Manifest.permission.READ_CALENDAR, android.Manifest.permission.WRITE_CALENDAR]);
};
calendar_common_1.Calendar._requestPermission = function (permissions, onPermissionGranted, reject) {
calendar_common_1.Calendar._onPermissionGranted = onPermissionGranted;
calendar_common_1.Calendar._reject = reject;
ActivityCompatPackageName.ActivityCompat.requestPermissions(core_1.Application.android.foregroundActivity, permissions, PERMISSION_REQUEST_CODE);
};
calendar_common_1.Calendar._requestReadPermission = function (onPermissionGranted, reject) {
calendar_common_1.Calendar._requestPermission([android.Manifest.permission.READ_CALENDAR], onPermissionGranted, reject);
};
calendar_common_1.Calendar._requestWritePermission = function (onPermissionGranted, reject) {
calendar_common_1.Calendar._requestPermission([android.Manifest.permission.WRITE_CALENDAR], onPermissionGranted, reject);
};
calendar_common_1.Calendar._requestReadWritePermission = function (onPermissionGranted, reject) {
calendar_common_1.Calendar._requestPermission([android.Manifest.permission.READ_CALENDAR, android.Manifest.permission.WRITE_CALENDAR], onPermissionGranted, reject);
};
function hasPermission(arg) {
return new Promise(function (resolve, reject) {
try {
resolve(calendar_common_1.Calendar._hasPermission([android.Manifest.permission.READ_CALENDAR, android.Manifest.permission.WRITE_CALENDAR]));
}
catch (ex) {
console.log("Error in Calendar.hasPermission: " + ex);
reject(ex);
}
});
}
exports.hasPermission = hasPermission;
function requestPermission() {
return new Promise(function (resolve, reject) {
try {
calendar_common_1.Calendar._requestPermission([android.Manifest.permission.READ_CALENDAR, android.Manifest.permission.WRITE_CALENDAR], resolve, reject);
}
catch (ex) {
console.log("Error in Calendar.requestPermission: " + ex);
reject(ex);
}
});
}
exports.requestPermission = requestPermission;
calendar_common_1.Calendar._findCalendars = function (filterByName) {
var projection = [
"_id",
"name",
"calendar_displayName"
];
var sortOrder = null;
var selections = null;
var selection = "visible=1";
var contentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
var uriBuilder = android.provider.CalendarContract.Calendars.CONTENT_URI.buildUpon();
var uri = uriBuilder.build();
var cursor = contentResolver.query(uri, projection, selection, selections, sortOrder);
var calendars = [];
if (cursor.moveToFirst()) {
do {
var name_1 = cursor.getString(1);
var calendar_display_name = cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.CALENDAR.NAME));
if (!filterByName || filterByName === name_1 || filterByName === calendar_display_name) {
calendars.push({
id: cursor.getString(0),
name: name_1 ? name_1 : calendar_display_name,
displayName: calendar_display_name
});
}
} while (cursor.moveToNext());
}
return calendars;
};
calendar_common_1.Calendar._findEvents = function (arg) {
var settings = calendar_common_1.Calendar.merge(arg, calendar_common_1.Calendar.defaults);
var projection = [
calendar_common_1.Calendar._fields.EVENT_ID,
calendar_common_1.Calendar._fields.CALENDAR.ID,
calendar_common_1.Calendar._fields.CALENDAR.NAME,
calendar_common_1.Calendar._fields.TITLE,
calendar_common_1.Calendar._fields.MESSAGE,
calendar_common_1.Calendar._fields.LOCATION,
calendar_common_1.Calendar._fields.STARTDATE,
calendar_common_1.Calendar._fields.ENDDATE,
calendar_common_1.Calendar._fields.ALLDAY,
calendar_common_1.Calendar._fields.RRULE,
calendar_common_1.Calendar._fields.BEGIN,
calendar_common_1.Calendar._fields.END
];
var sortOrder = android.provider.CalendarContract.Instances.BEGIN + " ASC, " + android.provider.CalendarContract.Instances.END + " ASC";
var selection = "";
var selections = [];
if (settings.id !== undefined) {
selection += calendar_common_1.Calendar._fields.EVENT_ID + " = ?";
selections.push(settings.id);
}
else {
if (settings.title !== undefined) {
selection += calendar_common_1.Calendar._fields.TITLE + " LIKE ?";
selections.push("%" + settings.title + "%");
}
if (settings.location !== undefined) {
if ("" !== selection) {
selection += " AND ";
}
selection += calendar_common_1.Calendar._fields.LOCATION + " LIKE ?";
selections.push("%" + settings.location + "%");
}
}
var uriBuilder = android.provider.CalendarContract.Instances.CONTENT_URI.buildUpon();
android.content.ContentUris.appendId(uriBuilder, settings.startDate.getTime());
android.content.ContentUris.appendId(uriBuilder, settings.endDate.getTime());
var contentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
var uri = uriBuilder.build();
var cursor = contentResolver.query(uri, projection, selection, selections, sortOrder);
var events = [];
if (cursor.moveToFirst()) {
var _loop_1 = function () {
var recurrence = void 0;
var recurrenceRule = cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.RRULE));
if (recurrenceRule) {
var frequency_1;
var interval_1;
var count_1;
var endDate_1 = null;
var rules = recurrenceRule.split(";");
rules.forEach(function (rule) {
var ruleType = rule.split("=")[0];
var ruleValue = rule.split("=")[1];
if (ruleType === "FREQ") {
frequency_1 = ruleValue.toLowerCase();
}
else if (ruleType === "INTERVAL") {
interval_1 = +ruleValue;
}
else if (ruleType === "UNTIL" && ruleValue.length === 8) {
endDate_1 = new Date(+ruleValue.substring(0, 4), +ruleValue.substring(4, 6) - 1, +ruleValue.substring(6, 8));
}
else if (ruleType === "COUNT") {
count_1 = +ruleValue;
}
});
recurrence = {
frequency: frequency_1,
interval: interval_1,
endDate: endDate_1,
count: count_1
};
}
var event_1 = {
id: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.EVENT_ID)),
title: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.TITLE)),
notes: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.MESSAGE)),
location: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.LOCATION)),
startDate: recurrence ? new Date(cursor.getLong(cursor.getColumnIndex(calendar_common_1.Calendar._fields.BEGIN))) : new Date(cursor.getLong(cursor.getColumnIndex(calendar_common_1.Calendar._fields.STARTDATE))),
endDate: recurrence ? new Date(cursor.getLong(cursor.getColumnIndex(calendar_common_1.Calendar._fields.END))) : new Date(cursor.getLong(cursor.getColumnIndex(calendar_common_1.Calendar._fields.ENDDATE))),
allDay: cursor.getInt(cursor.getColumnIndex(calendar_common_1.Calendar._fields.ALLDAY)) === 1,
calendar: {
id: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.CALENDAR.ID)),
name: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.CALENDAR.NAME)),
displayName: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._fields.CALENDAR.NAME))
},
recurrence: recurrence,
};
event_1.reminders = calendar_common_1.Calendar._findReminders(event_1.id);
event_1.attendees = calendar_common_1.Calendar._findAttendees(event_1.id);
events.push(event_1);
};
do {
_loop_1();
} while (cursor.moveToNext());
}
return events;
};
calendar_common_1.Calendar._findReminders = function (eventId) {
var projection = [
calendar_common_1.Calendar._remindersFields.MINUTES
];
var selection = "";
var selectionArgs = [];
selection += calendar_common_1.Calendar._remindersFields.EVENT_ID + " = ?";
selectionArgs.push(eventId);
var uriBuilder = android.provider.CalendarContract.Reminders.CONTENT_URI.buildUpon();
var contentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
var uri = uriBuilder.build();
var cursor = contentResolver.query(uri, projection, selection, selectionArgs, null);
var reminders = [];
if (cursor.moveToFirst()) {
do {
var reminder = {
minutes: cursor.getLong(cursor.getColumnIndex(calendar_common_1.Calendar._remindersFields.MINUTES))
};
reminders.push(reminder);
} while (cursor.moveToNext());
}
return reminders;
};
calendar_common_1.Calendar._findAttendees = function (eventId) {
var projection = [];
var selection = "";
var selectionArgs = [];
selection += calendar_common_1.Calendar._attendeesFields.EVENT_ID + " = ?";
selectionArgs.push(eventId);
var uriBuilder = android.provider.CalendarContract.Attendees.CONTENT_URI.buildUpon();
var contentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
var uri = uriBuilder.build();
var cursor = contentResolver.query(uri, projection, selection, selectionArgs, null);
var attendees = [];
if (cursor.moveToFirst()) {
do {
var attendeeTypes = ["Unknown", "Optional", "Required", "Room"];
var attendeeStatuses = ["Unknown", "Accepted", "Declined", "Invited", "Tentative"];
var attendee_type = cursor.getShort(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_TYPE)) ?
attendeeTypes[cursor.getShort(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_TYPE))] : attendeeTypes[0];
var attendee_status = cursor.getShort(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_STATUS)) ?
attendeeStatuses[cursor.getShort(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_STATUS))] : attendeeStatuses[0];
var attendee = {
name: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_NAME)),
email: cursor.getString(cursor.getColumnIndex(calendar_common_1.Calendar._attendeesFields.ATTENDEE_EMAIL)),
url: '',
status: attendee_status,
role: "Unknown",
type: attendee_type
};
attendees.push(attendee);
} while (cursor.moveToNext());
}
return attendees;
};
function listCalendars(arg) {
return new Promise(function (resolve, reject) {
try {
var onPermissionGranted = function () {
resolve(calendar_common_1.Calendar._findCalendars());
};
if (!calendar_common_1.Calendar._hasReadPermission()) {
calendar_common_1.Calendar._requestReadPermission(onPermissionGranted, reject);
return;
}
onPermissionGranted();
}
catch (ex) {
console.log("Error in Calendar.listCalendars: " + ex);
reject(ex);
}
});
}
exports.listCalendars = listCalendars;
function findEvents(arg) {
return new Promise(function (resolve, reject) {
try {
if (!arg.startDate || !arg.endDate) {
reject("startDate and endDate are mandatory");
return;
}
var onPermissionGranted = function () {
resolve(calendar_common_1.Calendar._findEvents(arg));
};
if (!calendar_common_1.Calendar._hasReadPermission()) {
calendar_common_1.Calendar._requestReadPermission(onPermissionGranted, reject);
return;
}
onPermissionGranted();
}
catch (ex) {
console.log("Error in Calendar.findEvents: " + ex);
reject(ex);
}
});
}
exports.findEvents = findEvents;
function deleteEvents(arg) {
return new Promise(function (resolve, reject) {
try {
if (!arg.startDate || !arg.endDate) {
reject("startDate and endDate are mandatory");
return;
}
var onPermissionGranted = function () {
var events = calendar_common_1.Calendar._findEvents(arg);
var ContentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
var deletedEventIds = [];
for (var e in events) {
var event_2 = events[e];
try {
ContentResolver.delete(android.provider.CalendarContract.Events.CONTENT_URI, "_id = ?", [event_2.id]);
deletedEventIds.push(event_2.id);
}
catch (e) {
console.log("Failed to delete event " + event_2.id + ": " + event_2.title + ", error: " + e);
}
}
resolve(deletedEventIds);
};
if (!calendar_common_1.Calendar._hasReadWritePermission()) {
calendar_common_1.Calendar._requestReadWritePermission(onPermissionGranted, reject);
return;
}
onPermissionGranted();
}
catch (ex) {
console.log("Error in Calendar.deleteEvents: " + ex);
reject(ex);
}
});
}
exports.deleteEvents = deleteEvents;
function createEvent(arg) {
return new Promise(function (resolve, reject) {
try {
var settings_1 = calendar_common_1.Calendar.merge(arg, calendar_common_1.Calendar.defaults);
if (!settings_1.startDate || !settings_1.endDate) {
reject("startDate and endDate are mandatory");
return;
}
if (!arg || !arg.reminders) {
settings_1.reminders = null;
}
var onPermissionGranted = function () {
var ContentValues = new android.content.ContentValues();
var Events = android.provider.CalendarContract.Events;
ContentValues.put(calendar_common_1.Calendar._fields.TIMEZONE, java.util.TimeZone.getDefault().getID());
ContentValues.put(calendar_common_1.Calendar._fields.STARTDATE, new java.lang.Long(settings_1.startDate.getTime()));
ContentValues.put(calendar_common_1.Calendar._fields.ENDDATE, new java.lang.Long(settings_1.endDate.getTime()));
ContentValues.put(calendar_common_1.Calendar._fields.TITLE, settings_1.title);
ContentValues.put(calendar_common_1.Calendar._fields.LOCATION, settings_1.location);
var description = settings_1.notes;
if (settings_1.url) {
if (settings_1.notes) {
description += " " + settings_1.url;
}
else {
description = settings_1.url;
}
}
ContentValues.put(calendar_common_1.Calendar._fields.MESSAGE, description);
var ContentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
ContentValues.put(calendar_common_1.Calendar._fields.HAS_ALARM, new java.lang.Integer(settings_1.reminders && (settings_1.reminders.first || settings_1.reminders.second) ? 1 : 0));
var calendarId = null;
if (settings_1.calendar.name !== null) {
var calendars = calendar_common_1.Calendar._findCalendars(settings_1.calendar.name);
if (calendars.length > 0) {
calendarId = calendars[0].id;
}
else {
var calUri = android.provider.CalendarContract.Calendars.CONTENT_URI;
var calendarContentValues = new android.content.ContentValues();
var accountName = settings_1.calendar.accountName || settings_1.calendar.name || "AccountName";
calendarContentValues.put("account_name", accountName);
calendarContentValues.put("account_type", "LOCAL");
calendarContentValues.put("name", settings_1.calendar.name);
calendarContentValues.put("calendar_displayName", settings_1.calendar.name);
calendarContentValues.put("calendar_access_level", new java.lang.Integer(700));
calendarContentValues.put("ownerAccount", accountName);
if (settings_1.calendar.color && core_1.Color.isValid(settings_1.calendar.color)) {
var androidColor = new core_1.Color(settings_1.calendar.color).android;
calendarContentValues.put("calendar_color", new java.lang.Integer(androidColor));
}
calendarContentValues.put("visible", new java.lang.Integer(1));
calendarContentValues.put("sync_events", new java.lang.Integer(1));
calUri = calUri.buildUpon()
.appendQueryParameter("caller_is_syncadapter", "true")
.appendQueryParameter("account_name", accountName)
.appendQueryParameter("account_type", "LOCAL")
.build();
ContentResolver.insert(calUri, calendarContentValues);
var cals = calendar_common_1.Calendar._findCalendars(settings_1.calendar.name);
if (cals.length > 0) {
calendarId = cals[0].id;
}
}
}
if (calendarId === null) {
calendarId = settings_1.calendar.id;
}
ContentValues.put(calendar_common_1.Calendar._fields.CALENDAR.ID, new java.lang.Integer(calendarId));
if (settings_1.recurrence.frequency !== null) {
if (settings_1.recurrence.endDate === null) {
ContentValues.put(calendar_common_1.Calendar._fields.RRULE, "FREQ=" + settings_1.recurrence.frequency.toUpperCase() + ";INTERVAL=" + settings_1.recurrence.interval);
}
else {
var endDate = arg.recurrence.endDate;
var yyyy = endDate.getFullYear().toString();
var mm = (endDate.getMonth() + 1).toString();
var dd = endDate.getDate().toString();
var yyyymmdd = yyyy + (mm[1] ? mm : "0" + mm[0]) + (dd[1] ? dd : "0" + dd[0]);
ContentValues.put(calendar_common_1.Calendar._fields.RRULE, "FREQ=" + settings_1.recurrence.frequency.toUpperCase() + ";INTERVAL=" + settings_1.recurrence.interval + ";UNTIL=" + yyyymmdd);
}
}
var eventsUri = android.net.Uri.parse("content://com.android.calendar/events");
var uri = ContentResolver.insert(eventsUri, ContentValues);
var createdEventID = uri.getLastPathSegment();
if (settings_1.reminders && settings_1.reminders.first) {
var firstReminderContentValues = new android.content.ContentValues();
firstReminderContentValues.put("event_id", createdEventID);
firstReminderContentValues.put("minutes", new java.lang.Long(settings_1.reminders.first));
firstReminderContentValues.put("method", new java.lang.Integer(1));
ContentResolver.insert(android.net.Uri.parse("content://com.android.calendar/reminders"), firstReminderContentValues);
}
if (settings_1.reminders && settings_1.reminders.second) {
var secondReminderContentValues = new android.content.ContentValues();
secondReminderContentValues.put("event_id", createdEventID);
secondReminderContentValues.put("minutes", new java.lang.Long(settings_1.reminders.second));
secondReminderContentValues.put("method", new java.lang.Integer(1));
ContentResolver.insert(android.net.Uri.parse("content://com.android.calendar/reminders"), secondReminderContentValues);
}
resolve(createdEventID);
};
if (!calendar_common_1.Calendar._hasReadWritePermission()) {
calendar_common_1.Calendar._requestReadWritePermission(onPermissionGranted, reject);
return;
}
onPermissionGranted();
}
catch (ex) {
console.log("Error in Calendar.createEvent: " + ex);
reject(ex);
}
});
}
exports.createEvent = createEvent;
function deleteCalendar(arg) {
return new Promise(function (resolve, reject) {
try {
if (!arg.name) {
reject("name is mandatory");
return;
}
var onPermissionGranted = function () {
var calendars = calendar_common_1.Calendar._findCalendars(arg.name);
var deletedCalId = null;
if (calendars.length > 0) {
var calUri = android.provider.CalendarContract.Calendars.CONTENT_URI;
var ContentResolver = core_1.Utils.ad.getApplicationContext().getContentResolver();
for (var c in calendars) {
var calendar = calendars[c];
try {
ContentResolver.delete(calUri, "_id = ?", ["" + calendar.id]);
deletedCalId = calendar.id;
}
catch (e) {
reject(e);
}
}
}
resolve(deletedCalId);
};
if (!calendar_common_1.Calendar._hasReadWritePermission()) {
calendar_common_1.Calendar._requestReadWritePermission(onPermissionGranted, reject);
return;
}
onPermissionGranted();
}
catch (ex) {
console.log("Error in Calendar.deleteCalendar: " + ex);
reject(ex);
}
});
}
exports.deleteCalendar = deleteCalendar;