diff --git a/wf/script.py b/wf/script.py
index 253562f..bcf1246 100755
--- a/wf/script.py
+++ b/wf/script.py
@@ -23,7 +23,9 @@ PLANNER_IDS = {
"mind": "09e9a2c7-954d-9178-7bca-de54d6f6680d",
"social": "2be5c4e5-ebfe-a462-3389-5b83aa86d016",
"church": "c69aa1a1-26a3-2ab7-a125-fe6b61d108bd",
- "work": "f6306ec9-9243-a249-3af7-aa7d64963e2b"
+ "work": "f6306ec9-9243-a249-3af7-aa7d64963e2b",
+ "affirm": "a1412d52-c72c-0612-f5b1-48874ef03943",
+ "tabs": "63aa4d3a-4db3-9b8c-cbae-a49fca975c1e",
}
solarized_theme = Theme({
@@ -289,6 +291,7 @@ def simplify_project(project_data, full_data, follow_mirrors=False): # {{{
"name": project_data.get("nm", ""),
"id": project_data.get("id", ""),
"children": [],
+ "description": project_data.get("no", ""),
"format": project_data.get("metadata", {}).get("layoutMode", None)
}
children = project_data.get("ch", [])
@@ -369,16 +372,18 @@ def filter_project_any(project_data, filters, include_headers=False):
# }}}
-def filter_project_all(project_data, filters): # {{{
+def filter_project_all(project_data, filters, include_headers=False): # {{{
include = True
- for filter_text in filters:
- if filter_text not in project_data["name"]:
- include = False
- break
-
+ if include_headers and (project_data["format"] == "h1" or project_data["format"] == "h2"):
+ pass
+ else:
+ for filter_text in filters:
+ if filter_text not in project_data["name"]:
+ include = False
+ break
children = []
for child in project_data.get("children", []):
- child = filter_project_all(child, filters)
+ child = filter_project_all(child, filters, include_headers=include_headers)
if child:
children.append(child)
@@ -389,23 +394,24 @@ def filter_project_all(project_data, filters): # {{{
else:
return None
+# }}}
-def strip(project_data, regex): # {{{
- project_data["name"] = re.sub(regex, "", project_data["name"])
+
+
+
+def replace(project_data, regex, replacement): # {{{
+ project_data["name"] = re.sub(regex, replacement, project_data["name"])
children = project_data.get("children", [])
for child in children:
- strip(child, regex)
+ replace(child, regex, replacement)
return project_data
# }}}
-def rstrip(project_data): # {{{
- project_data["name"] = project_data["name"].rstrip()
- children = project_data.get("children", [])
- for child in children:
- rstrip(child)
+def strip(project_data, regex): # {{{
+ project_data = replace(project_data, regex, "")
return project_data
# }}}
@@ -468,19 +474,9 @@ colors1 = {
}
colors2 = {
- "@done": "strike base01",
- "@missed": "strike base01",
- "@na": "strike base01",
-}
-
-colors3 = {
- # "xactive": "underline",
- # "xhold": "underline",
- # "xarchive": "underline",
- # "xsomeday": "underline",
- # "@done": "strike",
- # "@missed": "strike",
- # "@na": "strike",
+ "@done": "strike",
+ "@missed": "strike",
+ "@na": "strike",
}
@@ -488,9 +484,9 @@ def recolor(project_data, colors):
for key, value in colors.items():
if key in project_data["name"]:
if key.startswith("x"):
- project_data["name"] = f"[{value}]{project_data['name']} [/][base01]{key}[/]"
+ project_data["name"] = f"[{value}]{project_data['name'].strip(" ")}[/] [base01]{key}[/]"
else:
- project_data["name"] = f"[{value}]{project_data['name']}[/]"
+ project_data["name"] = f"[{value}]{project_data['name'].strip()}[/]"
break
children = project_data.get("children", [])
for child in children:
@@ -499,27 +495,37 @@ def recolor(project_data, colors):
# }}}
-def print_pretty(data, indent=0, color="grey"): # {{{
+def print_pretty(data, indent=0, color="grey", show_description=True, show_id=False): # {{{
try:
# href = f"https://workflowy.com/#/{data['id'].split('-')[4]}"
for item in data["children"]:
- if item["format"] == "h1" or item["format"] == "h2":
+
+ if item["format"] == "h1":
console.print("")
- console.print(" " * indent + f"[base3]•[/] [base3][underline]{item['name']}[/][/]")
+ console.print(" " * indent + f"[base3]•[/] [base3][underline]{item['name']}[/][/][base01]{' ' + item['id'].split('-')[4] if show_id else ''}[/]")
+ elif item["format"] == "h2":
+ console.print(" " * indent + f"[base3]•[/] [base1][underline]{item['name']}[/][/][base01]{' ' + item['id'].split('-')[4] if show_id else ''}[/]")
+
else:
- console.print(" " * indent + f"[base3]•[/] [{color}]{item['name']}[/]")
+ console.print(" " * indent + f"[base3]•[/] [{color}]{item['name']}[/][base01]{' ' + item['id'].split('-')[4] if show_id else ''}[/]")
+
+
+ if item["description"] and show_description:
+ console.print(" " * (indent + 1) + f"[base01]{item['description'].replace('\n', '\n' + ' ' * (indent + 1))}[/]")
+
if item["children"]:
- print_pretty(item, indent + 1, color)
+ print_pretty(item, indent + 1, color, show_description=show_description, show_id=show_id)
+
except Exception as e:
- console.log(f"data: {data} {e}")
+ console.log(f"Error: {e}")
# }}}
def find_project_by_id(project_data, full_data, target_id): # {{{
- if project_data.get("id") == target_id:
- return project_data, full_data
-
+ if project_data.get("id"):
+ if target_id in project_data.get("id"):
+ return project_data, full_data
for child in project_data.get("ch", []):
result, full_data = find_project_by_id(child, full_data, target_id)
if result:
@@ -529,19 +535,17 @@ def find_project_by_id(project_data, full_data, target_id): # {{{
# }}}
-def show(parent_id, flat=False, filter_all=None, filter_any=None, color="grey", follow_mirrors=False, include_headers=False): # {{{
+def show(parent_id, flat=False, filters=None, color="grey", follow_mirrors=False, include_headers=False, show_description=True, show_id=False): # {{{
root_data = load_from_storage("root")
project_data, root_data = find_project_by_id(root_data, root_data, parent_id)
project_data, root_data = simplify_project(project_data, root_data, follow_mirrors=follow_mirrors)
if flat:
project_data = flatten_project(project_data)
- if filter_all is not None:
- pass
- if filter_any is not None:
- project_data = filter_project_any(project_data, filter_any, include_headers=include_headers)
- project_data = rstrip(project_data)
+ if filters is not None:
+ project_data = filter_project_all(project_data, filters, include_headers=include_headers)
+ project_data = replace(project_data, r" *<", "<")
+ project_data = replace(project_data, r" *$", "")
project_data = recolor(project_data, colors2)
- project_data = recolor(project_data, colors3)
project_data = recolor(project_data, colors1)
project_data = strip(project_data, r".*")
project_data = strip(project_data, r"