nextcloud / tasks

:white_check_mark: Tasks app for Nextcloud
https://apps.nextcloud.com/apps/tasks
GNU Affero General Public License v3.0
575 stars 100 forks source link

[Feature Request] Repeating tasks #34

Open revjtanton opened 7 years ago

revjtanton commented 7 years ago

Repeating tasks, like calendar items, would be a really useful feature. Right now I'm putting repeating tasks in the calendar (stuff like taking out the trash weekly) but really that'd be better as a repeating task in this app.

I'm not very familiar with the Nextcloud platform, but it looks pretty straight forward. I will fork this repo and try my hand at adding this feature myself. Between my unfamiliarity with the platform, and other projects, I may not ever get it done though. I'm posting the idea here in hopes that someone else who is more knowledgable about this project take up this cause.

raimund-schluessler commented 4 years ago

@akrea There are several android apps which sync via CalDAV and can be used in combination with Nextcloud Tasks. We will not develop another one here.

Jerome2103 commented 3 years ago

I like it too

karan commented 3 years ago

Just to add a data point, here's what I've noticed with the tasks.org client (NC tasks over CalDAV):

I'm not certain if/when the Let server schedule recurring tasks is needed for NC tasks.

abaker commented 3 years ago

Sorry, that setting is not properly explained. When toggled on it disables Tasks.org's recurring task logic. It is intended to be turned on for servers that handle recurrence, like Open-Xchange

agentlibre commented 3 years ago

I am also in favor of repeating tasks. I wanted to add a few more thoughts.

Suppose I schedule a repeating task for every Monday. On Monday, when I look at my "Today" tasks, it should appear. If I mark it off as complete, it should disappear until next Monday, when it should reappear. I suspect there's wide consensus on that point.

If I don't do it on Monday, however, to my mind it's still outstanding, so on Tuesday it should still appear as an (over-)due task. There may be a few cases where people will want it to just disappear (e.g. if you didn't take out the garbage on Monday, there's no point in doing it on Tuesday), but those are probably few enough that just checking them off as done is sufficient. Perhaps an option is needed there, but I think it's probably low priority.

For tasks that are completed late, there's the question of when to reschedule them. In many cases, if it is scheduled for Monday, it should be rescheduled for next Monday regardless of when it has been completed. However, there are other cases where the interval is more important then the start date. Suppose I want to change the oil in my car every three months. I set up a task to start on January 1 and repeat every 3 months. Come April, though, I'm out of town and don't change the oil until April 15th. Some people will think the next oil change should be June 1, but others will want June 15 (because that's when the oil is 3 months old). Other scheduling apps handle this by allowing rescheduling to be on a date (1st of the month every 3rd months) or on an interval (every 3 months).

Anything that can be done for repeating tasks would be wonderful. The above is just to help raise the issues a developer may want to consider. If I complete the task on Tuesday, it should disappear until

I second the above comment. The idea is not to scroll a list of endless new tasks but to enable the monitoring of (recurring) tasks on a day-by-day or week-by-week.

A very important aspect not to be omitted in the development: recurring tasks should be made compatible with Nextcloud Calendar and Nextcloud Deck.

Thank you very much for everything you do for the community! Nextcloud is a wonderful ecosystem! 🙏🏻

petesimonic commented 3 years ago

Just look into the logic of https://tasks.org/ for recurrence handling. They provide ideal approach (I didn't saw an unsatisfied user with it); and we don't going in the direction to reinvent anything better here in comments.

I am also in favor of repeating tasks. I wanted to add a few more thoughts. Suppose I schedule a repeating task for every Monday. On Monday, when I look at my "Today" tasks, it should appear. If I mark it off as complete, it should disappear until next Monday, when it should reappear. I suspect there's wide consensus on that point. If I don't do it on Monday, however, to my mind it's still outstanding, so on Tuesday it should still appear as an (over-)due task. There may be a few cases where people will want it to just disappear (e.g. if you didn't take out the garbage on Monday, there's no point in doing it on Tuesday), but those are probably few enough that just checking them off as done is sufficient. Perhaps an option is needed there, but I think it's probably low priority. For tasks that are completed late, there's the question of when to reschedule them. In many cases, if it is scheduled for Monday, it should be rescheduled for next Monday regardless of when it has been completed. However, there are other cases where the interval is more important then the start date. Suppose I want to change the oil in my car every three months. I set up a task to start on January 1 and repeat every 3 months. Come April, though, I'm out of town and don't change the oil until April 15th. Some people will think the next oil change should be June 1, but others will want June 15 (because that's when the oil is 3 months old). Other scheduling apps handle this by allowing rescheduling to be on a date (1st of the month every 3rd months) or on an interval (every 3 months). Anything that can be done for repeating tasks would be wonderful. The above is just to help raise the issues a developer may want to consider. If I complete the task on Tuesday, it should disappear until

I second the above comment. The idea is not to scroll a list of endless new tasks but to enable the monitoring of (recurring) tasks on a day-by-day or week-by-week.

A very important aspect not to be omitted in the development: recurring tasks should be made compatible with Nextcloud Calendar and Nextcloud Deck.

Thank you very much for everything you do for the community! Nextcloud is a wonderful ecosystem! 🙏🏻

Mela commented 3 years ago

Yes, please add repeating/recurring tasks. I just switched from Toodledo to Nextcloud Tasks and was bummed out that this feature does not allready exist. I have quite some tasks I need to do on a weekly, monthly or yearly basis and I really liked the option to have them pop up when they are do without having to add a new task every time.

petesimonic commented 3 years ago

Most viable workaround I saw was adding "create a same task with due date in particular period" into the task manually and count it as done only if it is created.

P. S. Was really surprised Thunderbird don't understand repeat in particular period after done**.

Yes, please add repeating/recurring tasks. I just switched from Toodledo to Nextcloud Tasks and was bummed out that this feature does not allready exist.

You can use it just as CalDAV server. Then recurrence will be managed by client.

I have quite some tasks I need to do on a weekly, monthly or yearly basis and I really liked the option to have them pop up when they are do without having to add a new task every time.

d-chell commented 3 years ago

Wanted to second this feature request, agreeing with how agentlibre sees it

The idea is not to scroll a list of endless new tasks but to enable the monitoring of (recurring) tasks on a day-by-day or week-by-week. A very important aspect not to be omitted in the development: recurring tasks should be made compatible with Nextcloud Calendar and Nextcloud Deck.

I'd love to have everything centralized in Nextcloud without integrating tasks.org, if possible.

Thanks to all the NC developers!

meichthys commented 3 years ago

If you're interested in this feature, contribute to the bounty here: ✅ https://www.bountysource.com/issues/40960486-feature-request-repeating-tasks Apart from contributing code, this is probably the best way to speed up development on a feature request like this one. Support our open source developers! 🚀

Extarys commented 3 years ago

Taking a look at this if I can implement it with my limited time and knowledge :joy:

How should completed reoccurring tasks looks like? Right now: List of tasks

Completed tasks have the date/time at which they were completed. I never really used a Task/To-do list app before therefore I'm not sure how it should be managed. I would like some screenshot and comments about how it works elsewhere and what people would like.

  1. My understanding is that Nextcloud server already have the capabilities for reoccurring events, as it is implemented in the Calendar app, therefore all the work needed can happen inside the Tasks app.
  2. Should reoccurring tasks have their due date before the next one? 1.1. Assumption 1: A daily task max due date would be before the next day 1.2. Assumption 2: A failed daily task shouldn't allowed to be "completed", but marked as "failed"
  3. I would like the implement a list of tasks with more options, like some kind of "habits" list, if 1.1 shouldn't be implemented in the current task system. 2.1 Some kind of graph/data history about reoccurring tasks could be dope
  4. Contrary to the Calendar app, where there is a repeat tab in the info sidebar, I would put the reoccurring options inside the details tab if it doesn't make it feel too cluttered, although the parameters would need to be multi-line, not like everything is right now. I'm thinking about collapsing the settings related to this.

Right now: Task options

I'll play with the UI and post some WIP eventually but I'd like to gather visual data about how people expect this to work and look.

meichthys commented 3 years ago
  1. This is my understanding as well. I have reoccurring reminders being synced via iOS Reminders without too much trouble.

  2. No, I don't think so. Generally most task managers do not relate the next task until the previous one is completed, so the task should never exist twice as incomplete. I think most task managers have no due date by default.

  3. This sounds interesting but should probably be tabled until the repeating tasks are properly handled IMO.

  4. I completely agree.

I look forward to following your progress and would be glad to test anything out if needed 👍

crazybadger commented 3 years ago

Thanks for looking at this.

My main use-case for repeating tasks is working within the GTD framework, so I have regular daily tasks that I complete and that recreate with a set end date.

For example, I have a Review Inbox task that I complete every day and it repeats the following day as I’ve set it to repeat daily. I have a Review Weekly Actions task that I complete weekly and when I complete it create a new task 1 week in the future.

I’d also like to be able to create task for checking things on a more infrequent basis (e.g. updating SSL certificates or server packages) but when I complete them they repeat with a end date based on the repeat frequency I’d set on the task.

Hope that helps?

Adrian

On 4 Sep 2021, at 23:30, MeIchthys @.***> wrote:

This is my understanding as well. I have reoccurring reminders being synced via iOS Reminders without too much trouble.

No, I don't think so. Generally most task managers do not relate the next task until the previous one is completed, so the task should never exist twice as incomplete. I think most task managers have no due date by default.

This sounds interesting but should probably be tabled until the repeating tasks are properly handled IMO.

I completely agree.

I look forward to following your progress and would be glad to test anything out if needed 👍

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/nextcloud/tasks/issues/34#issuecomment-913049053, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB7O72IIJ45JVQOGJOBUJKTUAKMY3ANCNFSM4C4O27MA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

raimund-schluessler commented 3 years ago
  1. Contrary to the Calendar app, where there is a repeat tab in the info sidebar, I would put the reoccurring options inside the details tab if it doesn't make it feel too cluttered, although the parameters would need to be multi-line, not like everything is right now. I'm thinking about collapsing the settings related to this.

We will create a separate Tab for repetitions in the sidebar (there even is a placeholder already): https://github.com/nextcloud/tasks/blob/aebdb4addb75bca254d0c3f247b793070bca77d8/src/views/AppSidebar.vue#L243-L250

The General / Info tab contains quite a lot of entries already, and with repetitions, it will be to cluttered. But that is a minor implementation detail not to worry to much about at the moment.

spacekpe commented 3 years ago

FTR Mozilla Thunderbird has full support for repeating tasks, so maybe it's user interface can serve as an example how to sort out corner cases?

For repeating tasks, it "instantiates" a new task for each repetition even if the previous one was not finished. E.g. if the task is monthly "pay water bill" on every 1st day of month, a new unfinished task will show up even if the previous one is not marked as finished. So if the user did not confirm paying water bill six months in a row, the task list will display six unfinished tasks each with different due date in past - which reflects the reality of missing payments for six bills.

spacekpe commented 3 years ago

Possible recurrence rules can be pretty complicated, which is why all complete recurrence UIs have lots of knobs as well. See https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 for recurrence specification.

timkrief commented 3 years ago

If I can add to the conversation, I think the way the UI/UX of the tasks.org app works for repeating tasks is really good and could be a good inspiration.

djibux commented 3 years ago

For repeating tasks, it "instantiates" a new task for each repetition even if the previous one was not finished. E.g. if the task is monthly "pay water bill" on every 1st day of month, a new unfinished task will show up even if the previous one is not marked as finished. So if the user did not confirm paying water bill six months in a row, the task list will display six unfinished tasks each with different due date in past - which reflects the reality of missing payments for six bills.

I believe one should be able to tell the app if it must repeat the task according to its due date or its completion date. The second one is very useful. For example if I need to get my car checked every year, or change the filter on my water filter jug every month, the app needs to instantiate a new task upon completion, not upon due date. If I tend to procrastinate, or if I'm away on vacation, the two dates could end up a few weeks apart.

The todo.txt "standard" implemented for instance in Simpletask allows that. Thunderbird does not as far as I know.

meichthys commented 3 years ago

@Extarys Have you made any progress on this, or is there anything we can do to help out?

JackDrydenUK commented 3 years ago

Just jumping in here to say I also could really use this feature!

I can't program but I'm more than happy to test anything or offer advice on UX design where helpful.

Discostu36 commented 3 years ago

For repeating tasks, it "instantiates" a new task for each repetition even if the previous one was not finished. E.g. if the task is monthly "pay water bill" on every 1st day of month, a new unfinished task will show up even if the previous one is not marked as finished. So if the user did not confirm paying water bill six months in a row, the task list will display six unfinished tasks each with different due date in past - which reflects the reality of missing payments for six bills.

This might be useful for paying bills but it is not for most recurring tasks that I have. I don't need to clean the bathroom two times in a row when I have skipped it once.

alexghergh commented 3 years ago

Well in this case we can agree there could possibly be an option (for a particular task) to change between the behaviour? I am not sure however how this can be stored in a database and used accordingly.

djibux commented 3 years ago

Well the feature I mentioned above is a simple solution and seems to be pretty standard: deciding on weather the new event should be created from the due date or the completion date.

I use both, they both make sense.

Here is a screenshot from https://tasks.org/: Screenshot_20211031-202310_Tasks

meichthys commented 3 years ago

@djibux Agreed. They both definitely have their place. Now let's argue about which one is the default 🤣

jpschewe commented 3 years ago

I'm currently using tasks.org with Nextcloud and in the past used Toodledo. Both have the option to repeat based on due date or completion date; both default to repeat based on due date.

Using tasks.org I can have it handle the repeating appointments or delegate to the server. When this is implemented in Nextcloud Tasks should there be an option to specify if Nextcloud should handle the repeat or not? Or should Nextcloud always handle the repeats?

Discostu36 commented 3 years ago

Using tasks.org I can have it handle the repeating appointments or delegate to the server. When this is implemented in Nextcloud Tasks should there be an option to specify if Nextcloud should handle the repeat or not? Or should Nextcloud always handle the repeats?

At the moment, tasks.org marks the task completed, changes its due date and reopens it. As soon as Nextcloud can handle repeated tasks, tasks.org doesn't have to do that anymore.

Eschguy commented 2 years ago

Just adding my voice of support for this feature! Looks like it's been a long process!

f0rkth1s commented 2 years ago

Can't wait for this feature to be functioning! Thanks.

trevholland commented 2 years ago

Just chiming in that I would also love this feature!

ghost commented 2 years ago

It strikes me that there are really two parts to this request:

  1. Allow NextCloud to store and retrieve repeating tasks in the database, if only for sync purposes.
  2. Present repeating tasks in the web-based UI.

I believe that we currently have neither, though it's been a while since I tested #1 as it used to trash my repeating tasks. Is that still the case, or does NextCloud successfully sync and retain task repetition data?

While we want both, of course, just getting #1 in would allow external applications (Tasks.org, OpenTasks, etc) to access and operate on task data in the Nextcloud, including repeating tasks. For many users, these apps are their only interface with Task management, so they don't care about the UI. In my case, I'd like to sync my phone-based task data with NextCloud so that it would get captured in my NC database backups for recovery purposes. I still want the UI, but it's a lesser priority.

So, while we want both, just having #1 in production would be beneficial to a lot of users, with #2 following. Thoughts?

bpmartin20 commented 2 years ago

Sorry ... prior post regarding two parts that is now attributed to "ghost" was mine. Cleaned up my old github accounts and the attribution went away.

meichthys commented 2 years ago

I believe number 1 is already handled - at least in some capacity since I can sync repeating tasks from my iPhone to nextcloud and back to my Mac without any serious issues. (Both the Mac and iPhone show the tasks as repeating tasks.)

meichthys commented 2 years ago

The problem comes when I try to interact with a repeating task using the web interface. At that point it strips off the repeating task and o think I’ve seen it duplicate the task. It’s a mess. Don’t try to use the web I terrace with repeating tasks!

BaderSZ commented 2 years ago

I believe number 1 is already handled - at least in some capacity since I can sync repeating tasks from my iPhone to nextcloud and back to my Mac without any serious issues. (Both the Mac and iPhone show the tasks as repeating tasks.)

The issue that I can think of is that a proper implementation (with RRULE) might break some clients, although I do not care at this point. The main issue for me would be figuring out how to properly integrate this to the UI. I'll have to dive deeper and see what has to be done, including a TODO.

Question: Should we implement calendar-js first?

Given that the issue has been open since 2017, it seems to be a non-priority to the devs. So I'll take a look over the weekend. No promises.

raimund-schluessler commented 2 years ago

Question: Should we implement calendar-js first?

I think that would be the best approach, as calendar-js can handle repetitions already. But some adjustments to make it work properly for Tasks are necessary for sure.

Given that the issue has been open since 2017, it seems to be a non-priority to the devs. So I'll take a look over the weekend. No promises.

Well, it's a very complex feature, UI as well as logic wise. And given limited (free)time that I can dedicate to this app, there are lower hanging fruits that are easier to implement and helpful as well.

BaderSZ commented 2 years ago

Given that the issue has been open since 2017, it seems to be a non-priority to the devs. So I'll take a look over the weekend. No promises.

Well, it's a very complex feature, UI as well as logic wise. And given limited (free)time that I can dedicate to this app, there are lower hanging fruits that are easier to implement and helpful as well.

I definitely understand. And as we both might say in german, das war nicht böse gemeint. :)

raimund-schluessler commented 2 years ago

I definitely understand. And as we both might say in german, das war nicht böse gemeint. :)

All good, no offense taken :slightly_smiling_face:

RayBB commented 2 years ago

@raimund-schluessler I think the biggest problem right now is that when you check off a task that has an RRULE NC (nextcloud) not only ignores that but also removes it.

The smallest step I can think of to make an improvement here is to just make it so that if RRULE is present move the DTSTMP forward appropriately. We can do this without making an HTML/CSS changes at all.

The major downside here is that if a user checks off a task that is recurring the task will reappear without any clear reason. Personally, I think this is a reasonable tradeoff because:

  1. Nobody who just uses nextcloud would have an RRULE set
  2. They would have to be using some other client and are probably aware of the problem of recurring tasks breaking in NC anyway.
  3. They can still delete the task if they choose

Once that is complete NC tasks will stop wiping out recurring tasks and then someone can work on the UI side of things to indicate that a task is recurring and set recurrence.

Do you think this is a reasonable path forward? If so, I am willing to dig in and try to get RRULE acknowledged.

If anyone would like to work on this with me, or just share ideas feel free to Tweet me https://twitter.com/RayScript I'm pretty comfortable in the JS world but this will be my first time touching a NC app (but I already have the dev env setup locally!) cc: @BaderSZ

RayBB commented 2 years ago

@raimund-schluessler For the UI side of things I think we can reuse the Repeat component from nextcloud/calendar. It looks like this.

To do that, I think we might need to tweak it to be a bit more generic. Then move it to https://github.com/nextcloud/nextcloud-vue, which seems to be the place to share Vue components in nextcloud.

Does this sound like the correct approach? If so, should I open an issue in nextcloud-vue, nextcloud/calendar, or both?

BaderSZ commented 2 years ago

Does this sound like the correct approach? If so, should I open an issue in nextcloud-vue, nextcloud/calendar, or both?

I'm presuming this wasn't included in nextcloud-vue because NC Calendar was the only App using it. It depends on what we want to do, or specifically, what the nextcloud team prefers: making a new repeat component more fitting for tasks, or reusing this one.

I'd prefer to re-use, but it's not really my call.

denppa commented 2 years ago

So is it possible to set a recurring task? On an iphone reminder we can do that and the task actually repeats. Is this done by the iphone reminder app or by the task app?

Never mind the IOS app doesn't work either.

meichthys commented 2 years ago

Yes, the repeating tasks do work fine in iOS, you just can't use the Nextcloud web interface to create/modify them otherwise the repeating part of the task will be corrupted.

denppa commented 2 years ago

Yes, the repeating tasks do work fine in iOS, you just can't use the Nextcloud web interface to create/modify them otherwise the repeating part of the task will be corrupted.

That is why, after I marked the repeat tasks off on nextcloud they are no longer working in iOS...

Will the feature be native in nextcloud soon? I think github says it will be in the next version?

meichthys commented 2 years ago

That is why, after I marked the repeat tasks off on nextcloud they are no longer working in iOS...

That's correct. The web interface breaks repeating tasks, so it's best not to use it for those. Where did you see that it will be in the next version?

denppa commented 2 years ago

That is why, after I marked the repeat tasks off on nextcloud they are no longer working in iOS...

That's correct. The web interface breaks repeating tasks, so it's best not to use it for those. Where did you see that it will be in the next version?

https://github.com/nextcloud/tasks/milestone/9 Here, this issue is one of the mile stones, not sure if that is what it means.

raimund-schluessler commented 2 years ago

Yes, it is correct that if I find enough time to work on a new major feature of the Tasks app, it will first be repeating tasks. However, keeping the app usable for new Nextcloud versions and adjusting/fixing minor issues (aka maintaining the code) already takes most of the time I can dedicate to the app. That's why I can't give any timeline for the implementation of this feature, as much as I would like to.

BaderSZ commented 2 years ago

This is a work in progress on our (me and @RayBB)'s end. Don't panic, but again, next to uni and a job, I'm sneaking in work here and there.

So far, Milestone 9 has no due date, but I'll see if I can get this done within a few weeks.

denppa commented 2 years ago

Hey, I have to thank you devs for making private data hosting services like tasks possible. I give you my best wishes on reaching this next big milestone!

jc97 commented 2 years ago

What about making repeating tasks in the web interface read-only until they are supported by the web interface?

petesimonic commented 2 years ago

Let me ask kind of a stupid question. What will be with repeating task in a NC server, which were repeating for years after the feature will go live? I mean the ones created by Tasks (the Android app) primarily, and also those created with Thunderbird (though it seems like Tb manages it fully on its end). Will they become repeating in NC interfaces too, or what?

So is it possible to set a recurring task? On an iphone reminder we can do that and the task actually repeats. Is this done by the iphone reminder app or by the task app?