{"id":23291916,"url":"https://github.com/jeeftor/alfredtoday","last_synced_at":"2025-06-20T17:33:24.513Z","repository":{"id":47720451,"uuid":"62946268","full_name":"jeeftor/alfredToday","owner":"jeeftor","description":"Today menu Plugin for Alfred (generalized for public consumption)","archived":false,"fork":false,"pushed_at":"2022-05-05T19:28:42.000Z","size":11711,"stargazers_count":39,"open_issues_count":7,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-08T18:21:22.697Z","etag":null,"topics":["alfred","exchange-server","google-calendar","plugin","workflow"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeeftor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-09T11:23:55.000Z","updated_at":"2023-11-07T12:42:46.000Z","dependencies_parsed_at":"2022-08-17T15:30:28.121Z","dependency_job_id":null,"html_url":"https://github.com/jeeftor/alfredToday","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/jeeftor/alfredToday","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2FalfredToday","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2FalfredToday/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2FalfredToday/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2FalfredToday/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeeftor","download_url":"https://codeload.github.com/jeeftor/alfredToday/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2FalfredToday/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260987956,"owners_count":23093411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alfred","exchange-server","google-calendar","plugin","workflow"],"created_at":"2024-12-20T05:28:11.135Z","updated_at":"2025-06-20T17:33:19.482Z","avatar_url":"https://github.com/jeeftor.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Today Workflow for Outlook365 and Google Calendar\n\n\n![today](docs/today.png)\n\nThis workflow will load a **Today** view from both Exchange365 and Google calendars.  It will interleave the events, extract relevant meeting information and allow you to open links directly to your **Hangout** or **Skype** meeting - if one exists.\n\n\nVersion two of this add-on supports both **Google** and **Microsoft Exchange** calendars.\n\n### Version History\n* Version 2.0 - Outlook + Google Support\n* Version 2.0.1: Exchange Credential Fix\n* Version 2.0.2: Dateutil.parser added to lib list\n* Version 2.0.3: Correct event time interleaving\n* Version 3.0: HUGE SPEEDUPS.  Requires Alfred 3.1\n* Version 3.5: Prelim NTLM support (untested)\n* Version 3.8: Rewrite of background handling for both Outlook and Exchange\n\n\n# Installation\nGrab the latest release [here](https://github.com/jeeftor/alfredToday/releases)\n\n# Usage\n\nYou can use the following commands\n\nAvailable Commands:\n\n* **Today** (shows the today list)\n* **Tomorrow** (shows list for tomorrow)\n* **tc** (loads configuration)\n* **dbgToday** debug options like open log\n\n# Authenticating against Google Calendar (oauth)\n\nThe Google portion of this workflow uses oauth2 to authenticate with google and access your calendar.  When you enabled Google support via the **tc** command the script \"should\" open a screen in your web browser similar to\n\n![auth](docs/auth.png)\n\nWhen you hit allow this will store a file in you home directory called\n\n```bash\n~/.credentials/calendar-alfred-today.json\n```\nThis file is an authorization key that will allow the software to work.  If you are running into issues please ask for help in the [issue](https://github.com/jeeftor/alfredToday/issues) section or on the [alfred forum link](http://www.alfredforum.com/topic/9271-today-view-for-google-calendar-and-microsoft-exchange/?p=46109).\n\nIf you want to block access to this application perform a google [Security Checkup](https://security.google.com/settings/security/secureaccount) and look for the item similar to:\n\n![security](docs/googlePermission.png)\n\nand click **Remove**.\n\nDisabling Google support with **tc** will delete the local credentials file.\n\n## Manual Authorization\nThere are a variety of random reasons why the authorization may not work automatically.  If you are having trouble you can try to manually authorize.\n\n1) First open a terminal window by right clicking on the **Alfred Today** item in your workflow list\n\n![term](docs/rightClick.png)\n\n2) type `python src/wf_authorize_google.py` in the terminal.  This \"should\" open a web browser with the option to authorize the application.\n\nIf everything works correctly you will see something like this:\n\n```\n19:55:06 tools.py:388 INFO\n19:55:06 tools.py:389 INFO      ******  AUTHORIZATION SUCCESS  ******\n19:55:06 tools.py:390 INFO\n```\n\nIf there is a problem you will get something like this.\n\n```\n19:52:00 tools.py:301 DEBUG    Starting auth function\n19:52:00 tools.py:317 INFO\n19:52:00 tools.py:318 INFO      ******  AUTH ERROR DETECTED ******\n19:52:00 tools.py:319 INFO\n19:52:00 tools.py:320 INFO          [Errno 48] Address already in use\n19:52:00 tools.py:321 INFO\n19:52:00 tools.py:322 INFO      ********* END AUTH ERROR *********\n```\n\nIf you run into problems open an [issue](https://github.com/jeeftor/alfredToday/issues) and/or post on [alfred forum link](http://www.alfredforum.com/topic/9271-today-view-for-google-calendar-and-microsoft-exchange/?p=46109)\n\nLastly you can always check to make sure nothing is running on port `8080` with this command: `sudo lsof -i :8080`  If a process (like NGNIX is running on this port you will be unable to complete the authentication process I believe - until you kill the process.\n\n\n# Exchange Servers\n\nUse **today** to open the workflow and **tc** to open the config menu\n\nThis workflow will query an EWS (Exchange Web Service) and pull down a list of Today's meetings.  *It may only work with an office 365 online server, I have built NTLM authentication support but do not have an internal exchange server to test it against so I cannot be sure if it works*\n\nIf you are using **Skype/Lync** and you set the correct regex it will also parse out the Meeting URL\n\nYou can click **shift** on an entry to load a **QuickLook** preview of the item.\n\n![picture](docs/sample.png)\n\n\n# Configuration\n\nYou can see configuration items with the **tc** command and make changes\n\n![config](docs/config.png)\n\n## **Username** and **Password**\n\nThe workflow will extract these entries out of the OSX keychain from the keychain entry for `outlook.office365.com`\n\nIf your keychain does not contain this value, or you wish to use a different account than that which is auto detected you can manually set a username and password.\n\n![error](docs/keychain_error.png)\n\nIf you've logged into the Outlook / Exchange online website you should have this value.  If auto-detect does not work just select both the **Login** and **Password** options to set the correct credentials for login.\n\n## Exchange Server\n\nThis workflow uses a version of PyExchange modified to use **Basic Authorization** instead of **NTLM** to connect to the exchange server.  According to Microsoft NTLM is only available for internal exchange servers - so its possible this workflow will only work with cloud hosted servers.\n\nThe default server is `https://outlook.office365.com/EWS/Exchange.asmx`.  This _is_ a configurable option, however, I do not have any different exchange servers to test against so please let me know if it actually works\n\n\n## Regex \u0026 detecting Online Meetings\n\nIf you are using Skype, Lync and a calendar entry has an embedded online meeting URL, the workflow can be configured to detect and extract these URLs.\n\nFor example if your online meeting URL is defined in text similar to\n\n    \"http://meet.github.com/alfred/332344\"\n\nyou could use a regex of\n\n```perl\n(http(s)?\\:\\/\\/meet\\.github\\.com\\/(.*)?)\\\"\n```\nto extract these meeting URLs\n\n\nType **tc** to open the configuration menu, select the Regex Option\n![regex_cfg](docs/regex_cfg.png)\nAnd enter your regex\n![regex_cfg](docs/regex_enter.png)\n\nThis regular expression basically says:\n\n```\n  -- The () around the expression say to group everything inside\n  -- look for anything that starts with http or https\n  -- followed by ://\n  -- followed by meet.github\n  -- and then anything up until the 1st quotation mark\n```\n\nJust for clarity, here is an aws chime regex example:\n\n```perl\n((http)s?:\\/\\/chime.aws\\/\\d+)\n```\n\nWhich matches:\n\n```\nhttps://chime.aws/1234567890\n```\n\n# Google Calendar Selection\n\n![tgcg](docs/tgcg.png)\n\nYou have the option to display calendar data from multiple Google calendars.  You can select the calendars with the **tgcg** command.  This interaction is a little slow because it directly queries the Google servers.  If it is no longer slow than I've updated the code but not updated the documentation yet\n\n# Debug Options\n\nThe command **dbgtoday** will list all the debug options available for the workflow.  You can open up a log with:\n`dbgtoday workflow:openlog` and see fancy debug information\n\n\n# All Day events\n\nYou can now hide all day events by opening the workflow variables and setting the `hideAllDay` variable to `true` `True` or `1`\n# Troubleshooting\n\nIf things are \"messed up\" you can always try **tcreset** and then re-setup everything\n\n# Feedback \u0026 Help\n\nPlease open an [issue](https://github.com/jeeftor/alfredToday/issues) and/or post on [alfred forum link](http://www.alfredforum.com/topic/9271-today-view-for-google-calendar-and-microsoft-exchange/?p=46109).  You can also download a potentially not up to date versino from [Packal](http://www.packal.org/workflow/today-menu)\n\n# Icons\n\nMost icons in this project came from: [Icons8](https://icons8.com/web-app/new-icons/all)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeeftor%2Falfredtoday","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeeftor%2Falfredtoday","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeeftor%2Falfredtoday/lists"}