Plugin: Repeating To-Dos [Revived]

Overview

This plugin has been forked from the original from BeatLink. I’m the new maintainer for this plugin. Original page can be found on the forum. Please note that I will only address issues posted on Github.

This plugin allows to-do's in joplin to be repeated based on the to-do alarm date. When a to-do is checked as complete, the todo alarm date is immediately reset to the next recurrence date, and the to-do is unmarked as completed.

This plugin allows to-dos to be repeated every minute, hour, day, week, month and year, based on the to-do alarm date and time. Weekly to-dos can also recur on specific weekdays (eg Mon-Fri or Sun, Sat and Wendesday, etc.) and monthly to-dos can recur on specific weekdays of the month (eg, the first Sunday, the second Friday, the last Tuesday, etc)

The plugin also stops to-dos from being repeated after a certain number of repetitions or after a specific date

Installation

Repeating Todos can be installed from within Joplin by navigating to the plugins page in the settings menu then searching for and installing "Repeating Todos"

Links

2 Likes

Issue #3 has been resolved. This plugin now supports the Joplin Mobile App. Not for mobile? · Issue #3 · TheScriptingGuy/Joplin-Repeating-Todos-Plugin · GitHub

The repeating todos are not working on my laptop either :frowning:

Here is my setup:

Joplin 3.4.12 (prod, win32)

Device: win32, AMD Ryzen 5 7520U with Radeon Graphics
Client ID: e8988413aa7f4bbeadc6449f6a9dd496
Sync Version: 3
Profile Version: 48
Keychain Supported: Yes
Alternative instance ID: -

Revision: e9a9f68

Admonition markdown extension: 1.1.0
Backup: 1.4.3
Bidirectional Links: 0.2.1
Collapsible blocks: 1.2.1
Convert Text To New Note: 1.5.1
Csv Import: 1.0.1
Cursor Sync: 2.1.0
Embed Search: 2.0.0
Hotfolder: 1.2.2
Hotstrings & Hotkeys: 1.0.1
Import local CSS: 1.1.0
Joplin Batch: 0.2.2
Joplin DDDot: 0.4.4
Journal: 2.0.0
Math Mode: 0.8.3
Note list (Preview): 1.1.0
Note list and sidebar toggle buttons: 1.0.3
Note overview: 1.7.1
OCR: 0.3.2
Repeating To-Dos: 1.0.5
Search & Replace: 2.2.0
Simple Highlighter: 1.0.0
Suitcase: 0.5.0
Templates: 3.0.0
Time Slip: 1.1.0

After creating a todo note, I went ahead and attempted to make it repeating. This was my setting:

The following was added in the front of my note (could this be moved to the bottom and preferably not so obvious in a future release?):

A couple of things caught my eye:

  • enabled: false???
  • stopNumber:1??? I clearly indicated 3x

Could it be that the interface does not write the proper settings to the note? Also, when I reopen the note to check the settings, none of the settings showed up.

Lastly, I tested the plugin by checking off this todo, moved to a different note, waited several minutes after the initial “alarm” but nothing changed with the note. The repeating did not occur.

Next test, where I set the alarm several minutes later. I waited until the alarm had passed and checked the todo as done. When I did this I saw that the “enabled” flag was now true. I went to a different note and waited for 2 minutes and checked my todo: still no repeating….

Wondering if it is working for anybody else.

I can’t seem to reproduce the issue both on the windows version or the mobile app. As you stated, you also seem to use a windows device. I need more debug information to take a look into your issue. I have build in support for enabling debug logging. Could you follow the steps down below to provide me when the background logging of the plugin?

As for the change/feature request for moving the record down at the bottom, could you create a issue on the github page so I can track it?

To provide debug logging please follow the following steps in the attachment.

debugging joplin.docx (2.3 MB)

Here is what I got:

main-html.bundle.js.map:1 Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtoolsYou might need to use a local HTTP server (instead of file://): react/packages/react-devtools at main · facebook/react · GitHub
main-html.ts:47 Environment: dev
main-html.ts:70 appId: net.cozic.joplindev-desktop
main-html.ts:72 appType: desktop
Logger.ts:317 17:58:27: App: Profile directory: C:/Users/antoo/.config/joplindev-desktop
Logger.ts:317 17:58:27: App: Root profile directory: C:/Users/antoo/.config/joplindev-desktop
Logger.ts:317 17:58:27: Database was open successfully
Logger.ts:317 17:58:27: Checking for database schema update...
Logger.ts:317 17:58:27: Current database version Object
Logger.ts:317 17:58:27: Upgrading database from version 48
Logger.ts:317 17:58:27: New version: 48. Previously recorded version: 48
Logger.ts:317 17:58:27: KeychainService: checking if keychain supported
Logger.ts:317 17:58:27: KeychainService: check was already done - skipping. Supported: 1
Logger.ts:317 17:58:27: e2ee/utils: Master password is not set - trying to get it from the active master key...
Logger.ts:317 17:58:27: handleSyncStartupOperation: Processing operation: 0
Logger.ts:317 17:58:27: App: Client ID: af6ca1f6b9c44e73b871bedbfb4ae0b7
Logger.ts:317 17:58:27: models/Setting: Applying default migrations...
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: ResourceFetcher: Auto-add resources: Mode: always
Logger.ts:317 17:58:27: permanentlyDeleteOldData: Processing items older than 7776000000ms...
Logger.ts:317 17:58:27: ResourceFetcher: Auto-added resources: 0
Logger.ts:317 17:58:27: permanentlyDeleteOldData: Items to permanently delete: Object
Logger.ts:317 17:58:27: Performance: BaseApplication/start: End at 7.33s (took 0.45s)
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: Recurrent sync operation DISABLED!!!
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: app.start: doing regular boot
Logger.ts:317 17:58:27: App: Setting up auto-updater service...
Logger.ts:317 17:58:27: checkDisabledSyncItemsNotification: No errors: Hiding notification
Logger.ts:317 17:58:27: OcrService: Starting background service...
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: Recurrent sync operation DISABLED!!!
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: App: "syncInfoCache" was changed - setting up encryption related code
Logger.ts:317 17:58:27: e2ee/utils: Trying to load 0 master keys...
Logger.ts:317 17:58:27: e2ee/utils: Loaded master keys: 0
Logger.ts:317 17:58:27: OcrService: Found 0 resources to process...
Logger.ts:317 17:58:27: Updating all notifications...
Logger.ts:317 17:58:27: Garbage collecting alarms...
Logger.ts:317 17:58:27: RevisionService: runInBackground: Starting background service with revision collection interval 600000
Logger.ts:317 17:58:27: PluginService: Loading plugin from C:/Users/antoo/.config/joplindev-desktop/cache/com.github.TheScriptingGuy.joplin-plugin-repeating-todos
Logger.ts:317 17:58:27: PluginService: Loading plugin from C:/Users/antoo/.config/joplindev-desktop/cache/io.github.jackgruber.backup
Logger.ts:317 17:58:27: OcrService: 0 resources have been processed.
Logger.ts:317 17:58:27: PluginService: Loading plugin from C:/Users/antoo/.config/joplindev-desktop/cache/io.github.personalizedrefrigerator.js-draw
Logger.ts:317 17:58:28: Performance: app/initPluginService: End at 7.76s (took 0.27s)
Logger.ts:317 17:58:28: SpellCheckerServiceDriverNative: Set effective languages to "en-CA"
Logger.ts:317 17:58:28: Performance: app/start: End at 7.8s (took [ 0.92s ])
Logger.ts:317 17:58:28: Performance: main: End at 8.05s (took [[ 1.25s ]])
Logger.ts:317 17:58:28: joplin.plugins: Starting plugin: com.github.TheScriptingGuy.joplin-plugin-repeating-todos
Logger.ts:317 17:58:28: joplin.plugins: Starting plugin: io.github.jackgruber.backup
Logger.ts:317 17:58:28: joplin.plugins: Starting plugin: io.github.personalizedrefrigerator.js-draw
Logger.ts:317 17:58:28: useFormNote: Sync has finished and note has never been changed - reloading it
Logger.ts:317 17:58:28: DecryptionWorker: cannot start because no master key is currently loaded.
main-html.bundle.js.map:1 Unrecognized feature: 'clipboard-write=(self)'.
setValueForProperty @ main-html.bundle.js.map:1
Logger.ts:317 17:58:29: joplin.plugins: Finished running onStart handler: io.github.personalizedrefrigerator.js-draw (Took 752ms)
Logger.ts:317 17:58:29: joplin.plugins: Finished running onStart handler: com.github.TheScriptingGuy.joplin-plugin-repeating-todos (Took 823ms)
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 17:58:29: joplin.plugins: Finished running onStart handler: io.github.jackgruber.backup (Took 1123ms)
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 17:58:30: EditorPluginHandler: emitActivationCheck: responses: Object
Logger.ts:317 17:58:31: RevisionService: maintenance: Starting...
Logger.ts:317 17:58:31: RevisionService: maintenance: Service is enabled
Logger.ts:317 17:58:31: RevisionService: collectRevisions: Created revisions for 0 notes
Logger.ts:317 17:58:31: RevisionService: maintenance: Done in 112ms
Logger.ts:317 17:58:37: SearchEngine: Updating FTS table...
Logger.ts:317 17:58:37: Preparing scheduled sync
Logger.ts:317 17:58:37: Sync cancelled - no sync target is selected.
Logger.ts:317 17:58:37: Updating items_normalized from Object
Logger.ts:317 17:58:37: SearchEngine: Updated FTS table in 4ms. Inserted: 0. Deleted: 0
Logger.ts:317 17:58:37: Performance: SearchEngine/syncTables: End at 17.43s (took 113ms)
main-html.bundle.js.map:1 Warning: componentWillReceiveProps has been renamed, and is not recommended for use. See https://reactjs.org/link/unsafe-component-lifecycles for details.

  • Move data fetching code or side effects to componentDidUpdate.
  • If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state
  • Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run npx react-codemod rename-unsafe-lifecycles in your project source folder.

Please update the following components: t
printWarning @ main-html.bundle.js.map:1
Logger.ts:317 17:58:41: RepositoryApi: findWorkingMirror: Using: https://raw.githubusercontent.com/joplin/plugins/master
Logger.ts:317 17:58:43: RepositoryApi: findWorkingMirror: Using: https://raw.githubusercontent.com/joplin/plugins/master
Logger.ts:317 17:58:47: EditorPluginHandler: emitActivationCheck: responses: Object
Logger.ts:317 17:58:47: useFormNote: Sync has finished and note has never been changed - reloading it
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 17:58:55: Fetching geolocation...
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 17:58:55: EditorPluginHandler: emitActivationCheck: responses: Object
Logger.ts:317 17:58:55: Got lat/long
Logger.ts:317 17:58:55: Updating lat/long of note f46cc739b703441c8443b9033f29f27d
Logger.ts:317 17:58:55: useFormNote: Sync has finished and note has never been changed - reloading it
Logger.ts:317 17:58:55: useFormNote: Sync has finished and note has never been changed - reloading it
Logger.ts:317 17:58:57: ResourceService::indexNoteResources: Start
Logger.ts:317 17:58:57: Performance: ResourceService/indexNoteResources: End at 37.62s (took 130.1ms)
Logger.ts:317 17:58:57: ResourceService::indexNoteResources: Completed
Logger.ts:317 17:58:57: ResourceService::deleteOrphanResources:
Logger.ts:317 17:59:05: SearchEngine: Updating FTS table...
Logger.ts:317 17:59:05: Updating items_normalized from Object
Logger.ts:317 17:59:05: SearchEngine: Updated FTS table in 33ms. Inserted: 1. Deleted: 0
Logger.ts:317 17:59:05: Performance: SearchEngine/syncTables: End at 45.29s (took 134ms)
useHtmlLoader.ts:32 useHtmlLoader: isReady false
useHtmlLoader.ts:19 useHtmlLoader: message Object
useHtmlLoader.ts:19 useHtmlLoader: message Object
useHtmlLoader.ts:19 useHtmlLoader: message Object
useHtmlLoader.ts:32 useHtmlLoader: isReady true
useHtmlLoader.ts:37 useHtmlLoader: setHtml 3d6ee049ae5c7478ba7bbaed2771fd66
useHtmlLoader.ts:19 useHtmlLoader: message Object
useHtmlLoader.ts:19 useHtmlLoader: message Object
useHtmlLoader.ts:19 useHtmlLoader: message Object
Logger.ts:317 17:59:06: useFormNote: Sync has finished and note has never been changed - reloading it
Logger.ts:317 17:59:06: useFormNote: Sync has finished and note has never been changed - reloading it
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
useHtmlLoader.ts:19 useHtmlLoader: message Object
Logger.ts:317 17:59:13: useFormNote: Sync has finished and note has never been changed - reloading it
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 17:59:16: SearchEngine: Updating FTS table...
Logger.ts:317 17:59:16: Updating items_normalized from Object
Logger.ts:317 17:59:16: SearchEngine: Updated FTS table in 29ms. Inserted: 1. Deleted: 0
Logger.ts:317 17:59:16: Performance: SearchEngine/syncTables: End at 56.25s (took 130ms)
Logger.ts:317 17:59:28: Preparing scheduled sync
Logger.ts:317 17:59:28: Sync cancelled - no sync target is selected.
Logger.ts:317 18:00:19: Scheduling notification for note f46cc739b703441c8443b9033f29f27d Object
Logger.ts:317 18:00:19: AlarmServiceDriverNode::checkPermission: Permission in settings is ""
Logger.ts:317 18:00:19: AlarmServiceDriverNode::scheduleNotification: Notification 1 with interval: 160999ms
Logger.ts:317 18:00:19: useFormNote: Sync has finished and note has never been changed - reloading it
Logger.ts:317 18:00:28: focusHandler: Tried action "focus" on an undefined element: ToolbarBase
log @ Logger.ts:317
Logger.ts:317 18:00:28: EditorPluginHandler: emitActivationCheck: responses: Object
useMessageHandler.ts:31 Got ipc-message: noteRenderComplete undefined
Logger.ts:317 18:00:28: SearchEngine: Updating FTS table...
Logger.ts:317 18:00:29: Updating items_normalized from Object
Logger.ts:317 18:00:29: SearchEngine: Updated FTS table in 28ms. Inserted: 1. Deleted: 0
Logger.ts:317 18:00:29: Performance: SearchEngine/syncTables: End at 128.87s (took 143.7ms)
Logger.ts:317 18:00:33: Preparing scheduled sync
Logger.ts:317 18:00:33: Sync cancelled - no sync target is selected.
Logger.ts:317 18:03:00: AlarmServiceDriverNode::displayMacNotification: Triggering notification (electron): NewToDo {body: "---\njoplin-recurrence:\n enabled: true\n interval:…e: never\n stopDate: 'null'\n stopNumber: 1\n\n---\n", onerror: ƒ}
Logger.ts:317 18:03:27: OcrService: Found 0 resources to process...
Logger.ts:317 18:03:30: OcrService: 0 resources have been processed.

I have not even got that far to be able to start the repeating gui.
it is installed but does have the option of scheduling

Hi Antoonvdr, You’ve provided the Joplin App Log instead of the plugin login, unfortunate I cannot see the plugin logs from here. You need the second screen that pops up when launching joplin with –env dev. This will show the plugin logs

These steps show the app log, which provide the logging you’ve send:

Instead you need to do this:

The plugin logs look like this.

Hi BeSwiss, can you follow the steps in this document https://discourse.joplinapp.org/uploads/short-url/mK5Aahs7WYAIj8DJFM0O8cmvkdo.docx and publish the debug plugin logs so I can help you out.

I had the same thing. Looks like the note needs to be empty and you need to make it repeating before you set an alarm. However, that is as far as I got. On my mobile device (android) I disabled all my other plugins, restarted Joplin and tried this plugin again. Like instructed the repeat was set to one minute. Funny thing was that when I checked off my todo as “done”, it unchecked itself immediately after I moved to a different note. I am wondering if this is the intended behaviour of this plugin. If it is, then it is not for me.

I wish I knew how to include images otherwise I could show you some screenshots.

After I invoke the development tools by

~s\antoo>"C:\Program Files\Joplin\Joplin.exe" –env dev

I receive this:

Sentry: Initialized with autoUploadCrashDumps: false

[29396:1102/160214.913:ERROR: cache_util_win.cc(20)] Unable to move the cache: Access is denied. (0x5)
[29396:1102/160214.913:ERROR: cache_util_win.cc(20)] Unable to move the cache: Access is denied. (0x5)
[29396:1102/160214.913:ERROR: cache_util_win.cc(20)] Unable to move the cache: Access is denied. (@x5)
[29396:1162/160214.932:ERROR:disk_cache.cc(216)] Unable to create cache

[29396:1102/160214.932:ERROR: gpu_disk_cache.cc(711)] Gpu Cache Creation failed: -2
[29396:1162/160214.933:ERROR:disk_cache.cc(216)] Unable to create cache

[29396:1102/160214.933:ERROR: gpu_disk_cache.cc(711)] Gpu Cache Creation failed: -2
[29396:1162/160214.933:ERROR:disk_cache.cc(216)] Unable to create cache

[29396:1102/160214.933:ERROR: gpu_disk_cache.cc(711)] Gpu Cache Creation failed: -2

(node:29808) [DEP0040] DeprecationWarning: The ‘punycode’ module is deprecated. Please use a userland alternative instead.

(Use “Joplin --trace-deprecation ... to show where the warning was created)

[29396:1102/160221.834:ERROR: CONSOLE(1)] "Request Autofill.enable failed. {"code":-32601,"message":"'Autofill.enable' wasn't found"}", source: devtools://devtools/bundled/core/protocol_client/protocol_client.js (1)
[29396:1102/160221.834:ERROR: CONSOLE(1)] "Request Autofill.setAddresses failed. {"code":-32601,"message":"'Autofill.setAddresses' wasn't found"}", source: devtools://devtools/bundled/core/protocol_client/protocol_client.js (1)

I have no idea what this means. Anyway, a Joplin instance is opened which only contains the 5 welcome notes. I opened the development tools from the Help menu and that is what I uploaded.

¯\_(ツ)_/¯

Hello,

The following segment have been injected into every single of my 1k+ notes, regardless if it’s a todo or a note.


joplin-recurrence:
enabled: false
interval: minute
intervalNumber: 1
weekSunday: false
weekMonday: false
weekTuesday: false
weekWednesday: false
weekThursday: false
weekFriday: false
weekSaturday: false
monthOrdinal: first
monthWeekday: ''
stopType: never
stopDate: null
stopNumber: 1


How do I remove it?

Edit: Which also has changed the “Last updated” field on every note and todo, I assume there’s no way of getting those back without restoring a back up?

I have found the Joplin Batch very useful for making global replacements.

Make a backup first if you attempt it, personally I've found it to work reliably and very well. For this kind of thing where manually editing is not viable it can be a lifesaver.

Thanks for the tip, Joplin Batch with it’s find and replace function seems like exactly what I need.