Skip to content

Commit 335cb3a

Browse files
committed
Update README.me to v2.0
2 parents 67935a5 + 6a0b64f commit 335cb3a

7 files changed

Lines changed: 1243 additions & 599 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Build and publish Docker image
2+
3+
on:
4+
push:
5+
6+
env:
7+
REGISTRY: ghcr.io
8+
IMAGE_NAME: ${{ github.repository }}
9+
10+
jobs:
11+
build-and-publish-docker-image:
12+
name: Build and publish Docker image
13+
runs-on: ubuntu-latest
14+
permissions:
15+
contents: read
16+
packages: write
17+
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v2
21+
22+
- name: Log in to the Container registry
23+
uses: docker/login-action@v1
24+
with:
25+
registry: ${{ env.REGISTRY }}
26+
username: ${{ github.actor }}
27+
password: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Extract metadata (tags, labels) for Docker
30+
id: meta
31+
uses: docker/metadata-action@v3
32+
with:
33+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
34+
35+
- name: Build and push Docker image
36+
uses: docker/build-push-action@v2
37+
with:
38+
context: .
39+
push: true
40+
tags: ${{ steps.meta.outputs.tags }}
41+
labels: ${{ steps.meta.outputs.labels }}

Dockerfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM python:3-slim-bullseye
2+
3+
WORKDIR /usr/src/app
4+
5+
COPY requirements.txt ./
6+
RUN pip install --no-cache-dir -r requirements.txt
7+
8+
COPY . .
9+
10+
ENTRYPOINT [ "python", "./autodoist.py" ]

Procfile

Lines changed: 0 additions & 1 deletion
This file was deleted.

README.md

Lines changed: 74 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# Autodoist
22

3+
*Note: v2.0 is a major overhaul of Autodoist, so please be sure to view the README in order to get up to speed with the latest changes. Thanks to everyone for helping out and supporting this project!*
4+
35
This program adds four major functionalities to Todoist to help automate your workflow:
46

5-
1) Assign automatic next-action labels for a more GTD-like workflow
7+
1) Assign automatic `@next_action` labels for a more GTD-like workflow
68
- Flexible options to label tasks sequentially or in parallel
79
- Limit labels based on a start-date or hide future tasks based on the due date
8-
2) Enable regeneration of sub-tasks in lists with a recurring date. Multiple modes possile.
10+
2) [Temporary disabled] Enable regeneration of sub-tasks in lists with a recurring date. Multiple modes possible.
911
3) Postpone the end-of-day time to after midnight to finish your daily recurring tasks
10-
4) Make multiple items (un)checkable at the same time
12+
4) Make multiple tasks (un)checkable at the same time
1113

1214
If this tool helped you out, I would really appreciate your support by providing me with some coffee!
1315

@@ -17,7 +19,7 @@ If this tool helped you out, I would really appreciate your support by providing
1719

1820
# Requirements
1921

20-
Autodoist has been build with Python 3.9.1, which is the recommended version. Older versions of 3.x should be compatible, however be aware that they have not been tested.
22+
Autodoist has been build with Python 3.11.1, which is the recommended version. Older versions of 3.x should be compatible, however be aware that they have not been tested.
2123

2224
To run Autodoist the following packages are required:
2325
* ```todoist-python```
@@ -29,61 +31,89 @@ For your convenience a requirements.txt is provided, which allows you to install
2931

3032
# 1. Automatic next action labels
3133

32-
The program looks for pre-defined tags in the name of every project, section, or parentless tasks in your Todoist account to automatically add and remove `@next_action` labels. To create a simple list of all your next actions you can add a new filter in your Todoist with e.g.: @next_action & #project_name.
34+
The program looks for pre-defined tags in the name of every project, section, or parentless tasks in your Todoist account to automatically add and remove `@next_action` labels.
3335

34-
Projects, sections, and parentless tasks can be tagged independently from each other to create the required functionality. If this tag is not defined, it will not activate this functionality. The result will be a clear, current and comprehensive list of next actions without the need for further thought.
36+
Projects, sections, and parentless tasks can be tagged independently of each other to create the required functionality. If this tag is not defined, it will not activate this functionality. The result will be a clear, current and comprehensive list of next actions without the need for further thought.
3537

36-
See the example given at [running Autodoist](#running-autodoist) on how to run this mode. If the label does not exist yet in your Todoist, a possibility is given to automatically create it. Todoist Premium is required in order to use labels and to make this functionality possible.
38+
See the example given at [running Autodoist](#running-autodoist) on how to run this mode. If the label does not exist yet in your Todoist, a possibility is given to automatically create it.
3739

3840
## Useful filter tip
3941

40-
For a more GTD-like workflow, you can use Todoist filters to create a clean and cohesive list that only contains your actionable tasks. As a simple example you could use the following filter:
42+
For a more GTD-like workflow, you can use Todoist filters to create a clean and cohesive list that only contains your actionable tasks. As a simple example, you could use the following filter:
4143

4244
`@next_action & #PROJECT_NAME`
4345

4446
## Sequential processing
4547

46-
If a project, section, or parentless task ends with `--`, both the parentless tasks and its sub-tasks will be treated as a priority queue and the most important will be labeled. Importance is determined by order in the list.
48+
If a project, section, or parentless task ends with a dash `-`, the tasks will be treated sequentially in a priority queue, where only the first task that is found is labeled. If a task contains sub-tasks, the first lowest task is labeled instead.
4749

48-
![Serial task](https://i.imgur.com/SUkhPiE.gif)
50+
![Sequential task labeling](https://i.imgur.com/ZUKbA8E.gif)
4951

5052
## Parallel processing
5153

52-
If a project, section, or parentless task name ends with `//`, both the parentless tasks and its sub-tasks will be treated as parallel. A waterfall processing is applied, where the lowest possible sub-tasks are labelled.
54+
If a project, section, or parentless task name ends with an equal sign `=`, all tasks will be treated in parallel. A waterfall processing is applied, where the lowest possible (sub-)tasks are labelled.
5355

54-
![Parallel task](https://i.imgur.com/NPTLQ8B.gif)
56+
![Parallel task labeling](https://i.imgur.com/xZZ0kEM.gif)
5557

5658
## Advanced labelling
5759

58-
If a project or section ends with `-/`, all parentless tasks are processed sequentially, and its sub-tasks in parallel.
60+
Projects, sections, and (parentless) tasks can be used to specify how the levels under them should behave. This means that:
61+
62+
- A project can accept up to three tags, to specify how the sections, parentless tasks, and subtasks should behave.
63+
- A section can accept up to two tags, to specify parentless tasks and subtasks should behave.
64+
- A task at any level can be labelled with one tag, to specify how its sub-tasks should behave.
65+
66+
Tags can be applied on each level simultaneously, where the lower level setting will always override the one specified in the levels above.
5967

60-
[See example](https://i.imgur.com/uGJFeXB.gif)
68+
### Shorthand notation
6169

62-
If a project or section ends with `/-`, all parentless tasks are processed in parallel, and its sub-tasks sequentially.
70+
If fewer tags then needed are specified, the last one is simply copied. E.g. if a project has the tag `=` this is similar to `===`, or if a project has `=-` this is similar to `=--`. Same for sections, `=` is similar to `==`.
6371

64-
[See example](https://i.imgur.com/5lZ1BVI.gif)
72+
### Project labeling examples
73+
- If a project ends with `---`, only the first section has tasks that are handled sequentially.
74+
- If a project ends with `=--`, all sections have tasks that are handled sequentially.
75+
- If a project ends with `-=-`, only the first section has parallel parentless tasks with sequential sub-tasks.
76+
- If a project ends with `--=`, only the first section and first parentless tasks has parallel sub-tasks.
77+
- If a project ends with `==-`, all sections and all parentless tasks will have sub-tasks are handled sequentially.
78+
- If a project ends with `=-=`, all sections will have parentless tasks that are processed sequentially, but all sub-tasks are handled in parallel.
79+
- If a project ends with `-==`, only the first section has parallel tasks.
80+
- If a project ends with `===`, all tasks are handled in parallel.
6581

66-
Any parentless task can also be be given a type by appending `//` or `--` to the name of the task. This works if there is no project type, and will override a previously defined project type.
82+
### Section labeling examples
83+
- If a section ends with `--`, only the first parentless task will have sub-tasks that are handled sequentially.
84+
- If a section ends with `=-`, all parentless tasks will have sub-tasks that are handled sequentially.
85+
- If a section ends with `-=`, only the first parentless task has sub-tasks that are handled in parallel.
86+
- If a section ends with `==`, all tasks are handled in parallel.
6787

68-
[See example 1 with a parallel project](https://i.imgur.com/d9Qfq0v.gif)
88+
### Tasks labeling examples
89+
- If a task ends with `-`, the sub-tasks are handled sequentially.
90+
- If a task ends with `=`, the sub-tasks are handled in parallel.
6991

70-
[See example 2 with a serial project](https://i.imgur.com/JfaAOzZ.gif)
92+
### Kanban board labeling
93+
A standard workflow for Kanban boards is to have one actionable task per column/section, which is then moved to the next column when needed. Most often, the most right column is the 'done' section. To ensure that every column only has one labelled task and the last column contains no labelled tasks, you could do either of two things:
94+
- Add the `=--` tag to the project name, and disable labelling for the 'done' section by adding `*` to either the start or end of the section name.
95+
- Add the `--` tag to every section that you want to have labels.
7196

72-
Note: Todoist sections don't like to have a slash in the name, it will automatically change to an underscore. The default label options will recognize this to make it work regardless. Of course you're always free to define your own custom label symbols.
7397

7498
## Start/Due date enhanced experience
7599

76100
Two methods are provided to hide tasks that are not relevant yet.
77101

78-
- Prevent labels by defining a start-date that is added to the task itself. The label is only assigned if this date is reached. You can define the start-date by adding 'start=DD-MM-YYYY'. On the other hand the start date can be defined as several days or weeks before the due-date by using either 'start=due-<NUMBER_OF_DAYS>d' or 'start=due-<NUMBER_OF_WEEKS>w'. This is especially useful for recurring tasks!
102+
- Prevent labels by defining a start-date that is added to the task itself. The label is only assigned if this date is reached. You can define the start-date by adding 'start=DD-MM-YYYY'. On the other hand, the start date can be defined as several days or weeks before the due-date by using either 'start=due-<NUMBER_OF_DAYS>d' or 'start=due-<NUMBER_OF_WEEKS>w'. This is especially useful for recurring tasks!
79103
[See an example of using start-dates](https://i.imgur.com/WJRoJzW.png).
80104

81105
- Prevent labels of all tasks if the due date is too far in the future. Define the amount by running with the argument '-hf <NUMBER_OF_DAYS>'.
82106
[See an example of the hide-future functionality](https://i.imgur.com/LzSoRUm.png).
83107

84108
# 2. Regenerate sub-tasks in recurring lists
85109

86-
The program looks for all parentless tasks with a recurring date. If they contain sub-tasks, they will be regenerated in the same order when the parentless task is checked. Todoist Premium is not required for this functionality.
110+
*DISCLAIMER: This feature has been disabled for now due to two reasons:*
111+
- *Regeneration is a [core feature of Todoist nowadays](https://todoist.com/help/articles/can-i-reset-sub-tasks). This was made possible thanks to all of you who are using and supporting Autodoist, which resulted in Doist to include this too! Thank you all for making this happen!*
112+
- *In the new REST API v2 it's currently not possible to see completed tasks, which makes regeneration a bit difficult.*
113+
114+
*Nevertheless, the Todoist implementation is still more limited than Autodoist, it does not restore the original order of the sub-tasks, and deeper sub-tasks can't be reset. I therefore believe it is still useful for this feature to be re-enabled in the near future.*
115+
116+
Autodoist looks for all parentless tasks with a recurring date. If they contain sub-tasks, they will be regenerated in the same order when the parentless task is checked.
87117

88118
![See example](https://i.imgur.com/WKKd14o.gif)
89119

@@ -94,21 +124,21 @@ To give you more flexibility, multiple modes are provided:
94124

95125
When this functionality is activated, it is possible to chose which mode is used as overall functionality for your Todoist. See the example given at [running Autodoist](#running-autodoist).
96126

97-
In addition you can override the overall mode by adding the labels `Regen_off`, `Regen_all`, or `Regen_all_if_completed` to one of your main recurrings task. These labels will automatically be created for you.
127+
In addition you can override the overall mode by adding the labels `Regen_off`, `Regen_all`, or `Regen_all_if_completed` to one of your main recurring task. These labels will automatically be created for you.
98128

99129
# 3. Postpone the end-of-day
100130

101-
You have a daily recurring task, but you're up working late and now it's past midnight. When this happens Todoist will automatically mark it overdue, and when checked by you it moves to tomorrow. This means that after a good nights rest you can't complete the task that day!
131+
You have a daily recurring task, but you're up working late and now it's past midnight. When this happens, Todoist will automatically mark it overdue and when checked by you it moves to tomorrow. This means that after a good night's rest you can't complete the task that day!
102132

103-
By setting an alternative time for the end-of-day you can now finish your work after midnight and the new date will automatically be corrected for you. Todoist Premium is not required for this functionality.
133+
By setting an alternative time for the end-of-day you can now finish your work after midnight and the new date will automatically be corrected for you.
104134

105135
![See example 1](https://i.imgur.com/tvnTMOJ.gif)
106136

107-
# 4. Make multiple items uncheckable / re-checkable at the same time
137+
# 4. Make multiple tasks uncheckable / re-checkable at the same time
108138

109139
Todoist allows the asterisk symbol `* ` to be used to ensure tasks can't be checked by turning them into headers. Now you are able to do this en masse!
110140

111-
Simply add `** ` or `!* ` in front of a project, section, or top item, to automatically turn all the items that it includes into respectively headers or checkable tasks. Note: when used in a project title or section title, Todoist will replace an exclamation mark with an underscore; this functionality should nevertheless still work.
141+
Simply add `** ` or `-* ` in front of a project, section, or parentless task to automatically turn all the tasks that it includes into respectively headers or checkable tasks.
112142

113143
# Executing Autodoist
114144

@@ -122,7 +152,7 @@ If you want to enable labelling mode, run with the `-l` argument:
122152

123153
python autodoist.py -a <API Key> -l <LABEL_NAME>
124154

125-
If you want to enable regeneration of sub-tasks in recurring lists, run with the `-r` argument followed by a mode number for the overall functionality (1: no regeneration, 2: regenerate all, 3: regenerate ony if all sub-tasks are completed):
155+
If you want to enable regeneration of sub-tasks in recurring lists, run with the `-r` argument followed by a mode number for the overall functionality (1: no regeneration, 2: regenerate all, 3: regenerate only if all sub-tasks are completed):
126156

127157
python autodoist.py -a <API Key> -r <NUMBER>
128158

@@ -136,10 +166,12 @@ These modes can be run individually, or combined with each other.
136166

137167
Several additional arguments can be provided, for example to change the suffix tags for parallel and sequential projects:
138168

139-
python autodoist.py --pp_suffix <tag>
140-
python autodoist.py --ss_suffix <tag>
169+
python autodoist.py --p_suffix <tag>
170+
python autodoist.py --s_suffix <tag>
171+
172+
Note: Be aware that Todoist sections don't like to have a slash '/' in the name, which will automatically change to an underscore. Detection of the tag will not work.
141173

142-
Or if you want to hide all tasks due in the future:
174+
If you want to hide all tasks due in the future:
143175

144176
python autodoist.py --hf <NUMBER_OF_DAYS>
145177

@@ -150,3 +182,14 @@ In addition, if you experience issues with syncing you can increase the api sync
150182
For all arguments, please check out the help:
151183

152184
python autodoist.py --help
185+
186+
187+
## Docker container
188+
189+
To build the docker container, check out the repository and run:
190+
191+
docker build . --tag autodoist:latest
192+
193+
To run autodoist inside the docker container:
194+
195+
docker run -it autodoist:latest

0 commit comments

Comments
 (0)