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

[Feature request] Add listing flags / dates / notes / URLs in JSON format #30

Closed
wkoszek opened this issue Jan 4, 2021 · 10 comments
Closed

Comments

@wkoszek
Copy link

wkoszek commented Jan 4, 2021

How hard could it be to add listing not only a title of a task but also all the other auxiliary parameters attached to an item?

image

My dream come true: reminders -f json show TODO gives me a JSON dump of everything on the TODO list.

How much work would it be?

@wkoszek wkoszek changed the title [Feature request] Add listing flags / dates / notes / URLs [Feature request] Add listing flags / dates / notes / URLs in JSON format Jan 4, 2021
@keith
Copy link
Owner

keith commented Jan 4, 2021

I'm not sure if all the metadata is accessible in the API as it is today, but otherwise I think it would be do-able

@wkoszek
Copy link
Author

wkoszek commented Jan 10, 2021

@keith Would you be willing to add a bug bounty label for this? I'd be willing to donate $25 to someone who could explore this.

@keith
Copy link
Owner

keith commented Jan 12, 2021

Any quick guide on how that works? I've never done that with one of my issues

@wkoszek
Copy link
Author

wkoszek commented Jan 12, 2021

I'd just make a gold label with $25 in it. E.g.: Kapeli/Dash-User-Contributions#2014

@fbaube
Copy link

fbaube commented Dec 18, 2022

Dumb question: Would this enable me to wrap reminders-cli inside a non-Swift application ?

@keith
Copy link
Owner

keith commented Dec 18, 2022

Do you mean this specific feature request or the tool in general? Either way likely no, unless you can bridge to objective-c in whatever language you're trying to use, or you might be able to shell out to this CLI

@fbaube
Copy link

fbaube commented Dec 18, 2022

Ah sorry, i meant: the reminders-cli app in general. I'd line to be able to invoke it from Go and capture the output. I wouldn't think it would pose any particular problems.

@0xdevalias
Copy link
Contributor

0xdevalias commented Jan 3, 2023

I'm not sure if all the metadata is accessible in the API as it is today, but otherwise I think it would be do-able

Looks like main.swift calls into CLI.swift, which calls into Reminders.swift, which uses EKEventStore from EventKit:

It looks like getCalendars() currently filters it so we can only access 'reminder calendars' that are modifiable:

reminders() uses Store.predicateForReminders() + Store.fetchReminders() to fetch all of the reminders for the given EKCalendar, which returns an array of EKReminders:

It looks like EKReminder directly allows reading the priority, start date, due date, whether it's completed, and the date it was completed; but it also inherits from EKCalendarItem which allows reading the title, location, creation/modified date, timezone, url, notes, attendees (may not be relevant to a reminder), alarms, recurrence rules, etc:

Skimming through the UI in the Reminders app, that looks like it covers pretty much if not all of the fields I can see on a reminder (maybe not images.. but I suspect that may be 'hidden' in the notes/similar objects maybe?); so this issue definitely seems plausible to complete?


A quick google for Swift JSON handling lead me to the following:


Looks like the 'Building Manually' instructions are pretty straightforward to follow, with 1 minor tweak:

We can also run it in debug mode with swift run reminders (eg. swift run reminders --help)


Edit: I've been hacking away at this this afternoon and have a mostly implemented prototype. Will clean it up and put up a PR shortly.

@0xdevalias
Copy link
Contributor

Just put up a PR to resolve a chunk of the above. It adds a new export-all command that outputs Reminders as JSON. It adds a bunch of extra fields that I identified, but there were still some (eg. flag) that I didn't figure out/find a way to access through the SDK during my brief research today. There are still a couple of tiny TODO/improvement things i'd like to do, but it's usable/testable in it's current state.

keith pushed a commit that referenced this issue May 22, 2023
This PR adds support for formatting the output in JSON format for easy
scripting (#30). This is similar to #53 but adds a "--format" option to
existing subcommands as I use the JSON output from add in some personal
scripts
([example](https://github.com/nettleton/dotfiles/blob/ff78a9f2efaf1f4137a6f6394327d1b9b323c904/dot_config/fish/functions/extractReminders.fish#L26)).

```bash
$ reminders add MyList "some reminder" -f json | jq '.'
{
  "title": "some reminder",
  "isCompleted": false,
  "externalId": "BD2B26EF-38E1-40A7-90A4-C02ACA190145",
  "priority": 0,
  "list": "MyList"
}
```

2. Extends the --format option to use the external id in place of index.
I use the id for urls like "x-apple-reminderkit://REMCDReminder/$id"
that open the specified reminder in the Reminders app, so being able to
use the id directly instead of correlating to the array index makes
things simpler.

```bash
$ reminders complete MyList BD2B26EF-38E1-40A7-90A4-C02ACA190145
Completed 'some reminder'
```

Co-authored-by: Joshua Wang <[email protected]>
@keith
Copy link
Owner

keith commented May 22, 2023

I believe done in #55

@keith keith closed this as completed May 22, 2023
@jhoek jhoek mentioned this issue Nov 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants