Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CALDAV with traggo #156

Open
punkyard opened this issue Feb 23, 2024 · 8 comments
Open

CALDAV with traggo #156

punkyard opened this issue Feb 23, 2024 · 8 comments
Labels
a:feature New feature or request

Comments

@punkyard
Copy link

punkyard commented Feb 23, 2024

Hi
as traggo edits a calendar
would it be possible to incorpore a caldav module to it? to sync with phones for example?

@punkyard punkyard added the a:feature New feature or request label Feb 23, 2024
@jmattheis
Copy link
Member

Possible yes, but it will be some effort to implement this.

@punkyard
Copy link
Author

punkyard commented Mar 5, 2024

which help could you use for this?

@jmattheis
Copy link
Member

First there has to be a plan how to map timespans with tags to caldav and after that's done it can be implemented.

@punkyard
Copy link
Author

punkyard commented Mar 5, 2024

Have you used Caldav before? I haven't
Here is what I found:

In CalDAV, events are .ics

Basic Structure of .ics

BEGIN:VCALENDAR

VERSION:2.0
PRODID:-//Your Organization//Your Product//EN

BEGIN:VEVENT
UID:event-1234@example.com
DTSTART:20240301T120000Z
DTEND:20240301T130000Z
SUMMARY:Meeting with Joe
DESCRIPTION:Weekly meeting discussing a revolution.
LOCATION:Buuny's corner.
END:VEVENT

END:VCALENDAR
::KEYS::
BEGIN/END: These denote the start and end of a calendar object (VCALENDAR) and its components (VEVENT).
VERSION: Specifies the version of the iCalendar specification being used (usually "2.0").
PRODID: A unique identifier for the product that created the iCalendar object.
UID: A unique identifier for the event itself. This is crucial for updates and synchronization.
DTSTART and DTEND: These specify the start and end times of the event, respectively. Dates and times can be in local time, absolute time (with a timezone), or date-only format.
SUMMARY: A brief description or title of the event.
DESCRIPTION: A more detailed description of the event.
LOCATION: The location where the event is taking place.
RRULE: Specifies a rule for recurring events. For example, an event could repeat daily, weekly, or monthly according to various rules.
ATTENDEE: Represents a participant in the event. Events can have multiple ATTENDEE properties to include several participants.
ORGANIZER: Specifies the organizer of the event.
STATUS: Indicates the status of the event (e.g., "CONFIRMED", "TENTATIVE", "CANCELLED").
CATEGORIES: Allows tagging of events with categories like "Meeting", "Appointment", etc.
ALARM: Defines a reminder or alarm for the event. This is encapsulated within a VALARM component inside the VEVENT.
VTIMEZONE: Specifies timezone information for accurate scheduling across different time zones.

I guess it would take a library first of all, to match traggo's language to CalDAV protocol.
What do you think?

Files to translate from one language to another will have to be created, and then deleted.
What's the language you want to use?

Would you like to integrate a caldav server, or interact with an external one? both??

  • update schema.graphql
  • ensure security

o new GraphQL types for CalDAV events, similar to the TimeSpan types (add recurrence rules RRULE, location, attendees.;. could be a plus)

o extend RootMutation and RootQuery types - to interact with CalDAV events
create - update - delete CalDAV events + queries to fetch or send events from or to server

o hasRole directive enforces permission for authorized users

o update time scalar types for time fields - I guess it means changing the date and time formats to match CalDAV ..

example

type RootMutation {

    createDavEvent(start: Time!, end: Time, summary: String!, description: String, location: String, tags: [InputTimeSpanTag!]): DavEvent @hasRole(role: USER)
    updateDavEvent(id: Int!, start: Time!, end: Time, summary: String, description: String, location: String, tags: [InputTimeSpanTag!]): DavEvent @hasRole(role: USER)
    deleteDavEvent(id: Int!): DavEvent @hasRole(role: USER)

}

type DavEvent {
    id: Int!
    start: Time!
    end: Time
    summary: String!
    description: String
    location: String
    tags: [TimeSpanTag!]
}

type RootQuery {

    DavEvents(fromInclusive: Time, toInclusive: Time, tags: [String!]): [DavEvent!] @hasRole(role: USER)

}

input InputTimeSpanTag {
    key: String!
    value: String!
}

then see resolver.go

next depends on being server or client ..
could be definitely a nice opening of traggo to the outside world!
if it was a client, I could be used with google or nextcloud ...
let me know

thanks for your concern
✌️

@jmattheis
Copy link
Member

I don't think the caldav structure should be implemented via graphql. It should follow the caldav spec for syncing calenders. How do you want to use this feature, could you state some use-cases. Do you just want to lookup traggo events on your phone. Or do you want to add traggo events on your phone?

@punkyard
Copy link
Author

punkyard commented Mar 7, 2024

as I wrote higher, as a client traggo could be synced with servers as google or nextcloud
then anything done on the phone would be synced with the server and traggo as a client
what do you think?

@jmattheis
Copy link
Member

Yeah, could be useful, but is also a lot of effort.

We'd have to map time spans to caldav events and then parse and import them into the traggo database. There is the possibility for edit conflicts (edits in traggo and the calender at the same time), then the calender entry can be malformed and Traggo isn't able to import it. The remote calender could be unavailable so we have to update it correctly when it's online again. and much more.

I don't really think this is worth the effort to implement as you can use the webapp in the browser on a phone.

@punkyard
Copy link
Author

punkyard commented Mar 7, 2024

no, halas, no one would us it in our team because we use nextcloud - we cannot mark time twice, and it can't be outside of nextcloud! but if it could connect - that would be howsome - traggo would show awesome looks on activities!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a:feature New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants