Compare commits

...

8 commits

11 changed files with 1117 additions and 176 deletions

46
calendar/test.ics Normal file
View file

@ -0,0 +1,46 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:test
X-WR-CALNAME:test
BEGIN:VEVENT
UID:881z@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T111355Z
DTSTART:20240930T113000Z
DTEND:20240930T123000Z
SUMMARY:work other work
END:VEVENT
BEGIN:VEVENT
UID:lhyi@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T111355Z
DTSTART:20241003T190000Z
DTEND:20241003T200000Z
SUMMARY:work progodessey
END:VEVENT
BEGIN:VEVENT
UID:5l54@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T111355Z
DTSTART:20241009T173000Z
DTEND:20241009T183000Z
SUMMARY:work do
END:VEVENT
BEGIN:VEVENT
UID:cp96@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T111355Z
DTSTART:20241001T183000Z
DTEND:20241001T193000Z
SUMMARY:Other work calmerge
END:VEVENT
BEGIN:VEVENT
UID:jxsj@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T111355Z
DTSTART:20241010T173000Z
DTEND:20241010T183000Z
SUMMARY:Other work to do
END:VEVENT
END:VCALENDAR

15
calendar/test.json Normal file
View file

@ -0,0 +1,15 @@
{
"linkGroupName": "test",
"calendars": [
{
"prefix": "work",
"override": false,
"url": "https://calendar.google.com/calendar/ical/b4c66eb4bb2cc15257d071bab3f935385778b042112ea1aaedada47f3f1a6e3a%40group.calendar.google.com/public/basic.ics"
},
{
"prefix": "Other work",
"override": false,
"url": "https://calendar.google.com/calendar/ical/774518759e4e2dd42aab0c511b02397bb216f3b67dc425d76bae07d1eff529d6%40group.calendar.google.com/public/basic.ics"
}
]
}

260
server.js
View file

@ -8,116 +8,95 @@ import icalGenerator from 'ical-generator';
const app = express(); const app = express();
app.use(express.json()); app.use(express.json());
// Determine the merged calendars directory based on the environment
const MERGED_CALENDARS_DIR = path.join(process.cwd(), 'calendar'); const MERGED_CALENDARS_DIR = path.join(process.cwd(), 'calendar');
console.log(`Merged calendars directory: ${MERGED_CALENDARS_DIR} under ${process.cwd()}`); console.log(`Merged calendars directory: ${MERGED_CALENDARS_DIR} under ${process.cwd()}`);
// Ensure the merged calendars directory exists // Ensure the merged calendars directory exists
fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true }); fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true });
app.get('/script.js', (req, res) => { // Serve static files
res.setHeader('Content-Type', 'application/javascript'); app.get('/script.js', (req, res) => res.sendFile('script.js', { root: '.' }));
res.sendFile('script.js', { root: '.' }); app.get('/', (req, res) => res.sendFile('index.html', { root: '.' }));
});
app.get('/', (req, res) => { // Utility to sanitize filenames
res.sendFile('index.html', { root: '.' }); const sanitizeFilename = (filename) => filename.replace(/[<>:"/\\|?* ]/g, '_');
});
// Function to sanitize the linkGroupName for use as a filename // Fetch calendar data from URL or file
function sanitizeFilename(filename) { const fetchCalendarData = async (calendar) => {
return filename.replace(/[<>:"/\\|?* ]/g, '_'); // Replace invalid characters with underscores const isFilePath = !calendar.url.startsWith('http');
} try {
if (isFilePath) {
return {
data: fs.readFileSync(path.resolve(calendar.url), 'utf-8'),
...calendar
};
} else {
const response = await axios.get(calendar.url);
return { data: response.data, ...calendar };
}
} catch (error) {
console.error(`Error retrieving calendar from ${calendar.url}:`, error);
throw error;
}
};
// Merge calendar events
const mergeCalendarEvents = (calendarInstance, results) => {
results.forEach((result) => {
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
component.getAllSubcomponents('vevent').forEach((event) => {
const vevent = new ICAL.Event(event);
const start = vevent.startDate.toJSDate();
const end = vevent.endDate.toJSDate();
const summary = result.override ? result.prefix : `${result.prefix} ${vevent.summary}`;
const eventOptions = {
start: start,
end: end,
summary: summary,
allDay: vevent.startDate.isDate
};
calendarInstance.createEvent(eventOptions);
});
});
};
// Save calendar data to file
const saveCalendarFile = (filename, content) => {
const filePath = path.join(MERGED_CALENDARS_DIR, filename);
fs.writeFileSync(filePath, content);
return filePath;
};
// Merge calendars endpoint // Merge calendars endpoint
app.post('/merge', async (req, res) => { app.post('/merge', async (req, res) => {
const { linkGroupName, calendars } = req.body; const { linkGroupName, calendars } = req.body;
// Validate the input
if (!linkGroupName || !Array.isArray(calendars) || calendars.length === 0) {
return res.status(400).json({ error: 'Invalid input. Please provide a linkGroupName and at least one calendar.' });
}
try { try {
// Validate the input
if (!linkGroupName || !calendars || !Array.isArray(calendars) || calendars.length === 0) {
return res.status(400).json({ error: 'Invalid input. Please provide a linkGroupName and at least one calendar.' });
}
// Sanitize the linkGroupName to create a valid filename // Sanitize the linkGroupName to create a valid filename
const sanitizedLinkGroupName = sanitizeFilename(linkGroupName); const sanitizedLinkGroupName = sanitizeFilename(linkGroupName);
const filename = `${sanitizedLinkGroupName}.ics`; const filename = `${sanitizedLinkGroupName}.ics`;
// Fetch calendar data from URLs or load from local files // Fetch calendar data
const promises = calendars.map((calendar) => { const results = await Promise.all(calendars.map(fetchCalendarData));
// Check if calendar URL is a file path or a URL
const isFilePath = !calendar.url.startsWith('http');
if (isFilePath) {
try{
// Read calendar data from local file
const data = fs.readFileSync(path.resolve(calendar.url), 'utf-8');
return Promise.resolve({
data: data,
prefix: calendar.prefix,
override: calendar.override,
});
} catch (error) {
console.error(`Error reading calendar file ${calendar.url}: ${error}`);
return Promise.reject(error)
}
} else {
// Fetch calendar data from URL
return axios.get(calendar.url)
.then((response) => {
return {
data: response.data,
prefix: calendar.prefix,
override: calendar.override,
};
})
.catch((error) => {
console.error(`Error fetching calendar from ${calendar.url}:`, error);
return null;
});
}
});
const results = await Promise.all(promises); // Generate merged calendar
// Create a new iCalendar instance const calendarInstance = icalGenerator({ name: linkGroupName });
const calendar = icalGenerator({ name: linkGroupName }); mergeCalendarEvents(calendarInstance, results);
// Parse calendar data
results.forEach((result) => {
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
const events = component.getAllSubcomponents('vevent');
events.forEach((event) => {
const vevent = new ICAL.Event(event);
const start = vevent.startDate.toJSDate();
const end = vevent.endDate.toJSDate();
const summary = result.override ? result.prefix : `${result.prefix} ${vevent.summary}`;
if (vevent.startDate.isDate) {
calendar.createEvent({
start: start.toISOString().split('T')[0],
end: end.toISOString().split('T')[0],
summary: summary,
allDay: true,
});
} else {
calendar.createEvent({
start: start,
end: end,
summary: summary,
});
}
});
});
// Save the calendar to a file // Save the calendar to a file
const filePath = `${MERGED_CALENDARS_DIR}/${filename}`; saveCalendarFile(filename, calendarInstance.toString());
fs.writeFileSync(filePath, calendar.toString());
console.log(`Calendar saved to ${filePath}`);
// Save the user input and sanitizedLinkGroupName in a separate JSON file // Save the user input and sanitizedLinkGroupName in a separate JSON file
saveCalendarData(sanitizedLinkGroupName, linkGroupName, calendars); saveCalendarFile(`${sanitizedLinkGroupName}.json`, JSON.stringify({ linkGroupName, calendars }, null, 2));
res.json({ url: `${req.protocol}://${req.get('host')}/calendar/${sanitizedLinkGroupName}` }); res.json({ url: `${req.protocol}://${req.get('host')}/calendar/${sanitizedLinkGroupName}` });
} catch (error) { } catch (error) {
@ -126,112 +105,45 @@ app.post('/merge', async (req, res) => {
} }
}); });
// Refresh calendar if outdated
const refreshCalendarData = async (calendarName) => {
const jsonFilePath = path.join(MERGED_CALENDARS_DIR, `${calendarName}.json`);
// Read the JSON file to get the source URL and other details
const { calendars } = JSON.parse(fs.readFileSync(jsonFilePath, 'utf-8'));
const results = await Promise.all(calendars.map(fetchCalendarData));
const calendarInstance = icalGenerator({ name: calendarName });
mergeCalendarEvents(calendarInstance, results);
saveCalendarFile(`${calendarName}.ics`, calendarInstance.toString());
console.log('Calendar data refreshed.');
};
// Serve the merged calendar file and refresh if older than an hour // Serve the merged calendar file and refresh if older than an hour
app.get('/calendar/:name', async (req, res) => { app.get('/calendar/:name', async (req, res) => {
const calendarName = req.params.name; const calendarName = req.params.name;
const icsFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.ics`); const icsFilePath = path.join(MERGED_CALENDARS_DIR, `${calendarName}.ics`);
const jsonFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.json`);
try { try {
// Check if the .ics file exists // Check if the .ics file exists
if (fs.existsSync(icsFilePath)) { if (fs.existsSync(icsFilePath)) {
const stats = fs.statSync(icsFilePath); const stats = fs.statSync(icsFilePath);
const lastModified = new Date(stats.mtime); const isOutdated = new Date() - new Date(stats.mtime) > 60 * 60 * 1000;
const now = new Date();
// Check if the file is older than one hour
if (now - lastModified > 60 * 60 * 1000) {
console .log('Refreshing calendar data...');
// Read the JSON file to get the source URL and other details if (isOutdated) await refreshCalendarData(calendarName);
const jsonData = JSON.parse(fs.readFileSync(jsonFilePath, 'utf8'));
const { calendars } = jsonData;
// Fetch calendar data for each merged calendar res.setHeader('Content-Type', 'text/calendar');
const promises = calendars.map((calendar) => { res.sendFile(icsFilePath);
return axios.get(calendar.url)
.then((response) => {
return {
data: response.data,
prefix: calendar.prefix,
override: calendar.override,
};
})
.catch((error) => {
console.error(error);
return null;
});
});
const results = await Promise.all(promises);
// Filter out any failed requests
const validResults = results.filter((result) => result !== null);
// Create a new iCalendar instance
const calendar = icalGenerator({ name: calendarName });
// Parse calendar data
validResults.forEach((result) => {
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
const events = component.getAllSubcomponents('vevent');
events.forEach((event) => {
const vevent = new ICAL.Event(event);
const start = vevent.startDate.toJSDate();
const end = vevent.endDate.toJSDate();
const summary = result.override ? result.prefix : `${result.prefix} ${vevent.summary}`;
if (vevent.startDate.isDate) {
calendar.createEvent({
start: start.toISOString().split('T')[0],
end: end.toISOString().split('T')[0],
summary: summary,
allDay: true,
});
} else {
calendar.createEvent({
start: start,
end: end,
summary: summary,
});
}
});
});
// Save the calendar to a file
fs.writeFileSync(icsFilePath, calendar.toString());
console.log('Calendar data refreshed.');
}
} else { } else {
return res.status(404).json({ error: 'Calendar not found.' }); res.status(404).json({ error: 'Calendar not found.' });
} }
// Return the contents of the .ics file
res.setHeader('Content-Type', 'text/calendar');
res.sendFile(icsFilePath);
} catch (error) { } catch (error) {
console.error(error); console.error('Error retrieving calendar data:', error);
res.status(500).json({ error: 'Failed to retrieve calendar data.' }); res.status(500).json({ error: 'Failed to retrieve calendar data.' });
} }
}); });
//function to save calendar data to seperate .json files
function saveCalendarData(calendarId, linkGroupName, calendars) {
const calendarFile = `${MERGED_CALENDARS_DIR}/${calendarId}.json`;
const calendarData = {
id: calendarId,
linkGroupName: linkGroupName,
calendars: calendars
};
try {
fs.writeFileSync(calendarFile, JSON.stringify(calendarData, null, 2));
} catch (error) {
console.error('Error writing to calendar file:', error);
}
}
export default app; export default app;

View file

@ -0,0 +1,336 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Date Based Calendar
X-WR-CALNAME:Date Based Calendar
BEGIN:VEVENT
UID:ux86@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20230219
DTEND;VALUE=DATE:20230224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Winterferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:uqqc@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20230402
DTEND;VALUE=DATE:20230415
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Osterferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:s5s6@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20230529
DTEND;VALUE=DATE:20230609
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Pfingstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:d1co@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20230730
DTEND;VALUE=DATE:20230911
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Sommerferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:bfa2@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231029
DTEND;VALUE=DATE:20231103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Herbstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:422p@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231121
DTEND;VALUE=DATE:20231122
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Herbstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:pn88@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231222
DTEND;VALUE=DATE:20240105
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Weihnachtsferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:kn7n@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:m3pg@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240114
DTEND;VALUE=DATE:20240114
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays M L King Day
END:VEVENT
BEGIN:VEVENT
UID:39ny@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240218
DTEND;VALUE=DATE:20240218
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Presidents' Day
END:VEVENT
BEGIN:VEVENT
UID:5ifw@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240328
DTEND;VALUE=DATE:20240328
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Good Friday
END:VEVENT
BEGIN:VEVENT
UID:nb38@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240330
DTEND;VALUE=DATE:20240330
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Easter Sunday
END:VEVENT
BEGIN:VEVENT
UID:lz4n@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240526
DTEND;VALUE=DATE:20240526
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Memorial Day
END:VEVENT
BEGIN:VEVENT
UID:0h55@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240618
DTEND;VALUE=DATE:20240618
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Juneteenth
END:VEVENT
BEGIN:VEVENT
UID:rw2w@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240703
DTEND;VALUE=DATE:20240703
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Independence Day
END:VEVENT
BEGIN:VEVENT
UID:7c9g@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240901
DTEND;VALUE=DATE:20240901
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Labor Day
END:VEVENT
BEGIN:VEVENT
UID:0nz9@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241013
DTEND;VALUE=DATE:20241013
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Columbus Day
END:VEVENT
BEGIN:VEVENT
UID:e9ol@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241110
DTEND;VALUE=DATE:20241110
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Veterans Day
END:VEVENT
BEGIN:VEVENT
UID:p38j@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241127
DTEND;VALUE=DATE:20241127
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Thanksgiving Day
END:VEVENT
BEGIN:VEVENT
UID:379a@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241224
DTEND;VALUE=DATE:20241224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Christmas
END:VEVENT
BEGIN:VEVENT
UID:cpof@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:p0aq@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250119
DTEND;VALUE=DATE:20250119
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays M L King Day
END:VEVENT
BEGIN:VEVENT
UID:kb3l@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250216
DTEND;VALUE=DATE:20250216
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Presidents' Day
END:VEVENT
BEGIN:VEVENT
UID:htk4@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250417
DTEND;VALUE=DATE:20250417
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Good Friday
END:VEVENT
BEGIN:VEVENT
UID:db0o@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250419
DTEND;VALUE=DATE:20250419
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Easter Sunday
END:VEVENT
BEGIN:VEVENT
UID:v0s3@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250525
DTEND;VALUE=DATE:20250525
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Memorial Day
END:VEVENT
BEGIN:VEVENT
UID:7hxd@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250618
DTEND;VALUE=DATE:20250618
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Juneteenth
END:VEVENT
BEGIN:VEVENT
UID:1zlu@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250703
DTEND;VALUE=DATE:20250703
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Independence Day
END:VEVENT
BEGIN:VEVENT
UID:ujrf@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250831
DTEND;VALUE=DATE:20250831
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Labor Day
END:VEVENT
BEGIN:VEVENT
UID:0vwh@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251012
DTEND;VALUE=DATE:20251012
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Columbus Day
END:VEVENT
BEGIN:VEVENT
UID:5lwh@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251110
DTEND;VALUE=DATE:20251110
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Veterans Day
END:VEVENT
BEGIN:VEVENT
UID:iz9d@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251126
DTEND;VALUE=DATE:20251126
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Thanksgiving Day
END:VEVENT
BEGIN:VEVENT
UID:9siv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251224
DTEND;VALUE=DATE:20251224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Christmas
END:VEVENT
END:VCALENDAR

View file

@ -0,0 +1,16 @@
{
"id": "Date_Based_Calendar",
"linkGroupName": "Date Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\ferien_bayern_2023.ics",
"prefix": "Ferien_Bayern_2023",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\US_Holidays.ics",
"prefix": "US_holidays",
"override": false
}
]
}

View file

@ -0,0 +1,266 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:No Prefix Calendar
X-WR-CALNAME:No Prefix Calendar
BEGIN:VEVENT
UID:3xkm@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:brhz@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:eqra@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:n4fh@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240103
DTEND;VALUE=DATE:20240103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:7ere@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240104
DTEND;VALUE=DATE:20240104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:e144@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240106
DTEND;VALUE=DATE:20240106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas
END:VEVENT
BEGIN:VEVENT
UID:rh1l@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240107
DTEND;VALUE=DATE:20240107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas Holiday
END:VEVENT
BEGIN:VEVENT
UID:52hv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240222
DTEND;VALUE=DATE:20240222
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Defender of the Fatherland
END:VEVENT
BEGIN:VEVENT
UID:kzzg@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240307
DTEND;VALUE=DATE:20240307
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Intl. Women's Day
END:VEVENT
BEGIN:VEVENT
UID:s482@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240430
DTEND;VALUE=DATE:20240430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Spring and Labor Day
END:VEVENT
BEGIN:VEVENT
UID:vqc0@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240508
DTEND;VALUE=DATE:20240508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Victory Day
END:VEVENT
BEGIN:VEVENT
UID:fpcl@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240611
DTEND;VALUE=DATE:20240611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Russia Day
END:VEVENT
BEGIN:VEVENT
UID:16sp@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241103
DTEND;VALUE=DATE:20241103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Civil Unity Day
END:VEVENT
BEGIN:VEVENT
UID:2jtp@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:jfuk@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:82e6@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250102
DTEND;VALUE=DATE:20250102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:zoha@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250103
DTEND;VALUE=DATE:20250103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:rr0h@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250104
DTEND;VALUE=DATE:20250104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:8712@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250106
DTEND;VALUE=DATE:20250106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas
END:VEVENT
BEGIN:VEVENT
UID:uq55@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250107
DTEND;VALUE=DATE:20250107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas Holiday
END:VEVENT
BEGIN:VEVENT
UID:hmvp@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250223
DTEND;VALUE=DATE:20250223
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Defender of the Fatherland
END:VEVENT
BEGIN:VEVENT
UID:6wgm@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250309
DTEND;VALUE=DATE:20250309
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Intl. Women's Day
END:VEVENT
BEGIN:VEVENT
UID:g3y7@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250430
DTEND;VALUE=DATE:20250430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Spring and Labor Day
END:VEVENT
BEGIN:VEVENT
UID:5u4o@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250508
DTEND;VALUE=DATE:20250508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Victory Day
END:VEVENT
BEGIN:VEVENT
UID:ruw2@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250611
DTEND;VALUE=DATE:20250611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Russia Day
END:VEVENT
BEGIN:VEVENT
UID:ui8c@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251103
DTEND;VALUE=DATE:20251103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Civil Unity Day
END:VEVENT
END:VCALENDAR

View file

@ -0,0 +1,11 @@
{
"id": "No_Prefix_Calendar",
"linkGroupName": "No Prefix Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\San_Francisco_Public_Holidays.ics",
"prefix": "",
"override": false
}
]
}

View file

@ -0,0 +1,266 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Override Calendar
X-WR-CALNAME:Override Calendar
BEGIN:VEVENT
UID:k61c@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:55y9@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:skrq@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:vz9m@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240103
DTEND;VALUE=DATE:20240103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:vhek@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240104
DTEND;VALUE=DATE:20240104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:n520@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240106
DTEND;VALUE=DATE:20240106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:lqmc@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240107
DTEND;VALUE=DATE:20240107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:qsw7@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240222
DTEND;VALUE=DATE:20240222
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:cssb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240307
DTEND;VALUE=DATE:20240307
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:q1qz@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240430
DTEND;VALUE=DATE:20240430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:0bgv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240508
DTEND;VALUE=DATE:20240508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:t8ux@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20240611
DTEND;VALUE=DATE:20240611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:uppu@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241103
DTEND;VALUE=DATE:20241103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:m56r@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:ecvb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:vx0q@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250102
DTEND;VALUE=DATE:20250102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:jd9w@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250103
DTEND;VALUE=DATE:20250103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:yvdj@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250104
DTEND;VALUE=DATE:20250104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:b03t@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250106
DTEND;VALUE=DATE:20250106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:gqz5@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250107
DTEND;VALUE=DATE:20250107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:xd78@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250223
DTEND;VALUE=DATE:20250223
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:2hbi@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250309
DTEND;VALUE=DATE:20250309
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:3sa4@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250430
DTEND;VALUE=DATE:20250430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:w8qb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250508
DTEND;VALUE=DATE:20250508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:x8kb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20250611
DTEND;VALUE=DATE:20250611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:wu7v@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART;VALUE=DATE:20251103
DTEND;VALUE=DATE:20251103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
END:VCALENDAR

View file

@ -0,0 +1,11 @@
{
"id": "Override_Calendar",
"linkGroupName": "Override Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\San_Francisco_Public_Holidays.ics",
"prefix": "Override Event",
"override": true
}
]
}

View file

@ -0,0 +1,46 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Time Based Calendar
X-WR-CALNAME:Time Based Calendar
BEGIN:VEVENT
UID:hexi@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART:20241001T183000Z
DTEND:20241001T193000Z
SUMMARY:other_work calmerge
END:VEVENT
BEGIN:VEVENT
UID:5gao@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART:20241010T173000Z
DTEND:20241010T183000Z
SUMMARY:other_work to do
END:VEVENT
BEGIN:VEVENT
UID:d67d@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART:20240930T113000Z
DTEND:20240930T123000Z
SUMMARY:work other work
END:VEVENT
BEGIN:VEVENT
UID:6kon@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART:20241003T190000Z
DTEND:20241003T200000Z
SUMMARY:work progodessey
END:VEVENT
BEGIN:VEVENT
UID:gxgt@Ryan-jr
SEQUENCE:0
DTSTAMP:20241107T002212Z
DTSTART:20241009T173000Z
DTEND:20241009T183000Z
SUMMARY:work do
END:VEVENT
END:VCALENDAR

View file

@ -0,0 +1,16 @@
{
"id": "Time_Based_Calendar",
"linkGroupName": "Time Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\other_work.ics",
"prefix": "other_work",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\tests\\test_calendars\\work.ics",
"prefix": "work",
"override": false
}
]
}