ActivityWatch / ActivityWatch/aw-notify

Customize category prompts through the .toml configuration file.

Aberta
#8 0 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Python
Estrelas
31
Forks
22
Merge médio
10min
PRs com merge (30d)
1

Descrição

I forked this repository and intended to implement custom reminders for categories through the following modifications, but an error occurred in the "Run tests" stage of Github Action.

```
D:\a\_temp\a36ab23e-0012-4baa-939f-a3b63fe4030f.sh: line 1: venv/bin/activate: No such file or directory
poetry run aw-notify --help # Ensures that it at least starts
Usage: aw-notify [OPTIONS] COMMAND [ARGS]...

Options:
-v, --verbose Verbose logging.
--testing Enables testing mode.
--help Show this message and exit.

Commands:
checkin Send a summary notification.
start Start the notification service.
make typecheck
make[1]: Entering directory 'D:/a/aw-notify/aw-notify'
poetry run mypy aw_notify --ignore-missing-imports
aw_notify\main.py:307: error: Item "Item" of "Item | Container" has no attribute "__iter__" (not iterable) [union-attr]
aw_notify\main.py:308: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index]
aw_notify\main.py:309: error: Invalid index type "str" for "str"; expected type "SupportsIndex | slice[Any, Any, Any]" [index]
aw_notify\main.py:310: error: Item "str" of "Any | str" has no attribute "get" [union-attr]
aw_notify\main.py:311: error: Item "str" of "Any | str" has no attribute "get" [union-attr]
Found 5 errors in 1 file (checked 3 source files)
make[1]: *** [Makefile:11: typecheck] Error 1
make[1]: Leaving directory 'D:/a/aw-notify/aw-notify'
make: *** [Makefile:8: test] Error 2
```

---

`config.toml`

```python
[[alerts]]
category = "All"
thresholds = ["1:00:00", "2:00:00", "4:00:00", "6:00:00", "8:00:00"]
label = "All"

[[alerts]]
category = "Twitter"
thresholds = ["0:15:00", "0:30:00", "1:00:00"]
label = "🐦 Twitter"

[[alerts]]
category = "Youtube"
thresholds = ["0:15:00", "0:30:00", "1:00:00"]
label = "📺 Youtube"

[[alerts]]
category = "Work"
thresholds = ["0:15:00", "0:30:00", "1:00:00", "2:00:00", "4:00:00"]
label = "💼 Work"
positive = true
```

Added Python code

```python
import toml
from datetime import timedelta

def load_alerts_from_config(file_path: str) -> list[CategoryAlert]:
"""从 TOML 文件加载警报配置。"""
config = toml.load(file_path)

alerts = []
for alert_config in config.get('alerts', []):
category = alert_config['category']
thresholds = [timedelta(hours=int(th.split(':')[0]), minutes=int(th.split(':')[1]), seconds=int(th.split(':')[2])) for th in alert_config['thresholds']]
label = alert_config.get('label', category)
positive = alert_config.get('positive', False)

alerts.append(CategoryAlert(category, thresholds, label, positive))

return alerts

def threshold_alerts():
"""
检查每个类别的已用时间,并在达到阈值时触发警报。
"""
# 从配置文件加载警报
alerts = load_alerts_from_config('config.toml')

# 遍历一次以检查是否达到任何阈值
for alert in alerts:
alert.update()
alert.check(silent=True)

while True:
for alert in alerts:
alert.update()
alert.check()
status = alert.status()
if status != getattr(alert, "last_status", None):
logger.debug(f"新状态: {status}")
setattr(alert, "last_status", status)

# TODO: 使其可配置,可能增加默认值以节省资源
sleep(10)
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.