Jump to content

Chucky Eggs Nested Tasks


Guest chucky.egg

Recommended Posts

  • 2 weeks later...
Guest chucky.egg

I've just discovered an issue with v0.510, which (as far as I can see) would only affect you if (1) you did a hard reset, or (2) you moved previously nested tasks from one folder in Outlook on your PC into your main Tasks folder in Outlook on your PC.

Issue:

Previously nested Tasks are not "Orphaned" (made root nodes in the Tree view)

Those Tasks are still present on your device, but are not shown in Nested Tasks

I think I know why this happens, and I'll get a fix out ASAP - hopefully later this week

Link to comment
Share on other sites

Guest Mr_Gee

Hey Chucky.egg

Great idea, I wasn't able to check out your program but is it/ would it be possible to import/export this information to a txt/csv file?

the reason is that I would use this for personal use (keeping track of programming ideas and to-do things),

if I want a backup I'd have to sync it with outlook which has my work tasks in there.

I did try your program, but I got the following error when I clicked option>new>root

next I opened the program again the task was created but there was (obviously) no text next to it

subsequent tasks gave me the same behavior.

Nested Tasks.exe

IndexOutOfRangeException


bij System.String.get_Chars(Int32 index)

bij System.Globalization.DateTimeFormatInfo.InsertHash(TokenHashValue[] hashTable, String str, TokenType tokenType, Int32 tokenValue)

bij System.Globalization.DateTimeFormatInfo.CreateTokenHashTable()

bij System.Globalization.DateTimeFormatInfo.Tokenize(TokenType TokenMask, TokenType& tokenType, Int32& tokenValue, __DTString& str)

bij System.__DTString.GetSeparatorToken(DateTimeFormatInfo dtfi, Int32& indexBeforeSeparator, Char& charBeforeSeparator)

bij System.DateTimeParse.Lex(DS dps, __DTString& str, DateTimeToken& dtok, DateTimeRawInfo& raw, DateTimeResult& result, DateTimeFormatInfo& dtfi)

bij System.DateTimeParse.TryParse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles, DateTimeResult& result)

bij System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)

bij Simple_Nested_Outlook_Tasks_CSharp.frmSNOT.mnuTreeTaskNew(Object sender, EventArgs e)

bij Simple_Nested_Outlook_Tasks_CSharp.frmSNOT.mnuTreeTaskNewRoot(Object sender, EventArgs e)

bij System.Windows.Forms.MenuItem.onclick(EventArgs e)

bij System.Windows.Forms.Menu.ProcessMnuProc(Control ctlThis, WM wm, Int32 wParam, Int32 lParam)

bij System.Windows.Forms.Form.WnProc(WM wm, Int32 wParam, Int32 lParam)

bij System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)

bij Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)

bij System.Windows.Forms.Application.Run(Form fm)

bij Simple_Nested_Outlook_Tasks_CSharp.Program.Main()

I'm using a MDA Vario 3 with Dutty's WM6.1 rom (which has CF 3.5 installed)

Let me know if you need more information

Link to comment
Share on other sites

Guest chucky.egg

Thanks for the feedback, and the bug report

As for export/import... I was thinking about an export function, but this app uses the Pocket Outlook Tasks database - so if you were to import Tasks they would get merged with any existing Tasks and then sync to Outlook/Exchange. If you don't sync Tasks, and purely want it for a backup then it should be OK. I'll have a think about it and see if I can devise a suitable system.

For the bug can you confirm that you are using the latest version (v0.510, or v0.511 which includes the AppToDate Stub)

A few questions to help me identify the cause:

Do you have ANY Outlook Tasks at the moment, and if so did it show those? (if not could you create a test Task and see what happens)

With the "failed" Task did it show no text at all to the right of the checkbox? (it should default to "New Task")

Can you open the "failed" Task in Nested Tasks? if so does it show any text in the subject, or any dates in Start, Due or Reminder?

On the face of it I would say that it failed to create the new root Task properly in the first place, which may be a WM6.1 issue. If you can answer the questions above I can look into it (I dont have a 6.1 device)

Link to comment
Share on other sites

Guest Mr_Gee
For the bug can you confirm that you are using the latest version (v0.510, or v0.511 which includes the AppToDate Stub)

I got the cab file from your website this afternoon (just checked it has apptodate support)

A few questions to help me identify the cause:

Do you have ANY Outlook Tasks at the moment, and if so did it show those? (if not could you create a test Task and see what happens)

Nope I don't like them (in their current form ;-))

Opened up pocket tasks and did the "tap here to..." and the task was added

btw. the ones I made using nested tasks were in there.

With the "failed" Task did it show no text at all to the right of the checkbox? (it should default to "New Task")

No it was empty, attached screenshot, the top one was the "new" one the second an older one which I edited to show the name

Can you open the "failed" Task in Nested Tasks? if so does it show any text in the subject, or any dates in Start, Due or Reminder?

Yesit opens,but no subject and the dates are gray

On the face of it I would say that it failed to create the new root Task properly in the first place, which may be a WM6.1 issue. If you can answer the questions above I can look into it (I don't have a 6.1 device)

If you're feeling bold you could give the cooked roms a chance, the loneranger rom (mentioned on the modaco forum) is blazing fast

Paul, which rom are you using (since we have the same phone)

post-193294-1209054090_thumb.jpg

Link to comment
Share on other sites

Guest chucky.egg

OK, thanks for those answers

I'm setting up a new device (HTC Wizard) so I can see if I can track this down. I don't think I can get WM6.1 for it, but it'll be easier to test now at least

I'll post back once I've had a chance to investigate

Link to comment
Share on other sites

Guest chucky.egg

Well, I've tried it on a "vanilla" Imate ROM on my Wizard, with .NET CF2. All works fine there.

I'll get the .NET CF 3.5 thang and try that next

If it's still working I'll give the WM6.1 ROM a try

Link to comment
Share on other sites

Guest chucky.egg

I've done LOADS of testing cycles with CF 3.5, but just can't make it go wrong.

The next thing is to try the WM6.1 ROM, but as we have different devices I'm not sure how much that's actually going to tell me.

@ Mr_Gee

Could I ask you to give me some more info:

1. If you create a Task in the built-in Tasks app does it appear in Nested Tasks properly (ie, does it have a subject)

2. If you create a Task in Nested Tasks does it automatically load the Edit screen afterwards? If so does it show a subject in there? (should be "New Task")

I'm downloading the 6.1 ROM now and will post back soon

Link to comment
Share on other sites

Guest chucky.egg

New version 0.512

1. ADDED: Automatically handles the Remind Me option when a reminder date is set or cleared

2. ADDED: Option to disable the on-screen keyboard if your device has a hardware keyboard

3. ADDED: Option to show Start Date in Task subject

4. ADDED: Option to prefix Start and Due dates in Task subject (eg [s:01/01/08])

5. ADDED: Option to start with tree collapsed

6. ADDED: Dark Grey colour option, for easier viewing of completed Task titles

I'm working on Drag 'n Drop for the next release, which should make nesting Tasks much quicker.

Link to comment
Share on other sites

Guest All-Purpose Guru
I've just discovered an issue with v0.510, which (as far as I can see) would only affect you if (1) you did a hard reset, or (2) you moved previously nested tasks from one folder in Outlook on your PC into your main Tasks folder in Outlook on your PC.

Issue:

Previously nested Tasks are not "Orphaned" (made root nodes in the Tree view)

Those Tasks are still present on your device, but are not shown in Nested Tasks

I think I know why this happens, and I'll get a fix out ASAP - hopefully later this week

I have seen this happen-- I'm transitioning from a WM6 HTC Hermes to a WM5 Hermes, and all of my tasks ended up at the root level.

Interestingly, if I create a new task as a subtask of a former root task, that subtask gets the exact same category text as the former subtasks that are now at the root level-- but the new subtask is a subtask while the other former subtasks are not.

Hopefully it's an easy fix. I love this app; it's a cornerstone of how I get things done.

I use this app as a main part of my GTD (Getting Things Done) methodology-- I was bemoaning the fact that "all I want is my tasks to appear in a heirarchy" and poof, there your app was. (Actually, I heard about it on the Modaco podcast.)

I use Nested Tasks to show the heirarchy of projects (in GTD, any task with more than one step is a "project", which I create in a heirarchy in Nested Tasks) and the "Next Task" (which is the one thing that you have to do next) is the ONLY task in that heirarchy that is set to "High Priority".

Then, go into the normal Task app (because of the lack of filtering in Nested Tasks) and filter on "High Priority only" and viola, you have a to-do list of the next thing you need to do for each project.

Fabulous. Simply Fabulous.

Anyhow, minus the teething troubles, your app is fantastic.

Link to comment
Share on other sites

Guest chucky.egg

Thanks very much for the encouraging feedback. Much appreciated.

from a WM6 HTC Hermes to a WM5 Hermes, and all of my tasks ended up at the root level

I think the issue you're having is different to the known bug - it's not that the Tasks are not shown, more that their nesting has been "lost".

This might be because Pocket Outlook creates a unique ID for each Task as it is created (for example, when you first sync your device). This could be a problem if you're using Nested Tasks on more than one device - they won't necessarily both use the same Task ID number, so one will break the nesting of the other.

I was thinking about adding a "Remove all nesting" function, but all you really need to do is re-nest the Tasks (and stick to one device!)

a new task as a subtask of a former root task, that subtask gets the exact same category text as the former subtasks that are now at the root level

Hmm, odd. That shouldn't happen. If the "TASK-nnnnnnnnnnn" category is exactly the same it should manage the nesting. It just does some very simple logic - "does this match that". If a Task has a parent which does not exist on that device it should be moved back to the root, that's the correct behaviour, but otherwise it should nest them.

I'm still looking into this, it's kinda complicated in the code!

lack of filtering in Nested Tasks

Filtering and Searching are things I'm thinking about at the moment, and planned to add anyway. I'll bump it up to the top of the list.

I envisaged Filtering as picking a Task (a GTD project) and excluding everything that wasn't part of that heirarchy (with some sort of indicator to show that the view was filtered). The selected Task becomes the one and only root Task, and retains all it's sub-Tasks.

Searching in my view should highlight any and all Tasks which contain the keyword you search for, retaining all previously visible Tasks and their heirarchy.

Is that the sort of thing you're looking for?

Link to comment
Share on other sites

Guest All-Purpose Guru
Thanks very much for the encouraging feedback. Much appreciated.

I think the issue you're having is different to the known bug - it's not that the Tasks are not shown, more that their nesting has been "lost".

That's exactly what I'm seeing. I have a gazillion tasks that are now all at the root level. I haven't lost any tasks at all, I just don't have a tree any more.

I was thinking about adding a "Remove all nesting" function, but all you really need to do is re-nest the Tasks (and stick to one device!)

Awww. I really *like* switching from one phone to another every week or so and having to re-do everything. :-(

Hmm, odd. That shouldn't happen. If the "TASK-nnnnnnnnnnn" category is exactly the same it should manage the nesting. It just does some very simple logic - "does this match that". If a Task has a parent which does not exist on that device it should be moved back to the root, that's the correct behaviour, but otherwise it should nest them.

I misspoke myself. Further looking at the tasks in question shows I was mistaken and it did indeed assign a different category to the new nested task.

One way you could fix things in the future would be to put a "ROOT-nnnnnnnnn" in the root tasks. Then, when you go and set up the tree, a "ROOT-" tag that doesn't match the actual Outlook task ID of the root would let you know that the nesting was messed up.

You could then re-link up everything based on the "ROOT-" tag ID and then change the categories on the tags in that tree to be correct afterwards, re-writing both the "TASK-" tags and the "ROOT-" tag as well.

I'm still looking into this, it's kinda complicated in the code!

Don't sweat it. I can wait. It's inconvenient, but I'm not paralyzed. I make my living writing code, I can understand what it's like.

Filtering and Searching are things I'm thinking about at the moment, and planned to add anyway. I'll bump it up to the top of the list.

I envisaged Filtering as picking a Task (a GTD project) and excluding everything that wasn't part of that heirarchy (with some sort of indicator to show that the view was filtered). The selected Task becomes the one and only root Task, and retains all it's sub-Tasks.

Sort of like what the default Tasks application does, but with the children of that task showing? That might be convenient.

I really like the fact that all I see is the "Next Action". If I see to much I get overwhelmed and end up doing the fun things instead of the right things.

Searching in my view should highlight any and all Tasks which contain the keyword you search for, retaining all previously visible Tasks and their heirarchy.

I'd like to see a subtree, with the nodes that match the search, and their child trees included. That way, if you search on "call", for example (a quick and dirty way to implement contexts) all of the calls you have to make show up.

Those would be awesome, but what you have right now is very good indeed.

Thanks for the great app.

Link to comment
Share on other sites

Guest chucky.egg
One way you could fix things ...

...but it wouldn't necessarily be able to re-build the nesting, because it won't know which tasks go into which Root task.

I don't mean to suggest you remove the Tree and give up, but the device (not your Exchange account or desktop Outlook) provides the Task ID, so with 2 devices you will always have this problem.

I was thinking about using something else to establish the lineage. Some combination of the Task subject and it's ID (that would make the nesting more useful in Outlook too). The trouble is I can't seem to rely on ANYTHING (except the Task ID) remaining constant.

Filter / Search

I've been thinking of these as 2 functions, but perhaps they are one - a search being a text filter instead of a Priority filter.

What might be nice (depending on how many "branches" your tree has) is to keep the tree structure, but only return "leaf" tasks (those with no children) that match that Priority. You'll still get the context that way. How important is that context? depends on how any of us names our tasks I guess.

I think for now I'll get a simple Filter set up (only returning matching tasks, making them root tasks) and see how that works.

Link to comment
Share on other sites

Guest All-Purpose Guru
...but it wouldn't necessarily be able to re-build the nesting, because it won't know which tasks go into which Root task.

Actually, I just rebuilt my trees by doing something similar to what I'm proposing. I went into the tasks and updated the task IDs from the old IDs to the new IDs. As long as you store the current task ID of the parents (what I called the ROOT tag) in the category tag (you can have more than one) you will be able to reconstruct.

If you notice the ROOT tag of any to-do doesn't match the real record ID, all you have to do is search the to-dos for any occurrences of the ID number from the ROOT tag in the parent. All of the tasks that had the old task ID are the children of the task that doesn't match. Update their task IDs to the new value. Then you update the ROOT tag in the parent with the new task ID.

I did this manually by grouping the tasks in Outlook and editing the tasks manually.

Viola, next time I ran Nested Tasks the trees were back.

I don't mean to suggest you remove the Tree and give up, but the device (not your Exchange account or desktop Outlook) provides the Task ID, so with 2 devices you will always have this problem.

I'm not planning on using two different devices. I was getting rid of WM6 because it was destroying my battery life. Same device, new OS. I won't be repeating the process.

What I'm proposing is a way to detect and fix a corrupted tree.

I was thinking about using something else to establish the lineage. Some combination of the Task subject and it's ID (that would make the nesting more useful in Outlook too). The trouble is I can't seem to rely on ANYTHING (except the Task ID) remaining constant.

That's why you store the task ID and when you notice it doesn't match, you can search for the children and update them all.

Filter / Search

I've been thinking of these as 2 functions, but perhaps they are one - a search being a text filter instead of a Priority filter.

What might be nice (depending on how many "branches" your tree has) is to keep the tree structure, but only return "leaf" tasks (those with no children) that match that Priority. You'll still get the context that way. How important is that context? depends on how any of us names our tasks I guess.

I think for now I'll get a simple Filter set up (only returning matching tasks, making them root tasks) and see how that works.

Anything is good. Thanks for your efforts.

Link to comment
Share on other sites

Guest chucky.egg
If you notice the ROOT tag of any to-do doesn't match the real record ID, all you have to do is search the to-dos for any occurrences of the ID number from the ROOT tag in the parent. All of the tasks that had the old task ID are the children of the task that doesn't match.

Sorry, just not following you at all. Repairing nesting is something worth doing, so I'd like to pursue it

At the moment each Task has the ID of it's "parent" stored in its Categories field.

If the stored ID does not match the ID of another Task, then the Task is an "orphan", and gets added to the root.

I think you are suggesting each "parent" also stores the ID numbers of its "children"?

Because (potentially) all of the IDs have changed you'd have to show it, for each "parent" ID, what the new "parent" should be. I can't rely on enough consistency to auto-rebuild by deduction.

I'm working on the filtering at the moment (tearing my hair out!) and some bug fixes. New version in a few days probably.

Link to comment
Share on other sites

Guest chucky.egg

Just finished adding Filtering (by Priority) functions and some bug fixes. What a nightmare!

I'm going to test it for a few days before I release it

Link to comment
Share on other sites

Guest chucky.egg

New version: 0.6

Version 0.6 Change Log:

1. ADDED: Filter by Priority (eg Include High, Normal and exclude Low)

2. ADDED: Collapse Others function - collapse all but the currently selected Node

3. ADDED: Moved menus (left = Refresh, right = menu) in line with standards

4. FIXED: Changing Priority sometimes altered the displayed Subject (but not the actual Subject)

5. FIXED: Checking boxes not always marking Task as complete

6. FIXED: Unhandled Error when adding Task if NOT showing Completed Tasks

7. FIXED: Child nodes not always re-drawn when pasting Parent

8. FIXED: Save button not always working in Task edit screen

9. FIXED: Option to "start collapsed" logic was reversed (selected resulted in expanded instead)

Please note: Future releases will be done through AppToDate. The CAB file is now hosted on a mini site, so I don't really want to have to upload it here too. I will try to remember to post an update to this thread though.

Link to comment
Share on other sites

Guest chucky.egg

New version 0.6.1

Version 0.6.1 Change Log:

1. ADDED: Option: Show Start Date on menu

2. FIXED: Selected node in view after Expand All

3. FIXED: Prefixes for Start, Due dates not loading

4. FIXED: Action button opening wrong Task after paste

5. FIXED: Unchecking box not updating Task Completed status

Download available now through AppToDate

Link to comment
Share on other sites

Guest All-Purpose Guru
Sorry, just not following you at all. Repairing nesting is something worth doing, so I'd like to pursue it.

I think you are suggesting each "parent" also stores the ID numbers of its "children"?

No. A root has a different ID number tag, with "ROOT" rather than "TASK" in it. When you see "ROOT" in a category you know it's a root task.

The number of the tag is the ID number OF THAT TASK, not the children.

If it matches, no problem, nothing to see here, you can ignore it.

IF IT DOES NOT MATCH THE TASK ID, nesting is blown. The ROOT id will tell you the OLD task number, and the task number OF THAT TASK is the new number.

When I get some time, I'll draw you a picture. I'm not explaining it well, sorry.

Link to comment
Share on other sites

Guest chucky.egg

Ahh, I see what you mean.

It should apply to all Tasks, not just the root Tasks, as any of them could be changed (in fact, after a re-sync it's quite possible that ALL of them will have changed).

So every Task has a note of it's "original" Task ID, stored in that Task itself. If that note no longer matches its current ID you can do a replace on the "original" ID, and substitute the current ID, to rebuild the structure.

Potentially tricky to implement. I'll have a look into it.

Thanks for the suggestion, I do like the idea.

Link to comment
Share on other sites

Guest All-Purpose Guru

Here's a quick script of what I was envisioning. Pardon the Royal references.


Original Tree
123 Elizabeth ROOT-123
124 Charles TASK-123 ROOT-124
126 William TASK-124
127 Henry TASK-124
125 Andrew TASK-123 ROOT-125
128 Beatrice TASK-125
129 Eugenie TASK-125

Blown Tree
500 Elizabeth ROOT-123 // Note ROOT != taskid -> subtree is blown
501 Charles TASK-123 ROOT-124
502 William TASK-124
503 Henry TASK-124
504 Andrew TASK-123 ROOT-125
505 Beatrice TASK-125
506 Eugenie TASK-125

Reconstruction of Tree, first pass (look for TASK-123 (we get this number from the ROOT-123 tag in task 500) and update to TASK-500)
500 Elizabeth ROOT-123
501 Charles TASK-500 ROOT-124 // TASK updated
502 William TASK-124
503 Henry TASK-124
504 Andrew TASK-500 ROOT-125 // TASK updated
505 Beatrice TASK-125
506 Eugenie TASK-125

Reconstruction of Tree, update root, look for other blown subtrees
500 Elizabeth ROOT-500 // ROOT now updated, children are now reattached
501 Charles TASK-500 ROOT-124 // Note ROOT != taskid -> subtree is blown
502 William TASK-124
503 Henry TASK-124
504 Andrew TASK-500 ROOT-125
505 Beatrice TASK-125
506 Eugenie TASK-125

Reconstruction of Tree, second pass (look for TASK-124 and update to TASK-501)
500 Elizabeth ROOT-500
501 Charles TASK-500 ROOT-124
502 William TASK-501 // TASK updated
503 Henry TASK-501 // TASK updated
504 Andrew TASK-500 ROOT-125
505 Beatrice TASK-125
506 Eugenie TASK-125

Reconstruction of Tree, update root, look for other blown subtrees
500 Elizabeth ROOT-500
501 Charles TASK-500 ROOT-501 // ROOT now updated, children are now reattached
502 William TASK-501
503 Henry TASK-501
504 Andrew TASK-500 ROOT-125 // Note ROOT != taskid -> subtree is blown
505 Beatrice TASK-125
506 Eugenie TASK-125

Reconstruction of Tree, third pass (look for TASK-125 and update to TASK-504)
500 Elizabeth ROOT-500
501 Charles TASK-500 ROOT-501
502 William TASK-501
503 Henry TASK-501
504 Andrew TASK-500 ROOT-125
505 Beatrice TASK-504 // TASK updated
506 Eugenie TASK-504 // TASK updated

Reconstruction of Tree, update root, look for other blown subtrees (none, finished)
500 Elizabeth ROOT-500
501 Charles TASK-500 ROOT-501
502 William TASK-501
503 Henry TASK-501
504 Andrew TASK-500 ROOT-504 // ROOT now updated, children are now reattached
505 Beatrice TASK-504
506 Eugenie TASK-504

[/codebox]

Edited by All-Purpose Guru
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.