diff --git a/manifest.json b/manifest.json index 1bba514..f48b554 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "google-calendar", "name": "Google Calendar", - "version": "1.10.10", + "version": "1.10.11", "minAppVersion": "0.12.0", "description": "Interact with your Google Calendar from Inside Obsidian", "author": "YukiGasai", diff --git a/package.json b/package.json index de50da9..8a61b1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "google-calendar", - "version": "1.10.10", + "version": "1.10.11", "description": "Interact with your Google Calendar from Inside Obsidian", "main": "main.js", "scripts": { diff --git a/src/googleApi/GoogleSwitchCalendar.ts b/src/googleApi/GoogleSwitchCalendar.ts new file mode 100644 index 0000000..4307b5e --- /dev/null +++ b/src/googleApi/GoogleSwitchCalendar.ts @@ -0,0 +1,73 @@ +import type { GoogleEvent } from "../helper/types"; +import { settingsAreCompleteAndLoggedIn } from "../view/GoogleCalendarSettingTab"; +import { createNotice } from "../helper/NoticeHelper"; +import { callRequest } from "src/helper/RequestWrapper"; +import { GoogleApiError } from "./GoogleApiError"; +import GoogleCalendarPlugin from "../GoogleCalendarPlugin"; +import { googleListCalendars } from "../googleApi/GoogleListCalendars"; + +/** + * This function will switch the calendar of an event at the google api + * @param _event + * @returns + */ +export async function googleSwitchCalendar( + _event: GoogleEvent, + newCalendarId: string, +): Promise { + + let event = structuredClone(_event) + + const plugin = GoogleCalendarPlugin.getInstance(); + + if (!settingsAreCompleteAndLoggedIn()){ + throw new GoogleApiError("Not logged in", null, 401, {error: "Not logged in"}) + } + + let calenderId = "" + + if(event?.parent?.id){ + calenderId = event.parent.id; + }else{ + calenderId = plugin.settings.defaultCalendar; + } + + if(calenderId === ""){ + throw new GoogleApiError("Could not switch Calendar for Event because no default calendar selected in Settings", null, 999, {error: "No calendar set"}) + } + + let updatedEvent = await callRequest(`https://www.googleapis.com/calendar/v3/calendars/${calenderId}/events/${event.recurringEventId ?? event.id}/move?destination=${newCalendarId}`, "POST", event) + let calendars = await googleListCalendars() + _event.parent = calendars.find(calendar => calendar.id === newCalendarId); + + return _event; +} + + +export async function switchCalendar( + event: GoogleEvent, + newCalendarId: string, +): Promise { + try{ + const updatedEvent = await googleSwitchCalendar( + event, + newCalendarId + ); + createNotice(`Google Event ${updatedEvent.summary} switched calendar.`); + return updatedEvent; + }catch(error){ + switch (error.status) { + case 401: break; + case 999: + createNotice(error.message) + break; + default: + createNotice(`Google Event ${event.summary} could not switch calendar.`); + console.error('[GoogleCalendar]', error); + break; + } + return null; + } +} + + diff --git a/src/svelte/views/EventDetails.svelte b/src/svelte/views/EventDetails.svelte index 4964b53..cc69efb 100644 --- a/src/svelte/views/EventDetails.svelte +++ b/src/svelte/views/EventDetails.svelte @@ -16,6 +16,8 @@ import { getEvent } from "src/googleApi/GoogleGetEvent"; import { createNoteFromEvent } from "src/helper/AutoEventNoteCreator"; import EventDescriptionInput from "../components/EventDescriptionInput.svelte"; + import { switchCalendar } from "../../googleApi/GoogleSwitchCalendar"; + import { googleClearCachedEvents } from "../../googleApi/GoogleListEvents"; export let event: GoogleEvent; export let closeFunction :() => void; @@ -145,7 +147,7 @@ } }); - const changeCalendar = (e:Event) => { + const changeCalendar = async (e:Event) => { const selectElement = e.target; if(selectElement instanceof HTMLSelectElement){ @@ -153,6 +155,13 @@ const value = selectElement.value; selectedCalendarId = value; } + + if(event.id){ + await switchCalendar(event, selectedCalendarId); + event.parent = calendars.find(calendar => calendar.id === selectedCalendarId); + googleClearCachedEvents() + } + } const handleCreateEvent = async () => { @@ -267,7 +276,7 @@ $: { - {#each calendars as calendar}