Skip to content

AdolDev40/tasksmd

Repository files navigation

TasksMD

TasksMD is an Android app + home-screen widget to manage Markdown-based tasks (compatible with common Obsidian task formats). It reads tasks from .md files (or entire directories of .md files) via Android’s Storage Access Framework, stores them in a local database for fast filtering, and lets you add/edit/complete tasks directly from the widget.

Highlights

  • Markdown task parsing (checkboxes, priorities, due/done dates, recurrence, tags)
  • Select individual .md files or a directory (recursive scan of subfolders)
  • Home-screen widget with filtering and quick actions
  • Manual sync workflow (use refresh buttons when you want to pull changes made in Obsidian)
  • Local cache in Room DB for fast query + paging

How it works (quick overview)

  1. You select files/directories in the app Settings (persisted as SAF URIs).
  2. Sync runs a scan over all selected Markdown files:
    • Reads each file line-by-line
    • Parses task lines and writes them into Room (one row per task)
    • Replaces DB rows per file (rebuild per file on each sync)
  3. Widget/UI reads from Room (fast filters and sorting).
  4. When you add/edit/delete/complete tasks from the widget/app, the app updates both:
    • The Markdown file content
    • The Room DB record(s)

Sync model

TasksMD uses a manual refresh approach:

  • Use the Refresh/Sync buttons in Settings and/or the widget when you edited Markdown in Obsidian.
  • After task edits from the app/widget (add/edit/delete/complete), the widget is refreshed as part of those actions.

Supported Markdown task syntax

Tasks are detected from lines starting with a checkbox, e.g.

- [ ] Buy milk
- [x] Pay rent
- [-] Cancelled task

Metadata tokens supported (examples):

- [ ] 🔺 Important task 📅 2025-12-20 #work
- [x] Task ✅ 2025-12-16 #done
- [ ] Recurring task 🔁 every day 📅 2025-12-16
  • Priority: 🔺 (HIGH), 🔼 (MEDIUM), 🔽/🔻 (LOW)
  • Due date: 📅 YYYY-MM-DD
  • Done date: ✅ YYYY-MM-DD
  • Recurrence: 🔁 ... (captures rule text)
  • Tags: #tag (supports #tag/subtag)

Requirements

  • Android Studio (recent version)
  • Android device/emulator
  • Storage Access Framework permissions (granted when selecting files/directories)

Build & run

Open the project in Android Studio and run the app configuration.

From terminal:

# Windows
./gradlew.bat assembleDebug

# macOS/Linux
./gradlew assembleDebug

Project structure (high level)

  • app/src/main/java/com/example/tasksmd/data/ — Room entities/DAOs + file selection
  • app/src/main/java/com/example/tasksmd/parsing/ — task parser/serializer
  • app/src/main/java/com/example/tasksmd/worker/ — WorkManager sync + file operations
  • app/src/main/java/com/example/tasksmd/widget/ — widget provider/service
  • app/src/main/java/com/example/tasksmd/ui/ — Compose UI (Settings and optional task list)

Notes

  • Directory selection scans subdirectories recursively and includes only Markdown files.
  • If a file becomes unavailable (permissions/provider), it will be skipped during sync.

Contributing

PRs are welcome. If you plan to make a larger change, open an issue first to discuss the direction.

License

MIT License — see LICENSE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages