Use taskw-ng for interacting with Taskwarrior
Synchronizations that interact with Taskwarrior will now use the [`taskw-ng`](https://github.com/bergercookie/taskw-ng) python wrapper instead of the currently unmaintained `taskw` wraper. This will allow faster development of new features and quicker bugfixing since we're also developing and publishing the taskw-ng package.
**IMPORTANT** When transitioning to the `v1.8.0` release, you 'll need to update your cache files situated in `~/.config/syncall/`. `taskw-ng` is largely compatible with `taskw`, except its very name. As part of the caching of objects, we pickle items that we write to Taskwarrior and as a result, already cached items, will not be read back correctly since we 've now stopped depending on `taskw` and instead depend on `taskw-ng`. To fix this, you have to **replace all occurrences of `taskw` with `takw_ng` in the cache directory. To do that you can run a command like the following. Note that I'm using the [sd](https://github.com/chmln/sd) and [ripgrep](https://github.com/BurntSushi/ripgrep) to execute the replacements:
sh
sd "taskw\b" tasnw_ng (rg --hidden -l "taskw\b")
If this doesn't work you can reset your synchronization as explained in the [repo FAQ](https://github.com/bergercookie/syncall?tab=readme-ov-file#faq). If you still have problems after this [please create a issue](https://github.com/bergercookie/syncall/issues).
Rename `twgcalsyncduration` -> `syncallduration`
A task that 's written to / read from taskwarrior in the past could have a UDA `twgcalsyncduration` of type duration. We can now make use of this UDA in synchronizations other than the `TW` <> `Google Calendar` and we 've therefore renamed it to `syncallduration` to reflect this.
Please include the following snippet in your `TASKRC` file to correctly read/write this UDA:
conf
uda.syncallduration.type=duration
uda.syncallduration.label=Task Duration
Introduce more powerful Taskwarrior filtering
We now have more powerful Taskwarrior filtering across all synchronizations that interact with Taskwarrior. This means you can now use the following options:
-f, --tw-filter TEXT Taskwarrior filter for specifying the tasks
to synchronize. These filters will be
concatenated using OR with potential tags
and projects potentially specified.
--all, --taskwarrior-all-tasks Sync all taskwarrior tasks (potentially very
slow).
-t, --taskwarrior-tags TEXT Taskwarrior tags to synchronize.
-p, --tw-project TEXT Taskwarrior project to synchronize.
--days, --only-modified-last-X-days TEXT
Only synchronize Taskwarrior tasks that have
been modified in the last X days (specify X,
e.g., 1, 30, 0.5, etc.).
--prefer-scheduled-date Prefer using the "scheduled" date field
instead of the "due" date if the former is
available.
This affects the following synchronizations:
* `tw_asana_sync.py`
* `tw_caldav_sync.py`
* `tw_gcal_sync.py`
* `tw_gkeep_sync.py`
* `tw_gtasks_sync.py`
* `tw_notion_sync.py`
You can read more about this in the [taskwarrior-filtering page](https://github.com/bergercookie/syncall/blob/master/docs/taskwarrior-filtering.md)
---
**Full Changelog**: https://github.com/bergercookie/syncall/compare/v1.7.2...v1.8.0