Skip to content

[FEATURE] GNOME Online Accounts support for calendar settings #3722

Description

@bennypowers

Submission checklist

  • I have searched existing issues and confirmed this has not been requested before.
  • I have checked existing pull requests for similar changes.

Feature type

Integration support

Feature summary

Allow calendar settings to pull in user calendars from GNOME online accounts

Motivation / use case

Parity with v4, integration with common user patterns

Proposed solution

something along the lines of:

// calendar_service.h — new members
std::unique_ptr<GoaBackend> m_goaBackend;
std::vector<GoaBackend::GoaAccount> m_goaAccounts;

In tick():

  • For each GOA account with isOAuth2: call GetAccessToken(), use result as bearer in CalDavClient (or GoogleClient for Google, bypasses api.noctalia.dev entirely)
  • For password-based GOA: call GetPassword(), feed into CalDavClient with calDavUri
// New module: src/calendar/goa_backend.h/.cpp

class GoaBackend {
public:
    struct GoaAccount {
        std::string objectPath;   // /org/.../account_1234
        std::string displayName;
        std::string providerName; // "google", "nextcloud", etc.
        std::string calDavUri;    // from Calendar.Uri
        bool isOAuth2;
    };

    void start(TickCallback onChange);
    std::vector<GoaAccount> accounts() const;

    // Called before each sync — returns fresh token or password
    std::variant<std::string /*bearer*/, std::string /*password*/>
        getCredential(const GoaAccount&);
};

No config changes, GOA accounts are auto-detected and live beside manual accounts

Alternatives considered

  • manually add accounts (duplicative, time consuming)
  • khal

References / related projects

No response

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions