|
22 | 22 | from requests import get |
23 | 23 | from pygame import mixer |
24 | 24 | from pywikihow import RandomHowTo, search_wikihow |
25 | | -from Whatsapp import sendMessage |
26 | | -from battery import check_battery |
27 | 25 | import pygame |
28 | 26 | from features.communication.Whatsapp import sendMessage |
29 | 27 | from features.utilities.battery import check_battery |
30 | 28 | from features.entertainment.joke import jokes |
31 | 29 | from features.system.battery import battery |
32 | 30 | from features.utilities.FocusGraph import focus_graph |
| 31 | +from features.utilities.task_manager import ( |
| 32 | + add_task, |
| 33 | + list_tasks, |
| 34 | + overdue_tasks, |
| 35 | + mark_completed, |
| 36 | + set_priority, |
| 37 | + summary_text, |
| 38 | +) |
33 | 39 | from features.entertainment.game import game_play |
34 | 40 | from features.search.SearchNow import searchGoogle, searchyoutube, searchwikipedia |
35 | 41 | from features.utilities.Translator import translategl |
|
46 | 52 |
|
47 | 53 | import sys |
48 | 54 | import os |
49 | | -sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| 55 | +project_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 56 | +sys.path.append(project_root_dir) |
| 57 | +# Add feature subdirectories to Python path for dynamic imports used below |
| 58 | +features_dir = os.path.join(project_root_dir, "features") |
| 59 | +for sub in ["communication", "utilities", "entertainment", "system", "search"]: |
| 60 | + sys.path.insert(0, os.path.join(features_dir, sub)) |
50 | 61 | #! If you want to use password then comment out |
51 | 62 |
|
52 | 63 | # # Paste this just below your import files |
@@ -591,6 +602,57 @@ def alarm(query): |
591 | 602 | from reminder import remindme |
592 | 603 | remindme() |
593 | 604 |
|
| 605 | + # Task management commands |
| 606 | + elif "add task" in query or "add urgent task" in query: |
| 607 | + spoken = query |
| 608 | + clean = spoken.replace("jarvis", "").replace("add urgent task", "").replace("add task", "").strip() |
| 609 | + pr = "high" if "add urgent task" in spoken else "normal" |
| 610 | + # Try to split on common deadline prepositions |
| 611 | + deadline_text = None |
| 612 | + for kw in [" by ", " before ", " at ", " on "]: |
| 613 | + if kw in clean: |
| 614 | + parts = clean.split(kw, 1) |
| 615 | + description = parts[0].strip() |
| 616 | + deadline_text = parts[1].strip() |
| 617 | + break |
| 618 | + else: |
| 619 | + description = clean |
| 620 | + if description: |
| 621 | + t = add_task(description, deadline_text, pr) |
| 622 | + Speak(f"Task added: {t['title']}") |
| 623 | + else: |
| 624 | + Speak("Please say the task description again.") |
| 625 | + |
| 626 | + elif "what are my tasks today" in query: |
| 627 | + Speak(summary_text("today")) |
| 628 | + |
| 629 | + elif "what are my tasks this week" in query: |
| 630 | + Speak(summary_text("week")) |
| 631 | + |
| 632 | + elif "show overdue tasks" in query or "overdue tasks" in query: |
| 633 | + Speak(summary_text("overdue")) |
| 634 | + |
| 635 | + elif "mark task completed" in query: |
| 636 | + title = query.replace("jarvis", "").replace("mark task completed", "").replace(":", "").strip() |
| 637 | + done = mark_completed(title) |
| 638 | + if done: |
| 639 | + Speak(f"Marked completed: {done['title']}") |
| 640 | + else: |
| 641 | + Speak("I could not find that task.") |
| 642 | + |
| 643 | + elif "set task priority" in query: |
| 644 | + # Example: set task priority: Call mom to high |
| 645 | + clean = query.replace("jarvis", "").replace("set task priority", "").replace(":", "").strip() |
| 646 | + if " to " in clean: |
| 647 | + title, pr = clean.split(" to ", 1) |
| 648 | + updated = set_priority(title.strip(), pr.strip()) |
| 649 | + if updated: |
| 650 | + Speak(f"Priority set to {updated['priority']} for {updated['title']}") |
| 651 | + else: |
| 652 | + Speak("I could not find that task.") |
| 653 | + else: |
| 654 | + Speak("Please specify the task and the priority.") |
| 655 | + |
594 | 656 | #^ Web ip address finding |
595 | 657 | elif "ip ad dress" in query: |
596 | 658 | ip = get('https://api.ipify.org').text |
|
0 commit comments